目錄
- 三、對象存儲服務Swift
- (一)Swift特性
- (二)應用場景
- (三)Swift主要組件
- (四)Swift基本原理
- (五)實例分析
- 四、鏡像服務Glance
- (一)Glance的作用
- (二)Glance的組成部分
三、對象存儲服務Swift
??比如復制和存檔數據,圖像或視頻服務,存儲次級靜態數據,開發數據存儲整合的新應用,存儲容量難以估計的數據,為Web應用創建基于云的彈性存儲。
(一)Swift特性
1. 高數據持久性
??數據的可靠性,是指數據存儲到系統中后,到某一天數據丟失的可能性。
2. 完全對稱的系統架構
??“對稱”意味著Swift中各節點可以完全對等,能極大地降低系統維護成本。
3. 無限的可擴展性
??一是數據存儲容量無限可擴展,二是Swift性能(如QPS、吞吐量等)可線性提升。
4. 無單點故障
??整個Swift集群中,也沒有一個角色是單點的,并且在架構和設計上保證無單點業務是有效的。
5. 簡單、可依賴
??簡單體現在實現易懂、架構優美、代碼整潔;可依賴是指Swift經測試、分析之后,可以放心大膽地將Swift用于最核心的存儲業務上。
(二)應用場景
??Swift主要有三個組成部分:Proxy Server、Storage Server和Consistency Server。其中Storage和Consistency服務均允許在Storage Node上。使用OpenStack的認證服務Keystone,目的在于實現統一OpenStack各個項目間的認證管理。
(三)Swift主要組件
??Swift主要組件如下。
??(1)代理服務(Proxy Server):對外提供對象服務API,會根據環的信息來查找服務地址并轉發用戶請求至相應的賬戶、容器或者對象服務;由于采用無狀態的REST請求協議,可以進行橫向擴展來均衡負載。
??(2)認證服務(Authentication Server):驗證訪問用戶的身份信息,并獲得一個對象訪問令牌(Token),在一定的時間內會一直有效:驗證訪問令牌的有效性并緩存下來直至過期時間。
??(3)緩存服務(Cache Server):緩存的內容包括對象服務令牌、賬戶和容器的存在信息,但不會緩存對象本身的數據;緩存服務可采用Memcached集群,Swift會使用一致性散列算法來分配緩存地址。
??(4)賬戶服務(Account Server):提供賬戶元數據和統計信息,并維護所含容器列表的服務,每個賬戶的信息被存儲在一個SQLite數據庫中。
??(5)容器服務(Container Server):提供容器元數據和統計信息,并維護所含對象列表的服務,每個容器的信息也存儲在一個SOLite數據庫中。
??(6)對象服務(Object Server):提供對象元數據和內容服務,每個對象的內容會以文件的形式存儲在文件系統中,元數據會作為文件屬性來存儲,建議采用支持擴展屬性的XFS文件系統。
??(7)復制服務(Replicator):會檢測本地分區副本和遠程副本是否一致,具體是通過對比散列文件和高級水印來完成,發現不一致時會采用推式(Push)更新遠程副本, 例如對象復制服務會使用遠程文件復制工具rsync來同步;另外一個任務是確保被標記刪除的對象從文件系統中移除。
??(8)更新服務(Updater):當對象由于高負載的原因而無法立即更新時,任務將會被序列化到在本地文件系統中進行排隊,以便服務恢復后進行異步更新;例如成功創建對象后容器服務器沒有及時更新對象列表,這個時候容器的更新操作就會進入排隊中, 更新服務會在系統恢復正常后掃描隊列并進行相應的更新處理。
??(9)審計服務(Auditor):檢查對象、容器和賬戶的完整性,如果發現比特級的錯誤,文件將被隔離,并復制其他的副本以覆蓋本地損壞的副本;其他類型的錯誤會被記錄到日志中。
??(10)賬戶清理服務(Account Reaper):移除被標記為刪除的賬戶,刪除其所包含的所有容器和對象。
1. Ring
??Ring是Swift最重要的組件,用于記錄存儲對象與物理位置間的映射關系。在涉及查詢Account(賬戶)、Container(容器)、Object(對象)信息時,就需要查詢集群的Ring信息。Ring使用Zone、Device、Partition和Replica來維護這些映射信息。Ring中每個Partition在集群中都(默認)有3個Replica。每個Partition的位置由Ring來維護,并存儲在映射中。每次增減存儲節點時,需要重新平衡一下Ring文件中的項目。
2. Proxy Server
??Proxy Server是提供Swift API的服務器進程,負責Swift其余組件間的相互通信。Proxy提供了Rest-full API,并且符合標準的HTTP協議規范,這使得開發者可以快捷構建定制的Client與Swift交互。
3. Storage Server
??Storage Server提供了磁盤設備上的存儲服務。Swift中有三類存儲服務器:Account、Container和Object。
4. Consistency Servers
??目的是查找并解決由數據損壞和硬件故障引起的錯誤。主要存在三個Server:Auditor、Updater和Replicator。
(四)Swift基本原理
??Swift 的算法和存儲理論并不復雜。主要有以下幾個概念。
1. 數據一致性模型(Consistency Model)
??為了實現這一目標,Swift采用Quorum仲裁協議:
??(1)定義N為數據的副本總數,W為寫操作被確認接受的副本數量,R為讀操作的副本數量。
??(2)強一致性:R+W >N,以保證對副本的讀寫操作會產生交集,從而保證可以讀取到最新版本。
??(3)弱一致性:R+W<=N,如果讀寫操作的副本集合不產生交集,就可能會讀到臟數據。
??Swift針對的是讀寫都比較頻繁的場景,所以采用了比較折中的策略,即寫操作需要滿足至少一半以上成功W>N2,再保證讀操作與寫操作的副本集合至少產生一個交集,即R+W>N。Swift默認配置是N=3,W=2>N/2,R=1或2,即每個對象會存在3個副本,這些副本會盡量被存儲在不同區域的節點上;W=2表示至少需要更新兩個副本才算寫成功;當R=1時意味著某一個讀操作成功便立刻返回,此種情況下可能會讀取到舊版本(弱一致性模型);當R=2時,需要通過在讀操作請求頭中增加x-newest=true參數來同時讀取兩個副本的元數據信息,然后比較時間戳來確定哪個是最新版本(強一致性模型);如果數據出現了不一致,后臺服務進程會在一定時間窗口內通過檢測和復制協議來完成數據同步,從而保證達到最終一致性,如下圖所示。
2. 一致性散列(Consistent Hashing)
??面對海量級別的對象,需要存放在成千上萬臺服務器和硬盤設備上,首先要解決尋址問題,即如何將對象分布到這些設備地址上。Swift基于一致性散列技術,通過計算可將對象均勻分布到虛擬空間的虛擬節點上,在增加或刪除節點時可大大減少需要移動的數據量;虛擬空間大小通常采用2的n次冪,便于進行高效的移位操作;然后通過獨特的數據結構Ring(環)再將虛擬節點映射到實際的物理存儲設備上,完成尋址過程之間的對象(它們本來映射到Node4上)。
??將散列結果右移m位,可產生 2 32 ? m 2^{32-m} 232?m 個虛擬節點,例如 m = 29 m=29 m=29 時可產生8個虛擬節點。
3. 數據模型
??共設有三層邏輯模型。Account(賬戶):租戶,用來做頂層的隔離機制;Container(容器):代表封裝一組對象,類似文件夾或目錄;Object(對象):由元數據和內容兩部分組成。
4. 環的數據結構
??環是為了將虛擬節點(分區)映射到一組物理存儲設備上,并提供一定的冗余度而設計的,其數據結構由以下信息組成。
??(1)存儲設備列表、設備信息,包括唯一標識號(id)、區域號(zone)、權重(weight)、IP地址(ip)、端口(port)、設備名稱(device)、元數據(metadata)。
??(2)分區到設備映射關系(replica2part2dev_id數組)。
??(3)計算分區號的位移(part_shift整數)。
5. Replica
??如果集群中的數據在本地節點上只有一份,一旦發生故障就可能會造成數據的永久性丟失。
??因此,需要有冗余的副本來保證數據安全。Swift中引入了Replica的概念,其默認值為3,理論依據主要來源于NWR策略(也叫Quorum協議)。
??NWR是一種在分布式存儲系統中用于控制一致性級別的策略。在Amazon的Dynamo云存儲系統中,使用了NWR來控制一致性。N代表同一份數據的Replica的份數,W更新一個數據對象時需要確保成功更新的份數,R代表讀取一個數據需要讀取的Replica的份數。
??公式W+R>N,保證某個數據不被兩個不同的事務同時讀和寫,公式W>N/2保證兩個事務不能并發寫某一個數據。
??Swift的N=3、W=2、R=2,完全符合NWR策略, Swift系統是可靠的,沒有單點故障。
6. Zone
??如果所有的節點都在一個機架或一個機房中,那么一旦發生斷電、網絡故障等事故,都將導致用戶無法訪問。需要一種機制對機器的物理位置進行隔離,以滿足分區容忍性。Ring中引入了Zone的概念,把集群的節點分配到每個Zone中,其中,同一個Partition的Replica不能同時放在同一個節點上或同一個Zone內。
7. Weight權重
??Ring引入權重的目的是解決未來添加存儲能力更大的節點時,分配到更多的Partition。例如,2TB容量的節點的Partition數為1TB的兩倍,那么就可以設置2TB的權重為200,而1TB的權重為100。
8. 系統架構
??Swift采用完全對稱、面向資源的分布式系統架構設計,組件可擴展,通信方式采用非阻塞式I/O模式,提高系統吞吐和響應能力。
(五)實例分析
??下圖是新浪SAE在測試環境中部署的Swif集群,集群中又分為4個Zone,每個Zone是一臺存儲服務器,每臺服務器上由12塊2TB 的SATA磁盤組成,只有操作系統安裝盤需要RAID,其他盤作為存儲節點,不需要RAID。
??前面提到過,Swift采用完全對稱的系統架構,在這個部署案例中得到了很好的體現。下圖中每個存儲服務器的角色是完全對等的,系統配置完全一樣,均安裝了所有Swift服務軟件包,如 Proxy Server、Container Server和Account Server等。上面的負載均衡(Load Balancer)并不屬于Swift 的軟件包,出于安全和性能的考慮,一般會在業務之前擋一層負載均衡設備。當然可以去掉這層代理,讓Proxy Server直接接收用戶的請求,但這可能不太適合在生產環境中使用。
??下圖中分別表示了上傳文件PUT和下載文件GET請求的數據流,兩個請求操作的是同一個對象。上傳文件時,PUT請求通過負載均衡隨機挑選一臺Proxy Server,將請求轉發到后者,后者通過查詢本地的Ring文件,選擇3個不同Zone中的后端來存儲這個文件,然后同時將該文件向這三個存儲節點發送文件。這個過程需要滿足NWR策略(QuorumProtocol),即3份存儲,寫成功的份數必須大于2/3,即必須保證至少兩份數據寫成功,再給用戶返回文件寫成功的消息。下載文件時,GET請求也通過負載均衡隨機挑選一臺Proxy Server,后者上的Ring文件能查詢到這個文件存儲在哪三個節點中,然后同時去向后端查詢,至少有兩個存儲節點“表示”可以提供該文件,然后Proxy Server中選擇一個節點下載文件。
四、鏡像服務Glance
??Glance提供了一個虛擬磁盤鏡像的目錄和存儲倉庫,并且可以提供對虛擬機鏡像的存儲和檢索。這些磁盤鏡像常常廣泛應用于OpenStack Compute組件之中。以三種形式加以配置:利用OpenStack對象存儲機制來存儲鏡像,利用Amazon的簡單存儲解決方案(簡稱S3)直接存儲信息,將S3存儲與對象存儲結合起來,作為S3訪問的連接器。
(一)Glance的作用
??Glance作為OpenStack的虛擬機的Image(鏡像)服務,提供了一系列的REST API,用來管理、查詢虛擬機的鏡像,它支持多種后端存儲介質。
??可以看出,通過Glance,Opentack的3個模塊被鏈接成了一個整體,Glance為Nova提供鏡像的查找操作,而Swift又為Glance提供實際的存儲服務,Swift可以看成Glacne存儲接口的一個具體實現。
(二)Glance的組成部分
??OpenStack Image Service支持的后端倉庫如下。
??(1)OpenStack Object Storage(Swift):它是OpenStack中高可用的對象存儲項目。
??(2)FileSystem:OpenStack Image Service存儲虛擬機鏡像的默認后端是后端文件系統。
??(3)S3:該后端允許OpenStack Image Service存儲虛擬機鏡像在Amazon S3服務中。
??(4)HTTP:OpenStack Image Service能通過HTTP在Internet上讀取可用的虛擬機鏡像。