雲端運算本身並沒有一個標準的定義, 然而它卻是對分散式運算機集群 提供即時資源和服務的網路以及資料中心的擴展性和可靠性等方面的一個形象的描述 本文將通過比較實際中的不同類型的雲來介紹雲端運算的概念 創新之舉以及它的優缺點 目前雲端運算的兩大租用形式 雲端運算主要有兩種租用形式 : 按需提供運算機體和按需提供運算能力 兩 者使用的平臺一致, 但前者側重于為客戶提供需要的運算機體, 而後者則被設計 為適於提供高強度數據運算的能力 Amazon 的 EC2 服務 (www.amazon.com/ec2) 屬於第一類雲端運算範疇 一個小型的 EC2 虛擬運算機體大致配置如下 :1.0~1.2GHz 2007 年 Opteron 或是 2007 年 Xeon 處理器 ;1.7G 的記憶體 160G 硬碟空間, 具備中等的 I/O 性能, 收費標準為一小時 $0.10 美元 另外一個按需提供運算機體是 Eucalyptus 系統, 它與 Amazon 的 EC2 具有同樣的 API 介面 Google 的 MapReduce 則屬於第二種類型的雲端運算 它強大運算能力可有最近一次實驗中窺見一斑 研究人員用 1800 台伺服器搭建了一個集群平臺, 其中每台伺服器配備 2GHz Intel Xeon 處理器,4G 記憶體和 2 個 160G IDE 介面磁片 將 MapRedue 系統運行於平臺之上, 並啟動 TeraSort 運算測試工具 (http://research.microsoft.com/barc/sortbenchmark), 運算目標是為 1010 個 100 位元組 ( 大致為 1TB) 的記錄資料進行排序 最終整個過程只花費了大約 850 秒 開源系統 Hadoop(http://hadoop.apache.org/core) 調用了 MapReduce 實現了同樣的功能 按需提供運算能力的雲模式造就了 SaaS( 軟體線上服務 ) 的興起, 比如 Salesforce.com 及其他的線上軟體產品 ; 另一種即是類似於 Amazon EC2 的 PaaS( 硬 體線上服務 )
雲端運算的三大特性 線上服務的概念在互聯網上早已有之, 然而雲端運算相比有三大特性, 因而備 受矚目 (1) 擴展性 : 一些公司雲端運算架構的可以擴展到幾個甚至更多資料中心的規 模 ; (2) 簡約性 : 在雲端運算之前, 實現高性能分散式運算的程式設計十分複雜, 需要有網格式服務 節點間的資訊傳遞以及其他一些特殊的方法才能實現 而現今, 大多數人都覺得雲端存儲服務 API 和 MapReduce 式的雲端運算 API 實現起來要簡單一些 (3) 經濟性 : 雲端運算實現了按需計算的收費模式 比如說, 你需要在增加 1000 個運算單元處理 1 小時, 那麼你只需購買這 1000 個運算單元 1 小時的運算能力, 而無需購置設備 這是個革命性的突破, 意味著 : 通過 Google File System(GFS) 和 MapReduce 或 Hadoop Distributed File System, 調用 1000 個節點進行 10TB 資料運算的大型工程變得容易實現 目前大多數的工程還沒有達到這個規模的運算量 還有其他的提升與進展也增加了雲端運算的利潤
私有雲 vs. 公共雲 雲端運算的管理 成本和安全性取決於用戶是自身創建內部雲還是購買第三方廠商的服務 私有雲一般歸單一組織內部管理和使用, 也可託付於第三方廠商對雲進行管理 因此, 私有雲可以是自有, 也可租借 相反, 公共雲都是由一個組織負責運作, 然後將雲服務提供給各個需要的客戶 比如,Google 的 GFS MapReduce 和 BigTable 組成的內部雲即是私有雲, 目前為止, 這些服務不對外開放 而向對公眾開放 按需收費的 Amazon EC2 S3 和 SimpleDB 即是公共雲的一部分 值得說明的是,Google 私有雲也對外提供了一些公共雲的服務, 如 email 和 線上辦公服務等 基於使用型的彈性收費模式 前面提及, 雲端運算是以使用的運算資源收費, 實行的是一種彈性的按需收費模式 使用者如遇臨時需要增加運算能力的情況, 可以通過雲隨時獲得所需的計算能力 在這點上類似於水電等公共設施, 因此雲端運算又被稱為公共計算 Amazon S3 和 EC2 就是採用此種收費模式 企業組織得到雲服務有多種途徑, 包括建立內部私有雲, 或是購買第三方廠商 的按需收費模式的雲 這種計費方式優點在於 : (1) 無需前期投資, 使用者可以根據能力按需購買 ; (2) 隨時滿足用戶多變的運算需求 比如說在 Web 2.0 時代的應用運算中, 可能 頭一天只需處理 100 個用戶請求, 第二天就猛增到 10,000 個, 只有雲端運算才 能適應這種變化 為了更好的理解公共計算的概念, 我們來舉個例子 假設你在未來 3 年內需 要 100 台伺服器, 第一種方式是採用雲端運算, 每台伺服器每小時 $0.40, 一年 8760 小時, 三年下來的費用大約為 : 100 0.40 3 8,760 = $1,051,200 另一種方式可以是投入資本購置軟硬體搭建系統 假設每台伺服器成本 $1,500, 聘請系統管理員 2 名, 每名的年薪為 $100,000 每台伺服器的功率為 150W, 每度電的價格為 $0.10, 這樣一算 100 台伺服器每年的能耗成本為 $13,140 3 年的總成本計算公式如下 : 100 1,500 + 3 13,140+ 3 2 100,000 = $789,420.
所以由上得知, 如果你想讓伺服器保持 100% 的使用效率, 那麼自己購買硬 體顯得比較划算, 但是如果只能保持 75% 的使用效率, 那麼購買按需收費的雲端 運算比較實惠 當然, 以上的估算並沒有包含所有的成本入內, 但即使這樣簡單的估算也可以 從中看出雲端運算的收費模式適應許多場合的需要 對用戶來說的優勢與劣勢 雲端運算的出現對當前用戶一次性購買伺服器硬體 自己管理的模式提出了挑戰, 它具有傳統模式所不具備的優勢 首先, 最引人矚目的就是它的收費模式, 這種模式能夠減少前期資本的投入, 降低系統建立的門檻, 並可根據需要隨時擴展系統的規模, 同時支援大量存儲 第二, 雲端服務能帶來超越服務中心的經濟性和高效性, 比如雲端服務在提供服務的同時, 也提供了所需的作業系統, 技術支援以及更為有效的配置和更加安全的環境 因此, 使用雲端服務的單位成本通常是低於企業上門直接提供服務的 最後, 雲端運算最後, 雲端計算架構已經被證明可量化性非常強, 例如, 雲 端存儲服務可以輕鬆地管理 PB(1000TB) 級的數據, 使用傳統的資料庫來管理這麼 大量的數據是有問題的 雲端運算的劣勢在於 :⑴ 由於雲服務通常是遠端的 ( 至少在公共雲端服務 ), 因此應用上容易受延遲和頻寬問題的影響 ;(2) 由於雲服務是多客戶在同一硬體體系下的應用, 因此一旦某一客戶的程式出現故障, 必然危及同一體系下其他用戶的使用 ;(3) 把資料讓供應商可以取得的方法有可能帶來安全性 監管性和相容性問題 層式服務協定堆疊 存儲雲 (Storage Cloud) 能提供 block-base 跟 file-base 的存儲服務, 資料雲 (Data Cloud) 能提供資料管理服務, 而計算雲 (Compute Cloud) 則提供運算服務 通常它們分層分佈建立起雲端服務協堆疊 (stack), 就像一個運算平台一樣用以支援基於雲端的應用服務 見下圖 :
雲上平行運算 http://zh.wikipedia.org/zh-hant/mapreduce 簡單來說 mapreduce 中 map 的就是先把所有的資料都攤開來, 然後每個人都有一張表, 然後要算出另外一張表, 再來是 shuffle, 這邊會有一個 partition function 負責分配誰要算什麼,( 前兩個像是像是 OS 作業的矩陣相乘把矩陣切成很多塊, 給不同的 core 算, 再接起來印答案 ), 而 reduce 則是對這些得到的答案再來做簡化的運算 像這篇 paper 提到的範例是我有一堆網頁, 我要得到一個表則是有很多字, 然後我要找出這個字有哪些網頁有出現過,map shuffle 這兩個步驟就跟上面說得差不多, 但是 paper 中多了 sort 這個步驟則是要各個節點各自要根據索引值來做排序, 而 reduce 則是 merge 這些索引值 ( 也就是字 ) 得值 ( 也就是網頁 ) 無法避開的安全問題 安全問題對雲端運算來說是個繞不開的堆疊 (stack) 如果使用的是公共雲服務, 那麼首先面對安全問題就是他方廠商負責資料的存儲和保護 從好的方面考慮, 將資料委託專業人士保管可以提高安全等級以及節省管理費用, 尤其對一些小公司來說 但是, 兩三個組織分享同一個物理上的資源而不自覺 ( 自己的資料存在別人的空間上並由他人管理, 無論如何都無法不擔心資料被盜看的情況發生 ) 對於某些雲端應用, 自身的安全機制就存在隱患 以 Hadoop 為例, 目前還沒有用戶級的存取控制機制, 雖然有消息稱下一版本將會補上這個漏洞 不過不用擔心, 技術上實現安全機制並不難 比如說 Sector 也可提供按需計算的雲服務, 並有審計 管理和存取控制等安全機制的保障 根據 TeraSort 測試結果, Sector 要快於 Hadoop (http://sector.sourceforge.net). 統一的標準 通用語言與評測手段
開發雲端應用的組織機構目前希望自己的應用能從一個雲很輕鬆的轉移到另一個, 並可對不同雲服務進行交互操作 比如說, 在建立了合適的交互操作架構後, 一種雲應用可從某一雲服務供應商遷移到另一個收費更低 服務更多的雲服務供應商中去 Amazon 的 API 成為目前提供按需運算機體類型雲端運算的實質標準 雲端應用可利用這些 API 實現便捷性和互通性 比如,Eucalyptus 使用這些 API 之後, 那麼運行於 Amazon EC2 上的服務就也可以運行在 Eucalyptus 雲上 不過, 對於雲端存儲來說, 實現便捷性和互通性的難度更大一些 Hadoop 是最流行的雲存儲平臺, 但目前運行在 Hadoop MapReduce 上的應用無法遷移到另一個以 C++ 編寫成的雲存儲平臺上 雖說涵蓋所有雲端運算標準的出臺還為時尚早, 但 Cloud Computing Interoperability Forum (www. cloudforum.org) 和 Open Cloud Consortium (www.opencloudconsortium.org) 一直為此在努力 基於服務的構架設計也初露頭角 Thrift 是一款開發可擴展互動式語言服務的軟體架構, 具備代碼生成引擎 (http://incubator.apache.org/thrift) Thrift 可使不同雲端存儲的交流應用變的簡單, 比如前面提及的 Hadoop 和 Sector 一種通用語言為應用程式提供交互操作也可使不同雲之間的交流變的容易 目前已有多人為 MapReduce 並行程式設計模式開發語言, 設計中包含了一些擴展 SQL 用以支援這種程式設計模式, 但目前還沒有一個真正的大贏家 當前最緊迫的工作是要建立不同雲間交互操作的標準 也許我們可以從網路的發展歷程得到一些啟示, 當初各網路的標準不一導致無法互連, 後來引入了標準的 TCP/IP 等協定才推動了網路的發展, 但是有時候有些出產網路產品的公司有時候會抵制他 今天, 我們又面臨著相似的情況, 雖說現在標準化的進度緩慢, 但相信解決了不同雲間的訪問後, 雲端運算的未來無可限量 與雲的標準化和通用語言的發展一致, 雲端運算也沒有統一的評測手段 目前流行的衡量雲端運算平臺整體性能的工具有 TeraSort 針對按需提供運算機體的雲端計算, 最近有一款 Cloudstone 的評測工具 Cloudstone 工具包包含了一個開源 Web 2.0 應用, 一套負載生成部件, 一系列性能監控部件, 還有可以對給定的雲進行每人每月花費的量化計算法 如果是雲端存儲的評測, 可以考慮 MalStone (code.google.com/p/malgen/) MalStone 基於 log file 的例子的 MapReduce 計算如同我前面所述 它包括程式碼生成合成事件和建議 MapReduce 計算 總結一下雲端運算可以發現, 計算的單位已由單台電腦 集群伺服器擴至資 料中心 雲端運算不僅僅是計算規模的擴大, 同時它帶來了軟體 系統和程式設 計模式上的改變, 大大降低了計算資源的複雜程度和使用成本 最為重要的一點,
它開創了基於使用者使用的靈活收費模式, 使用者僅需為他所使用的電腦體或存 儲空間付費 因此我們說, 雲端運算是一次真正意義上的革命