掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流
作者:佚名 2018-09-29 14:22:07
存儲
存儲軟件
分布式 分布式文件系統(tǒng)也常作為分布式表格系統(tǒng)以及分布式數(shù)據(jù)庫的底層存儲,如谷歌的GFS可以作為分布式表格系統(tǒng)Google Bigtable 的底層存儲,Amazon的EBS(彈性存儲塊)系統(tǒng)可以作為分布式數(shù)據(jù)庫(Amazon RDS)的底層存儲。

成都創(chuàng)新互聯(lián)公司網(wǎng)站建設公司一直秉承“誠信做人,踏實做事”的原則,不欺瞞客戶,是我們最起碼的底線! 以服務為基礎,以質量求生存,以技術求發(fā)展,成交一個客戶多一個朋友!專注中小微企業(yè)官網(wǎng)定制,網(wǎng)站建設、網(wǎng)站設計,塑造企業(yè)網(wǎng)絡形象打造互聯(lián)網(wǎng)企業(yè)效應。
定義
分布式存儲系統(tǒng)是大量普通PC服務器通過Internet互聯(lián),對外作為一個整體提供存儲服務
分類
不同的分布式存儲系統(tǒng)適合處理不同類型的數(shù)據(jù):
分布式文件系統(tǒng)
分布式鍵值系統(tǒng)
分布式表格系統(tǒng)
分布式數(shù)據(jù)庫
問題域
分布式存儲解決的是單機存儲的性能, 單點故障問題, 容量一開始到還在其次, 但隨著應用規(guī)模的發(fā)展, 要解決容量也得必須分布式了.
鑒于解決容量問題的手段并沒有引入新問題, 因而如果要實現(xiàn)一種分布式存儲機制, 需解決或者需平衡的是性能(或者說可用性), 單點故障(或者說分區(qū)容忍性), 及一致性
基礎結構
分層,一般是兩到三層
實現(xiàn)關注點
數(shù)據(jù)分布策略
考慮因素包括讀寫場景, 即隨機還是順序, 包括如何保證負載均衡從而提高性能等
一致性策略
最終一致性變體
故障監(jiān)控策略
集群管理策略
分布式事務策略
數(shù)據(jù)模型
列族和文檔在某種程度上是存儲模型, 而不是對外的接口模型. 列式存儲更適合olap,列族則是對存取性能的優(yōu)化
查詢方式
領域語言
CAP理論
當分布式存儲網(wǎng)絡中有一臺機器與其它機器的連接斷開了, 但與客戶的連接還在, 即依然有讀寫請求進來, 那么:
一致性哈希
在傳統(tǒng)的哈希表中,添加或刪除一個節(jié)點幾乎需要對所有關鍵字進行重新映射(對N取模變成了對N-1或N+1取模, 影響大了)。而Hash算法的一個衡量指標是單調性( Monotonicity ),定義如下:
一致性哈希是一種特殊的哈希算法。在使用一致哈希算法后,哈希表節(jié)點數(shù)(大小)的改變平均只需要對K/n 個關鍵字重新映射,其中 K是關鍵字的數(shù)量,n是節(jié)點數(shù)量。
向量時鐘
當系統(tǒng)中存在同一份數(shù)據(jù)的多份副本時, 如何決定更新順序, 處理更新沖突成了一個問題, 因為不存在一個全局時鐘(存在的話, 我們就可以在每次更新時記錄全局時鐘值, 這樣的話就有明確的先后順序). 因此我們需要發(fā)明一種在分布式環(huán)境下有明確順序定義的機制. 傳統(tǒng)的順序定義通過版本來定義(時鐘只是版本的一種實現(xiàn)手段). 將版本的概念擴展到分布式環(huán)境下時, 我們便得到了向量時鐘: 對于同一份數(shù)據(jù)的N份副本, 都獨立維護自己的一個版本號, 這些版本號合在一起, 組成一個N個元素的vector, 作為該數(shù)據(jù)的版本. 每個節(jié)點都維護這樣一個vector, 初值可能都是0, 每次更新數(shù)據(jù)時, 一起更新vector中對應自己節(jié)點的那個版本號, 然后將vector和被更新的數(shù)據(jù)一起傳播給其它節(jié)點. 這樣每個節(jié)點都可以據(jù)此來發(fā)現(xiàn)更新沖突。
租約協(xié)議
租約主要用來解決心跳的誤會問題. 在通常的集群系統(tǒng)中,我們采用心跳來檢測節(jié)點狀態(tài)。但普通的心跳機制存在誤報警的可能. 普通心跳通常是在規(guī)定的時限內(nèi)定期向檢測節(jié)點發(fā)送存活性報告,若超出一段時間未能收到心跳報告,那么檢測節(jié)點則判斷節(jié)點可能失效,并采取一系列措施(報警、通知節(jié)點的使用者)。這種機制存在的問題是,檢測節(jié)點單方面判定節(jié)點失效,在某些業(yè)務集群系統(tǒng)中可能存在風險。節(jié)點自身并未認識自己已被認定失效,還在繼續(xù)提供正常的服務。若該節(jié)點在集群中承擔唯一 primary 節(jié)點的職責,而檢測節(jié)點的失效判定發(fā)起了重新選擇新的主節(jié)點,會引發(fā)“雙主”問題。
租約是一種雙方協(xié)議, 通常定義為:頒發(fā)者在一定期限內(nèi)給予持有者一定權利的協(xié)議. 它表達了頒發(fā)者在一定期限內(nèi)的承諾,只要未過期頒發(fā)者必須嚴格遵守 lease 約定的承諾。而 lease 的持有者可以在期限內(nèi)使用頒發(fā)者的承諾,但 lease 一旦過期必須放棄使用或者重新和頒發(fā)者續(xù)約。
租約過期前必須向頒發(fā)者續(xù)約才能繼續(xù)使用, 因此若因為各種原因續(xù)約未果, 則使用者必須放棄租約規(guī)定的權利, 而頒發(fā)者可以將該權利頒發(fā)給其它節(jié)點.
lease 作為一種協(xié)議承諾,其承諾的范圍十分寬泛:
Paxos協(xié)議
Paxos是一個分布式選舉算法, ***的用途就是保持多個節(jié)點數(shù)據(jù)的一致性. 基于消息傳遞通信模型的分布式系統(tǒng),不可避免的會發(fā)生以下錯誤:進程可能會慢、垮、重啟,消息可能會延遲、丟失、重復,在基礎 Paxos 場景中,先不考慮可能出現(xiàn)消息篡改的情況。Paxos 算法解決的問題是在一個可能發(fā)生上述異常的分布式系統(tǒng)中如何就某個值達成一致,保證不論發(fā)生以上任何異常,都不會破壞決議的一致性。
一個典型的場景是,在一個分布式數(shù)據(jù)庫系統(tǒng)中,如果各節(jié)點的初始狀態(tài)一致,每個節(jié)點都執(zhí)行相同的操作序列,那么他們***能得到一個一致的狀態(tài)。這里的問題在于: 為保證每個節(jié)點執(zhí)行相同的命令序列,需要在每一條指令上執(zhí)行一個“一致性算法”以保證每個節(jié)點看到的指令一致。Paxos就是這么一種”一致性算法”
為描述 Paxos 算法,其提出者Lamport 虛擬了一個叫做 Paxos 的希臘城邦,這個島按照議會民主制的政治模式制訂法律,但是沒有人愿意將自己的全部時間和精力放在這種事情上。所以無論是議員,議長或者傳遞紙條的服務員都不能承諾別人需要時一定會出現(xiàn),也無法承諾批準決議或者傳遞消息的時間。但是這里假設沒有拜占庭將軍問題(Byzantine failure,即雖然有可能一個消息被傳遞了兩次,但是絕對不會出現(xiàn)錯誤的消息);只要等待足夠的時間,消息就會被傳到。另外,Paxos 島上的議員是不會反對其他議員提出的決議的。
對應于分布式系統(tǒng),議員對應于各個節(jié)點,制定的法律對應于系統(tǒng)的狀態(tài)。各個節(jié)點需要進入一個一致的狀態(tài),例如在獨立Cache的對稱多處理器系統(tǒng)中,各個處理器讀內(nèi)存的某個字節(jié)時,必須讀到同樣的一個值,否則系統(tǒng)就違背了一致性的要求。一致性要求對應于法律條文只能有一個版本。議員和服務員的不確定性對應于節(jié)點和消息傳遞通道的不可靠性。
具體算法, 可參考網(wǎng)絡資料
NWR
NWR是一種在分布式存儲系統(tǒng)中用于控制一致性級別的策略。其中,N代表同一份數(shù)據(jù)的Replica的份數(shù),W是更新一個數(shù)據(jù)對象時需要確保成功更新的份數(shù);R代表讀取一個數(shù)據(jù)需要讀取的Replica的份數(shù)。
常用實現(xiàn)技巧

我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流