Friday, July 23, 2010

Cloud Computing


Cloud Computing在這幾年已經人人都聽過,但真的知道Cloud Computing的又有多少人?就算是做IT的,也未必真的懂Cloud Computing. 所以,今天就讓我來簡單說說Cloud Computing.

Interpersonal Computing


Cloud Computing是Web 2.0概念的衍生物. 而Web 2.0其實是一個重視互動的網絡應用概念.

不知道大家還記不記得,在幾年前,大家都以為網絡世界就是每個人都自己開一個網站去介紹自己,把自己的相片放上網站,寫下自己的出生年月日,星座,生肖,興趣,住在哪一區,有空的話就加點自己的作品上去,然後還加個計數器,去看有多少人來訪問過(*.*)...這種守株待兔的網站是一點也不互動的. 到了現在有Web 2.0這個概念,就出現了很多如Facebook,Blogger,YouTube這類互動網站. 這些網站其實就是體現了Web 2.0中的Interpersonal Computing概念. 從此,沒有人會再去開個人網站去等他人來訪問.

Web Services 和Software as a Service(SaaS)


Web 2.0 除了Interpersonal Computing外,還包括了Web Services 和Software as a Service(SaaS).

Web Services就是在網絡上公開給大眾使用的服務,例如搜尋器,Google Maps,YouTube,新聞,股價,等等. Web Services的例子是多不勝數的,基本上想得出來的,都已經有人做了出來.要是找到還有人做的,你去做,說不定就能發達~

Software as a Service就是在網絡上的應用軟件,最簡單易明的就是Google Docs. 我們處理文件,一直以來都是用M$ Office的. 連帶OS也要用Windows. 全人類基本上都是M$的客戶. 但當有了SaaS的概念之後,世界開始改變. Google把最有用的Office軟件放到網絡. 從此以後,你只要有個browser,就可以用到Office軟件. 是Windows還是Mac,或者是Linux,基本上沒有分別. 而SaaS這個概念看來是非常好的,但背後其實是如何做到呢? 其中一種方法就是Cloud Computing.

Cloud Computing


Cloud Computing,就是雲端計算. 所謂"雲",就是一大堆電腦. 數量越多越好. 而"雲端計算"的意思就是,把工作交給這一大堆電腦去做. 為甚麼要這麼多電腦去做計算? 因為人多好辦事,電腦越多,理論上就做得越快,說穿了就是人海戰術.

但是,也會人多手腳亂. 事實上,很多時候,人多了不但沒有加快,反而是減慢了速度.

舉一個例子, 陳大文明天要搬辦公室,有100件貨物要由舊的辦公室搬到貨車上,然後去到新的辦公室,又要搬一次上去. 如果他只顧用一個人來搬的話,就要搬10個小時. 那搬到天黑了也還沒搬得完!!他的公司是炒股票賺錢的,所以區區幾千幾百元,他不會放在眼內,最重要是搬得快. 他想也不想,就要去顧100個人來搬,希望到時一下子就可以搬完了100件貨物.

到搬辦公室當天,100個人只80個到了,其他20個不知去了哪裡. 這些也算了,更可怕的還在後頭. 貨物每件都大小不同,80個人全都去爭小貨物來搬,爭來爭去,又打了起來,最後有幾個進了醫院,又有幾個嫌貨物太重,罷工. 最後真的工作的就只有50個. 好了,這50個人,快快手手,到了新辦公室,以為會順順利利搬好了.但結果工人們只搬上辦公室,之前又沒有說好哪些東西放在哪裡,結果所有貨物都放到亂亂的,辦公室不像辦公室.

搞了一整天,用了十多個小時,比只顧一個人還要慢,但郤要付50個人的工錢,而得出的結果是一個亂糟糟的新辦公室. 陳大文的如意算盤當然打不響.

這個故事說明了甚麼?

人多未必好辦事,更多時候是人多手腳亂. 而關鍵就在於如何善用資源. Cloud Computing這個概念就可以解決這個問題.實現的方法有很多,五花八門,而今天我想介紹的方法叫MapReduce.

MapReduce


MapReduce是一個很簡單易明,而又非常強大的實現方法. 它把一個任務分為三個部驟:
1.Map:
就是把一個任務,分為很多小任務,然後每一個小任務都交由一台電腦(或一個程序)去執行.
2.Execute:
執行小任務
3.Reduce:
把小任務執行的結果結合/簡化為一個大結果

以搜尋器為例,要在1秒之內把全世界的網都搜尋一遍,無論如何都是一個很大的難題. 而Google就是用MapReduce來處理這些任務. 其實剛才搬辦公室的例子都是一樣可以用MapReduce來處理,想想看,在搬辦公室之前,其實應該先點好貨物,把它們分類,然後才決定需要工人的人數,再決定哪個工人去搬哪些貨物(Map),這樣的話,工人們就不會爭. 另外,也要事先想好那些貨物要在新辦公室如何放置(Reduce),這樣的話,最後就不會亂糟糟.

MapReduce在Apache已經有一個library可以用,叫Hadoop. 但我今天想介紹的是GridGain.

http://www.gridgain.com/index.html

它是一個免費,使用簡單,且強大的framework,在它的網站上有一個Hello World示範,可以在15分鐘內寫好一個cloud application. 我覺得是非看不可的.

http://www.gridgain.com/screencast/grid_app_in_15min/screencast.html

有興趣的話,大家可以下載來玩玩~