文 / 蔡學鏞
★ 這是舊文章的改版
雲(Cloud)是網路的象徵,所以雲端運算(Cloud Computing),最廣義的解釋就是「網路運算」。這恐怕是目前大家對於雲端運算的最大公約數,在這之外,大家對於雲端運算的理解和定義,都不太一樣。這篇文章試圖用最淺顯的方式,向大家說明我所知道的雲端運算。
【雲端的組成與架構】
網路是由許多伺服器所組成,雲端運算的基礎是大量的伺服器。如果只用一部超級電腦當伺服器,一樣可以提供相當大的運算威力,這樣可以算是雲端嗎?恐怕不行,因為雲端運算強調的是許多伺服器聯合起來提供強大的運算能力。只有一部超級電腦或少數幾部電腦,恐怕太薄弱,無法形成雲,充其量是「水蒸氣」。
良好的雲端運算架構方式,必須具備規模彈性、容錯、平衡負載:
1 當運算規模增加,雲端要可以彈性變大,只要加上新的節點就可以了,這樣的能力稱為水準擴充(horizontal scalability)。
2 資料重複(redundancy)存放在不同位置,確保資料安全。
3 讓伺服器之間的負載盡量平衡,免得某些伺服器太忙,某些卻太悠閒。
【雲端的前世今生】
既然雲端運算是將許多電腦聯合起來提供運算能力,那麼就會用到網格運算(grid computing)。比較知名的網格運算應該是SETI(尋找外星人)計畫,幾年前SETI流行時,許多人的電腦都下載安裝了SETI程式,奉獻出電腦多餘的運算能力,為尋找外星人這種無聊之舉貢獻心力。
以往的網格運算似乎是供專家使用居多,著重在需要複雜運算的「單一任務」,例如基因定序、核爆模擬。但雲端運算則比較偏大眾應用,相當高比例的大眾應用其實不需要進行複雜的運算,但是由於「大眾」相當多,所以累積起來的運算需求也相當可觀。所以在應用上,雲端運算可以被視為平民化的網格運算。
除了上述的差別,雲端運算和網格運算的差別還有兩點。第一,為了方便管理,並充分運用伺服器的效能,雲端運算也經常會使用到「虛擬化」技術。第二,以往的網格運算通常也只使用專屬的應用協定和資料格式,但雲端運算則受到近年Web潮流的影響很深。
【雲端的操作介面】
雲端運算的願景是以Web為前端,資料全都放在後端,不放在使用者手上。如此一來使用者可以不用擔心不同裝置上資料同步化的問題,也可以隨時取用資料(如果網路沒斷線的話)。既然資料都放在雲端,運算都在雲端進行也就理所當然。因為這樣的效率最好,可以減少資料在使用者和雲端之間的傳輸。
至於Web前端,微軟和Adobe等公司會希望你使用他們各自的RIA技術,但IBM、Google、Apple等沒有RIA技術的廠商,則會希望你使用Web瀏覽器(JavaScript/CSS/HTML),以免被(其他)廠商綁死。
操作介面的程式碼透過Web Browser動態地送到客戶端執行,重要的邏輯部分放在Web伺服器上。這樣的運作方式,其實就是SaaS。所以雲端運算和SaaS是相輔相成的技術概念。
除了Web瀏覽器和RIA之外,許多標準的應用也會隨著雲端運算的興起,開始支援從雲端開啟文件,或寫入文件到雲端,這些讀寫的動作會透過標準的HTTP協定、FTP協定、或WebDAV來達成。說不定以後軟體在「File」選單中,除了「Save」、「Save As」之外,還會多出一個「Save To Cloud」。
【雲端的隱憂】
但是雲端畢竟是在遠方,資料的存取速度自然遠比不上自己電腦上的硬碟。所以除非客戶端連線到雲端的速度夠快,否則這會成為推廣雲端運算的障礙。更不用提萬一像Google App Engine來個大斷線、或者太平洋海底光纖斷線,頓時白雲變烏雲,你可就求救無門了。
在雲端的廠商會將服務列在網頁上,讓你選擇要執行的程式。這些雲端上的程式都可以設定參數,以記錄你的名稱、喜好,以提供更好的服務。甚至過去的一舉一動,也會被記錄下來,你的隱私資料成為廠商的資產。如果公司利用雲端處理ERP/CRM等資料,那麼公司的運作機密以及客戶資料也都會被雲端的廠商知道。是的,雲端廠商都會強調他們重視顧客的權益,這就看你信不信了。
除了可以使用廠商原本就提供的雲端程式,利用參數設定來符合自己需求之外,你也可以上傳程式到雲端。Google App Engine允許你將程式上傳到雲端,在雲端執行。使用Google App Engine,可以省去你建置與管理伺服器的困擾。上傳程式一樣有暴露機密的可能,如果你是一家搜尋引擎的公司,你發明瞭比Google更準確的搜尋演算法,你敢把這樣的服務放到Google的雲端上,只是為了省去「建置與管理伺服器的困擾」嗎?
【雲端對軟體開發者的影響】
你想用什麼方式實踐你的雲端系統,會受到雲端供應商(Cloud Provider)的平台限制。
雲端供應商提供這類的服務,都會限定所使用的語言和框架。Google目前只支援Python和相關的Web框架。以後才會支援其他語言和框架。Python是最適合雲端的語言嗎?恐怕不是,但應該已經符合大眾的需求。
你的Python程式會被Google複製到不同的伺服器上各自執行,這樣的程式無法協同完成一件複雜的任務(例如基因定序)。比較適合雲端的語言其實是函數式語言,例如Erlang。而微軟預計會以F#當作雲端運算的語言。
另外,最厲害的雲端運算設計方式,甚至會向Mobile Agent技術借鏡,讓程式碼可以流動。我認為能結合Mobile Agent的雲端,才是真正先進的雲端。
【雲端的商業模式】
雲端運算會讓軟體產業由原本的「銷售套裝軟體」改成「銷售服務與租賃軟體」。在這樣的商業模式之下,牽涉到的業者包括了ISP(Internet Service Provider)、ASP(Application Service Procider)、DSP(Data Service Provider)、以及Cloud Provider,形成一個緊密的產業結構,由ISP提供網路(例如ADSL)、ASP提供軟件、DSP提供資料、Cloud Provider提供運算能力。
【為何雲端紅了】
雲端運算「這個名詞」在這兩年會這麼紅,主要是因為Web的興起所帶動的。近年Web化的趨勢是將資料都放在伺服器上,既然資料都在伺服器上,運算最好要在接近資料的地方進行,所以運算也在伺服器上才是比較好的作法。運算完成之後,將運算後的結果傳遞到客戶端即可。伺服器需要龐大的運算能力才能應付眾多使用者所提出的運算需求,所以需要將許多伺服器串接起來。
剛剛提到,運算必須要是在伺服器上進行,而不是在客戶端進行。把所有的資料都送到客戶端,然後才在客戶端進行處理,這是不合理的,因為:
1. 資料量相當大,傳輸的速度會相當慢
2. 客戶端的電腦不見得有運行此程式的能力
3. 有資料保密和程式邏輯保密的風險。
從這個角度來看,雲端運算勢在必行,要紅是遲早的事。儘管目前雲端運算有一點渾沌不明,但我不認為雲端運算會是曇花一現。
【雲端何時成熟】
儘管雲端運算不會只是曇花一現,但是要多久的時間才能成熟,就相當難以估計。我個人認為目前雲端運算還只是在萌發時期,要到達成熟還有很長的一段時間,雲端運算需要企業做出相當多改變,加上目前的國際經濟局勢相當糟糕,可能會持續好幾年的時間,在這段時間內,多數企業會保守因應新技術和新市場,所以沒有幾年以上的時間,我們很難看到雲端運算的實際成績。
綜觀目前的狀況,雲端運算正在一團雲霧之中,渾沌未明。雲端運算目前充滿不確定因素,太多事情的發展很難預料。我認為,妄想漫步在雲端,而太早踏入,小心你一腳踩空。
當經濟局勢穩定,且提倡雲端運算的這些廠商能夠彼此坐下來談,定義出一套雲端運算的標準時(Protocol、API…),或許才是大多數的企業應該投入雲端運算的時候。
資料來源:
http://jerrylovesrebol.blogspot.com/2008/12/blog-post_02.html