本文節選自《飛天開放平臺編程指南——阿里云計算的實踐(雙色)》
周憬宇,李武軍,過敏意編著
電子工業出版社出版
阿里云計算有限公司(簡稱“阿里云”)成立于2009年9月10日,致力于打造云計算的基礎服務平臺,注重為中小企業提供大規模、低成本、高可靠的云計算應用及服務。飛天開放平臺(簡稱“飛天平臺”或者“飛天”)是由阿里云自主研發完成的公共云計算平臺,該平臺所提供的服務于2011年7月28 日在www.aliyun.com正式上線,推出了第一個云服務——彈性計算服務。截至本書出版時,阿里云已經推出了包括彈性計算服務、開放存儲服務、關系型數據庫服務、開放結構化數據服務在內的一系列服務和產品。
飛天平臺內核包含的模塊可以分為以下幾部分。
分布式系統底層服務:提供分布式環境下所需要的協調服務、遠程過程調用、安全管理和資源管理的服務。這些底層服務為上層的分布式文件系統、任務調度等模塊提供支持。
分布式文件系統:提供一個海量的、可靠的、可擴展的數據存儲服務,將集群中各個節點的存儲能力聚集起來,并能夠自動屏蔽軟硬件故障,為用戶提供不間斷的數據訪問服務;支持增量擴容和數據的自動平衡,提供類似于POSIX的用戶空間文件訪問API,支持隨機讀寫和追加寫的操作。
任務調度:為集群系統中的任務提供調度服務,同時支持強調響應速度的在線服務 (Online Service)和強調處理數據吞吐量的離線任務(Batch Processing Job);自動檢測系統中故障和熱點,通過錯誤重試、針對長尾作業并發備份作業等方式,保證作業穩定可靠地完成。
集群監控和部署:對集群的狀態和上層應用服務的運行狀態和性能指標進行監控,對異常事件產生警報和記錄;為運維人員提供整個飛天平臺以及上層應用的部署和配置管理,支持在線集群擴容、縮容和應用服務的在線升級。
分布式系統底層服務
1. 協調服務(女媧)
女媧(Nuwa)系統為飛天提供高可用的協調服務(Coordination Service),是構建各類分布式應用的核心服務,它的作用是采用類似文件系統的樹形命名空間來讓分布式進程互相協同工作。例如,當集群變更導致特定的服務被迫改變物理運行位置時,如服務器或者網絡故障、配置調整或者擴容時,借助女媧系統可以使其他程序快速定位到該服務新的接入點,從而保證了整個平臺的高可靠性和高可用性。
女媧系統基于類Paxos協議,由多個女媧Server以類似文件系統的樹形結構存儲數據,提供高可用、高并發用戶請求的處理能力。
女媧系統的目錄表示一個包含文件的集合。與UNIX中的文件路徑一樣,女媧中路徑是以“/”分割的,根目錄(Root entry)的名字是“/”,所有目錄的名字都是以“/”結尾的。與UNIX文件路徑不同之處在于:女媧系統中所有文件或目錄都必須使用從根目錄開始的絕對路徑。由于女媧系統的設計目的是提供協調服務,而不是存儲大量數據,所以每個文件的內容(Value)的大小被限制在1MB以內。在女媧系統中,每個文件或目錄都保存有創建者的信息。一旦某個路徑被用戶創建,其他用戶就可以訪問和修改這個路徑的值(即文件內容或目錄包含的文件名)。
女媧系統支持Publish/Subscribe模式,其中一個發布者、多個訂閱者(One Publisher/Many Subscriber)的模式提供了基本的訂閱功能;另外,還可用通過多個發布者、多個訂閱者(Many Publisher/Many Subscriber)的方式提供分布式選舉(DistributedElection)和分布式鎖的功能。
再舉一個使用女媧系統來實現負載均衡的例子:提供某一服務的多個節點,在服務啟動的時候在女媧系統的同一目錄下創建文件,例如,server1 創建文件“nuwa://cluster/ myservice/server1”,server2在同一目錄下創建“nuwa://cluster/myservice/server2”。當客戶端使用遠程過程調用時,首先列舉女媧系統服務中“nuwa://cluster/myservice”目錄下的文件,這樣就可以獲得server1和 server2,客戶端隨后可以從中選擇一個節點發出自己的請求,從而實現負載均衡。
2. 遠程過程調用(夸父)
在分布式系統中,不同計算機之間只能通過消息交換的方式進行通信。顯式的消息通信必須通過Socket接口編程,而遠程過程調用(Remote Procedure Call,RPC)可以隱藏顯式的消息交換,使得程序員可以像調用本地函數一樣來調用遠程的服務。
夸父(Kuafu)是飛天平臺內核中負責網絡通信的模塊,它提供了一個RPC的接口,簡化編寫基于網絡的分布式應用??涓傅脑O計目標是提供高可用(7×24小時)、大吞吐量(Gigabyte)、高效率、易用(簡明API、多種協議和編程接口)的RPC服務。
RPC客戶端(RPC Client)通過URI指定請求需要發送的RPC服務端(RPC Server)的地址,目前夸父支持兩種協議形式。
TCP:例如,tcp://fooserver01:9000
Nuwa:例如,nuwa://nuwa01/FooServer
與用流(stream)傳輸的TCP通信相比,夸父通信是以消息(Message)為單位的,支持多種類型的消息對象,包括標準字符串std::string和基于std::map實現的若干string鍵值對。
夸父RPC同時支持異步(asynchronous)和同步(synchronous)的遠程過程調用形式。
異步調用:RPC函數調用時不等接收到結果就會立即返回;用戶必須通過顯式調用接收函數取得請求結果。
同步調用:RPC函數調用時會等待,直到接收到結果才返回。在實現中,同步調用是通過封裝異步調用來實現的。
在夸父的實現中,客戶端程序通過Unix Domain Socket與本機上的一個夸父代理(Kuafu Proxy)連接,不同計算機之間的夸父代理會建立一個TCP連接。這樣做的好處是可以更高效地使用網絡帶寬,系統可以支持上千臺計算機之間的互聯需求。此外,夸父利用女媧來實現負載均衡;對大塊數據的傳輸做了優化;與TCP類似,夸父代理之間還實現了發送端和接收端的流控(Flow Control)機制。
3. 安全管理(鐘馗)
鐘馗(Zhongkui)是飛天平臺內核中負責安全管理的模塊,它提供了以用戶為單位的身份認證和授權,以及對集群數據資源和服務進行的訪問控制。
原文轉自:http://kb.cnblogs.com/page/183553/