Swift 不是文件系統或者實時的數據存儲系統,而是對象存儲,用于長期存儲永久類型的靜態數據。這些數據可以檢索、調整和必要時進行更新。Swift最適合虛擬機鏡像、圖片、郵件和存檔備份這類數據的存儲。
Swift沒有采用RAID,也沒有中心單元和主控點,而是通過在軟件層面采用一致性HASH和數據冗余性,犧牲一定程度的數據一致性達到高可用性和可收縮性。支持多用戶模式、容器、和對象存儲。最佳應用場景為非結構化數據存儲問題。所謂的非結構化數據是相對于結構化數據而言的,節后數據即行數據,存儲在數據庫中,可以用二維表結構來邏輯實現的數據,而非結構化數據不方便用數據庫二維邏輯表來表現,包括所有格式的辦公文檔、文本、圖片、標準通用標記語言下的子集XML、HTML、各類報表、圖像和音頻/視頻。
swift的主要技術特點:
1、極高的數據持久性
2、完全的對稱系統架構:對稱意味著Swift中的各節點可以完全對等,能極大的降低成本
3、無限的可擴展性:一方面是數據可以無限的擴,另一方面Swift的性能可以線性提升(暫時沒有體會到,可以再后續的閱讀了解中體會,主要看它的架構設計)
4、無單點故障:Swift的元數據存儲時完全均勻隨機分布的,并且與對象文件存儲一樣,元數據也會存儲多份。
swift與HDFS的技術差異
1、在Swift中,元數據呈分布式,跨集群復制,而在HDFS中,采用中央系統(Namenode)來維護元數據,這對于HDFS來說,無疑使單點故障點,因而擴展到規模非常大的環境很困難
2、Swift設計時考慮到多租戶架構,而HDFS沒有考慮這個概念(下午學習什么是多租戶架構)
3、在Swift中,文件可以寫入多次,在并發場景下,以最近一次的的操作為標準。而在HDFS中,文件寫入一次,而且每次只能有一個文件寫入
4、Swift能夠可靠地存儲數量非常多的大小不一的文件,而HDFS用于存儲數量中等的大文件,來支持數據處理。
注:存儲系統元數據的缺點:元數據是指記錄數據邏輯與物理位置的映像關系。對于元數據的管理一般分為兩種,一種是使用集中式元數據服務來維護元數據,如HDFS,這種維護方式會導致單點故障和性能瓶頸,另外一種是使用分布式元數據服務來維護元數據,如OpenStack的Swift,這種維護方式存在性能負載和元數據同步一致性問題,如Swift就是通過系統一定程度的數據一致性來達到高可用性和可伸縮性的。
Swift的原理:
1、一致性Hash
一致性Hash算法提出了在動態變化的Cache環境中,判定hash算法好的標準:
1、平衡性:平衡性是指哈希的結果能夠盡可能的分布到所有的緩沖中去,這樣可以使得所有緩沖空間能夠都得到利用。為了更好的滿足平衡性,引入了虛擬節點概念,虛擬節點是實際節點在hash空間的復制品,一個實際節點對應若干個虛擬節點,這個對應的個數也稱為復制個數,虛擬節點在hash空間以hash值排列。
2、單調性:單調性是指如果已經有些內容通過Hash分派到相應的緩沖中,又有新的緩沖加入到系統中,哈希的結果應能夠保證原有已分配的內容可以被映射到原有或者新的緩沖中區,而不會被映射到舊的或者其他緩沖區。
3、分散性:在分布式環境中,客戶端可能看不到所有的緩沖,而只能看到其中一部分。當終端希望通過哈希過程將內容映射到緩沖上時,由于不同的客戶端所看到的緩沖范圍可能不同,從而導致得到的Hash結果不一致,導致結果相同的內容被映射到不用的緩沖區中。這種情況應該被避免,因為這將會導致相同的內容將會被映射到不同緩沖區中,降低了系統的存儲效率。
4、負載:負載時對分散性要求的另一個維度。既然相同的內容可能被映射到不同的緩沖中去,那么對于同一個緩沖而言,就有可能被不同的用戶映射不同的內容。與分散性一樣,這種情況應該被避免。
swift使用一致性Hash的主要目的是在改變集群的節點數時,能盡可能少的減少key和node的映射關系,以滿足單調性。
由于在node較少的情況下,改變node會導致大量的數據遷移,因此使用虛擬節點。
Swift中存在兩種映射關系:對于一個文件,通過hash算法找到對應的虛擬節點,虛擬節點再通過映射關系找到對應的設備,這樣就文在在設備上的存儲。(關于虛擬節點和節點的個數設置后續再學習)
數據一致性模型
根據CAP理論,一致性、可用性、分區容忍性三個方面只能滿足兩方面,Swift放棄了一個一致性,而采用一致性模型,以達到高可用性和水平擴展能力。
為了控制一致性,Swift采用了NWR策略(Quorum協議),NWR是一種在分布式存儲系統中控制一致性級別的策略,其中N代表一份數據的Replica數,
W是更新一份數據對象確保成功更新成功的份數,R代表讀取一個數據需要讀取的Replicad的份數。公式W+R>N保證某個數據不被兩個不同的事物同時讀和寫,公式W>N/2,保證兩個事物不能并發寫同一份數據。在分布式系統中,通常把備份數目設置為3份,如果是1,則是非常危險的,一旦這個Replica失敗了,則數據就損壞了,如果N為二,那么只要一個存儲節點發生錯誤,就會有單點存在。如果副本數設置過高高,則系統的維護成本就會變高。
補充:對于NWR,強一致性:R+W>N,以保證對副本的讀寫操作可以產生交集,從而保證可以讀到最新版本;如果W=N,R=1,則需要全部更新,適合大量讀少量寫操作的場景下的強一致性。如果R=N,W=1,則只更新一個副本,通過讀取全部分布來得到最新版本,適合少量讀大量寫的的強一致性。
環
環是Swift中的重要組件,用于記錄存儲對象和物理位置間的映射關系,在查詢Account、Container、Object信息時就需要查詢集群的Ring信息。
ring是為了將虛擬節點(partition)均衡的映射到一組物理存儲設備上,并提供一定的冗余度而設計的
Swift為賬戶、容器和對象分別定義了環,其查找過程是相同的。Ring中每個分區的在集群中都默認有3個副本,每個分區的位置都有ring來維護,并存儲在映射中。
Ring使用zone來保證數據的物理隔離,每個分區的副本數確保放在不同的zone中。
總的來說,Ring引入一致性Hash的原因是為了減少由于增加節點導致數據項移動的數量來提高單調性,引入partition的原因是為了減少由于節點數過少而導致移動過多的數據項,引入副本為了防止數據單點,提高冗余性,引入zone的原因是為了保證分區容忍性,引入權重是為了保證分區的分配的平衡性。
swift架構設計
Swift部署架構
主要組件:
1、Proxy Server
Proxy Server是提供swift api的服務器進程,swift通過Proxy Server 向外提供基于HTTP和RESET的服務接口,負責swift其余組件的相互通信。對于每個客戶端的請求,它將在環中查詢Account、Container或者Object的位置,并相應的轉發 請求。由于采用無狀態的REST請求協議,可以進行橫向擴展來均衡負載。在訪問swift之前,要先通過認證服務獲取訪問令牌,然后在發送的請求中加入頭部信息 X-Auth-Token。
2、Storage Server
Storage Server提供累了磁盤設備上的存儲服務。在Swift中有三類存儲服務器賬戶服務器(Account Server)、容器服務器(Container Server)、對象服務器(Object Server)。
2.1 Account Server
賬戶服務提供賬戶元數據和統計信息,并維護所含容器列表的服務,每個賬戶的信息被存儲在一個SQLite數據庫中
2.2? Container Server
容器服務器提供容器元數據和統計信息,并維護所包含對象列表的服務。容器并不知道對象存在位置,只知道容器里存的那些對象。這些對象信息以SQLLite數據庫文件的形式存儲,和對象一樣在集群上做類似的備份。
2.3 Object Server
對象服務器提供元數據和內容服務,用于存儲、檢索和刪除本地設備上的對象。在文件系統中,對象以二進制的文件的形式存儲,它的元數據存儲在文件系統的擴展屬性中,建議采用默認支持擴展屬性餓XFS文件系統。每個對象使用對象名稱的哈希值和操作的時間戳組成的路勁來存儲。最后一次的寫操作總可以成功,并確保最新一次的對象版本將會被處理。
3、Consistency Server
在磁盤上存儲數據并向外提供Rest-ful API 最主要的問題是故障處理。Swift的Consistency Server的目的是查找并解決由數據損壞和硬件故障引起的錯誤。主要由3個server組成,Auditor、Updater、和Replicator。Auditor運行在每個Swift服務器的后臺持續的掃描磁盤來檢測對象、容器和賬號的完整性,如果發現數據損壞,Auditor將會將該文件移動到隔離區域,然后由Replicator負責將一個完好的副本來替代該數據。在系統高負載或者發生故障的情況下,容器或賬號中的數據不會被立即更新。如果更新失敗,該次更新在本地文件系統中被加入隊列,然后Updater會繼續處理這些失敗了的更新操作。
3.1 審計服務(Auditor)
在本地服務器上反復的檢查對象、賬戶和容器的完整性,如果法相比特級的錯誤,文件將會被隔離,然后由Replicator負責用一個完好的拷貝來替代該數據,其他類型的錯誤會被記錄到日志中
3.2 復制服務(Replicator)
該服務一方面用于檢測本地分區副本和遠程副本是否一致,具體方式是用對比哈希文件盒高級文件水影來完成,當發現不一致時采用push的方式更新遠程副本:對于對象的復制,更新只是使用rsync同步文件到對等節點。賬號和容器的復制通過HTTP或Rsync來推送整個數據庫文件上丟失的記錄,另一方面用于確保被標記刪除的對象從文件系統中移除:當有一項被刪除,則一個墓碑文件被設置為該項的最新版本,復制器或檢測到該墓碑文件確保將他從整個系統中移除。
3.3? 更新服務(Updater)
當對象由于高負載或者系統故障等原因而無法立即更新時,任務將會被序列化到本地文件系統中進行排隊,以便回復后進行異步更新。
4、Cache Server
緩存的內容包括對象服務令牌,賬戶和容器的存在信息,但不會緩存對象本身的數據。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
