雲(Cloud)是網路的象徵,所以雲端運算(Cloud Computing)最廣義的解釋就是「網路運算」。這恐怕是目前大家對於雲端運算認知的最大公約數,在這之外,大家對於雲端運算的理解和定義,都不太一樣。這篇文章試圖用最淺顯的方式,向大家說明我所知道的雲端運算。

網路是由許多伺服器所組成,雲端運算的基礎是大量的伺服器。如果只用一部超級電腦當伺服器,一樣可以提供相當大的運算威力,這樣可以算是雲端嗎?恐怕不行。因為雲端運算強調的是「許多」伺服器聯合起來,提供強大的運算能力。只有一部超級電腦或少數幾部電腦,恐怕太薄弱,無法形成雲,充其量只能稱之為「水蒸氣」。

良好的雲端運算架構方式,必須具備規模彈性、容錯、平衡負載。當運算規模增加,雲端需要增加彈性,只要加上新的節點就可以,這樣的能力稱為水平擴充(horizontal scalability)。資料重複(redundancy)存放在不同位置,確保資料安全。讓伺服器之間的負載盡量平衡,免得某些伺服器太忙,某些卻太悠閒。

既然雲端運算是將許多電腦聯合起來提供運算能力,那麼就會用到網格運算技術(grid computing)。以往的網格運算似乎是供專家使用居多,著重在需要複雜運算的「單一任務」,例如基因定序、核爆模擬。但雲端運算則比較偏大眾應用,相當高比例的大眾應用其實不需要進行複雜的運算,但是由於「大眾」相當多,累積起來的運算需求也相當可觀。所以在應用上,雲端運算可以被視為平民化的網格運算。

除了上述的差別,雲端運算和網格運算的差別還有兩點。第一,為了方便管理,並充分運用伺服器的效能,雲端運算也經常會使用到「虛擬化」技術。第二,以往的網格運算通常只使用專屬的應用協定和資料格式,但雲端運算則受到Web應用潮流的影響很深。

雲端運算的願景是以Web為前端,資料全都放在後端,不放在使用者手上。如此一來使用者可以不用擔心不同裝置上資料同步化的問題,也能夠隨時取用資料(如果網路沒斷線的話)。既然資料都放在雲端,運算都在雲端進行也就理所當然。因為這樣的效率最好,可以減少資料在使用者和雲端之間的傳輸。

至於Web前端,微軟和Adobe等公司會希望你使用他們各自的RIA(Rich Internet Application)技術,但IBM、Google、Apple等沒有RIA技術的廠商,則會希望你使用Web瀏覽器(JavaScript/CSS/HTML),以免被(其他)廠商綁死。

除了Web瀏覽器和RIA之外,許多標準的應用也會隨著雲端運算的興起,開始支援從雲端開啟文件,或寫入文件到雲端的技術,這些讀寫的動作會透過標準的HTTP協定、FTP協定或WebDAV來達成。說不定以後軟體在「File」選單中,除了「Save」、「Save As」之外,還會多出一個「Save To Cloud」。

但是雲端畢竟是在遠方,資料的存取速度自然遠比不上自己電腦上的硬碟。所以除非客戶端連線到雲端的速度夠快,否則這會成為推廣雲端運算的障礙。

在雲端的廠商會將服務列在網頁上,讓你選擇要執行的程式。這些雲端上的程式都可以設定參數,以記錄你的名稱、喜好,以提供更好的服務。甚至你過去的一舉一動,也會被記錄下來,你的隱私資料成為廠商的資產。如果公司利用雲端處理ERP/CRM等資料,那麼公司的運作機密以及客戶資料也都會被雲端的廠商知道。是的,雲端廠商都會強調他們重視顧客的權益與隱私,但這就看你信不信了。

除了使用廠商原本就提供的雲端程式,利用參數設定來符合自己需求之外,你也可以上傳程式到雲端。Google App Engine允許你將程式上傳到雲端,在雲端上執行。使用Google App Engine,可以省去你建置與管理伺服器的困擾。不過,上傳程式一樣有暴露機密的可能,如果你是一家搜尋引擎的公司,你發明了比Google更準確的搜尋演算法,你敢把這樣的服務放到Google的雲端上,只是為了省去「建置與管理伺服器的困擾」嗎?

廠商提供這類的服務,都會限定所使用的語言和框架。Google目前只支援Python和相關的Web框架,以後才會支援其他語言和框架。
Python是最適合雲端的語言嗎?恐怕不是,但應該已經符合大眾的需求。你的Python程式會被Google複製到不同的伺服器上各自執行,這樣的程式無法協同完成一件複雜的任務(例如基因定序)。
比較適合雲端的語言其實是函數式語言,例如Erlang。而微軟預計會以F#當作雲端運算的語言。

綜觀目前的狀況,雲端運算正在一團雲霧之中,充滿著不確定因素。我認為,先別太快妄想漫步在雲端,太早踏入,小心你一腳踩空。

作者簡介:
蔡學鏞-技術顧問
清華大學資訊工程碩士,曾任華碩集團軟體工程師、元智大學資訊系講師、美商歐萊禮出版社技術編輯、臺灣微軟特約專欄作家。

熱門新聞

Advertisement