2009年11月12日 星期四

雲端與網格--集中運算的本質矛盾

警告:UNMOE文
本文不萌、臭長、而且硬梆梆…
ubuntu 9.10主打雲端,這點是他們的口號,傳得沸沸洋洋,我們這些ubun幫也很清楚了。ubuntu確實也做得還不壞。

不過,雲端這種技術,本身也是有些先天性缺憾的。先不說stallman大老認為「將資料與運算交給伺服器是喪失控制權」這種涉及立場與信念的問題,我們來考慮別的方面。

我指的是「集中運算」這件事。


網路上有不少文章提到「雲端運算是一種分散運算」,但是我實在不吐不快,這句話「純粹是從伺服器維護者的角度說的」。雲端運算在使用者的角度上,是一種徹頭徹尾的集中運算模式。

假設你使用google docs,而google docs伺服器背後,有一團由千百台主機所構成的「伺服器雲」。他收到你的任務後,將運算工作分配給雲裡的所有電腦--他確實是在進行分散式運算,但是,以全球的觀點來說呢?

全球所有google docs的用戶,只知道將運算請求集中到這個節點中,至於雲裡頭是一台主機還是一百萬台,並不關使用者的事,使用者只知道google docs這個運算節點,可以幫我處理掉那些工作,這樣就行了。

這番說明並不是討論「集中式運算或分散運算熟優熟劣」,而是強調運算被「集中了」。

我的問題是:「為什麼要把本來可以由本機負荷的運算量,集中交由某指定主機(伺服器)來負荷呢?」--相比之下,當伺服器在承受從全世界湧來的成千上萬工作請求時,為什麼卻讓自家電腦的資源白白放在idle狀態下空轉呢?

你有必要使用雲端嗎?


先不考慮雲端服務提供商的道德操守與營利之類的問題,單就直覺上來說,將「在個人電腦上就能做好的事情」交由遠端主機來作,就像不把垃圾交給垃圾車,而親自送去垃圾場一樣多此一舉--當然,如果是要處理個人硬體無法負荷的工作則另當別論。比方說智能手機硬碟空間不足,無法裝下office軟體;又或需要攜帶資料移動,但偏偏硬體不方便帶著走等場合。

在個人運算平台可負荷的狀況下(也就是多數使用者絕大多數的狀況),我們根本不需要去使用雲端計算。否則不但是在自找罪受,同時還糟蹋了網路雲資源(因為你分走了真正需要雲運算的人所能使用的計算能量與儲存空間)。

運算能量浪費


雲計算在某種意義上,可以理解為:「將全部的工作集中到一個人(電腦)身上。」當然,經濟學指出,規模可以構成效率(資料的傳輸成本先不理會),主機本身的運作顯然會比我們的個人電腦更有效率。

但是,使用像google docs這種軟體計算財報、打字時,我們的個人電腦能關機嗎?

不能!

以全世界的角度來說,這是在浪費計算能量,當雲端成為每個人理所當然使用的東西後,更會成為上億台電腦規模的超巨量浪費--本來嘛,大家把做得到的事情全推在一個人身上,然後在原地發呆--就算助人的人是超人,也絕對稱不上有效率的做事方式呀。

試著舉個例子來說明上面的想法:
假設河邊有一千個人吃完飯,準備要洗一千個碗。請問是將工作全交給某超高速洗碗機器人處理,其他人站在原地發呆有效率?還是大家亂糟糟的湧到河邊各洗各的,然後讓機器人處理某些殘障人士的碗比較有效率?

我相信是後者。

互助--從網格切入


在上面論述基礎上,進一步推想,每個人的洗碗速度必然有差異,如果某些洗得快的人把工作做完後發覺自己沒私事好辦,那麼能不能幫其他人的忙呢?

「幫助其他人的忙」這個概念下--我們需要的是點對點式的網格運算(grid)。

看普通網頁或打報告的時候,CPU幾乎都處在低負載下,為什麼我們不能把閒置的CPU運算能量分散給別人呢?然後當你需要爆發性的大運算量時,(假設你要轉檔好了,或是算密碼、跑模擬),你可以從別人閒置的電腦那裡暫時調用兩倍、三倍甚至是十倍以上的運算能量,把工作加快完成。

這走的是和雲端的集中運算思維完全相反的道路:每個願意加入網格的人都成為網格的節點,當閒置時電腦可以貢獻運算能量幫助他人(因為閒置時才提供幫助,所以對電腦效能幾乎完全沒影響),當電腦忙碌時就可以反過來問問網格中的其他電腦有沒有多餘的運算資源,可以幫上自己的忙。

在自願的前提下,互助真是世界上最美好的事了。

網格的侷限


當然,並不是所有的運算都是可以並行化或網格化的;此外資料加密問題也需要考慮;還有,因為網路傳輸延遲、丟失封包等問題,必然有很多運算階段會被多台電腦重複處理到,會造成很大比例的資源浪費--但至少我們可以撈回本來電腦閒置時全然無用的部份資源,讓加入網格的電腦,盡量保持在最大有效運用的狀態。

另外因為每一個節點都可能在任意時候離線或是永遠脫離網格,也不是所有服務都適合網格化,比方說ubuntu one這種網路硬碟,如果點對點網格化的話,很可能儲存的資料會憑空蒸發,集中而可靠的雲計算比分散而充滿彈性的網格更適合他。

網格應該不是雲端的敵人,而是雲以外的另一個世界,有不同的適用範圍。

=================================
附記:
最讓我困惑的是:雲端計算名氣鵲起,但是通用的網格運算呢?(不是那種針對大型研究的單向式網格,而是資源能多向流動的點對點網格)怎麼連點消息都沒有?

還是說,哪裡有情報是我沒注意到的?

4 則留言:

  1. HI

    小弟覺得您舉出的例子和描述的道理都十分正確
    然而我從另外一個角度看現實狀況,個人以為
    『不管有沒有用雲端,個人電腦就已經在浪費計算能力了』

    事實上我提的是另外一回事,我的焦點在於:
    許多親朋好友根本就不懂得運用手上的工具(電腦)
    白白花了那麼多錢買高檔電腦,終究也只是打報告、上網、電動

    技術上來說,雲端的使用確實是有待討論
    但我看到的是,周遭許多朋友一開電腦就是在浪費資源了
    因此雲端的使用個人覺得還不是需要擔心的問題

    話說回來,我相信雲端技術會伴隨著低成本低效能硬體的出現
    畢竟google內部必定有高人想法與您一樣,一定會提出這問題的。

    回覆刪除
  2. 不得不承認,我們平時即使不用雲端,也確實浪費了不少運算能量。但總地說起來,至少這種舉動並非理所當然的,但雲端的出現,可能會讓「個人電腦運算能量浪費」這件事常態化。

    還有另外一個可能性--一旦雲端的使用成為了常態,電腦製造商可能不會繼續製造具有豐沛運算能力的個人電腦。這樣一來,當然也就沒有運算能量浪費的問題了,取而代之的,是運算能量的完全壟斷。

    當然,這已經是另外一個問題了。

    回覆刪除
  3. "互助--從網格切入",這整段是錯誤的,網格是早期雲端的架構,相同是形容伺服器叢集的方式,只不過網格和雲端的模式不同罷了(前者各自獨立,後者以cell的方式成就整體)

    其餘都是OK的,Server對Client來說,都是一個"點",所以沒必要提及"點"的內部運作方式,而是單純的利用和應用罷了,至於通通丟進雲端的角度也不正確,因為只是單純的"應用方式"的不同,取決於開發與設計的角度,和雲端也沒有任何的關係的

    回覆刪除
  4. 給果凍喵:

    雲端和網格是不同層面上的東西,就跟三角形和紅色一樣。

    「雲端」是使用者看伺服器的角度,「網格」則是常被(雲端)伺服器使用的其中一種內部架構。雲端伺服器可以用網格的方式組成,也可以用叢集的方式,或是用單台大型主機構成。

    但是,網格技術不是只能用在伺服器上面。就像紅色不是只能用在三角形上面一樣。

    本文中一直強調「點對點式的網格」(名詞是我自創的),這是指一種資源共享的網格。

    有沒有用過BT?那就是一種點對點式的系統。我們從BT網路取得檔案資源,作為代價,我要為BT網路提供頻寬,把資源再分享給大家。

    在點對點網格中,共享的東西不再是檔案,而是每台電腦的CPU時脈數,也就是計算能力。對使用者而言,他與BT的差異就只在這裡。

    回覆刪除

☆每日吐嘈,有益身心☆
…不過還是請手下留情別太狠啊。