文章目錄
- 開篇:分佈式系統關注的點
- 一、基本概念
- 二、性能分析:系統設計之初估算存儲系統的性能
- 三、數據分佈
- (1)基本概念
- (2)哈希分佈:只支持隨機讀取操作,不支持順序掃描
- (3)順序分佈:在分佈式表格中很常見
- (4)負載均衡
- 四、複製
- 1.複製的含義
- (1)基本概念
- (2)強同步協議:只要至少一個備副本返回成功(操作:備副本回放日誌)就可以回覆客戶端操作成功
- (3)異步複製:主副本返回成功,就可以回覆客戶端操作成功
- (4)強同步複製和異步複製都是基於主副本的複製協議,且都通過操作日誌來實現主副本之間的複製
- 2.一致性和可用性是矛盾的
- 五、容錯:是分佈式存儲系統設計的首要目標
- 六、可擴展性
- 七、分佈式協議
- 八、跨機房部署主要解決2個問題:數據同步和服務切換
開篇:分佈式系統關注的點
一、基本概念
1.異常
(1)節點和大規模分佈式存儲系統的核心問題
- 在分佈式存儲系統中,將一臺服務器或服務器上運行的一個進程稱之爲一個節點,節點和節點之間通過網絡互聯;
- 大規模分佈式存儲系統的一個核心問題是:自動容錯,因爲服務器節點是不可靠的,網絡也是不可靠的。
(2)異常類型
2.“超時”
(1)分佈式存儲的三態:成功、失敗、超時(未知狀態)
具體eg如下:
3.一致性
(1)副本是分佈式存儲系統容錯技術的唯一手段
(2)如何理解一致性?
兩個角度:
- 用戶角度:即客戶端,客戶端讀寫操作是否符合某種特性;
- 存儲系統:即存儲系統的多個副本之間是否一致,更新的順序是否相同;
(i)定義的場景如下:
(ii)從客戶端的角度來看,一致性包含的情況:
(iii)從存儲系統的角度看
(iiii)總結如下
4.衡量分佈式存儲系統的指標
(1)性能:系統的吞吐能力和系統的響應延遲
(2)可用性:系統異常時,可提供正常服務的能力
(3)一致性:越是強一致性的模型,用戶用起來越簡單
(4)可擴展性:
二、性能分析:系統設計之初估算存儲系統的性能
(1)性能分析的重要性
- 性能分析用來判斷涉及方案是否存在瓶頸點,權衡多種設計方案
- 也可作爲後續性能優化的依據
- 系統中的資源(CPU、內存、磁盤、網絡)是有限的,性能分析就是找出可能出現的資源瓶頸
(2)具體eg
三、數據分佈
(1)基本概念
- 數據分佈主要分爲兩種: 一種哈希分佈(eg:google的Dynamo系統),一種是順序分佈(即每張表格上的數據按照主鍵整體有序,eg:Google的Bigtable系統)
- 分佈式存儲系統需要能夠自動識別負載高的節點,當某臺機器的負載較高時,將他服務的部分數據遷移到其他機器,實現自動負載均衡
(2)哈希分佈:只支持隨機讀取操作,不支持順序掃描
(a)哈希取模與數據特徵
(b)如何通過哈希方式找到處理的數據屬於哪臺機器?
(c)哈希方式帶來多的困難以及處理大用戶問題的兩種方式
(d)如何解決服務器上線或者下線,數據重分佈帶來的大量數據遷移問題?
(i)思路1:將哈希值與服務器的對應關係作爲元數據,交給元數據服務器去管理
(ii)思路2:一致性哈希算法
(3)順序分佈:在分佈式表格中很常見
- 將大表順序劃分爲連續的範圍,每個範圍稱爲一個子表,總控服務器負責將這些子表按照一定的策略分配到存儲節點上,總控服務器負責將這些子表按照一定的策略分配到存儲節點上。
- 順序分佈類似於B+樹,解釋如下
- 順序分佈解釋如下
(4)負載均衡
(1)總控節點與心跳包Heartbeat
(2)分佈式存儲系統的主副本與備副本
(3)數據遷移的具體eg
四、複製
1.複製的含義
(1)基本概念
- 分佈式系統中數據保存在多個副本,其中一個副本是主副本,其他副本是備副本,通常做法是:數據寫入到主副本,由主副本確定操作的順序並複製到其他副本
- 分佈式存儲系統中,某個存儲節點出現故障時,分佈式存儲系統能自動地將服務切換到其他的副本,實現自動容錯
- 分佈式存儲系統通過複製協議將數據同步到多個存儲節點,並確保多個副本之間的數據一致性
- 複製協議主要分爲:強同步複製和異步複製,二者的區別在於:用戶的寫請求是否需要同步到備副本纔可以返回成功
(2)強同步協議:只要至少一個備副本返回成功(操作:備副本回放日誌)就可以回覆客戶端操作成功
(3)異步複製:主副本返回成功,就可以回覆客戶端操作成功
(4)強同步複製和異步複製都是基於主副本的複製協議,且都通過操作日誌來實現主副本之間的複製
2.一致性和可用性是矛盾的
(1)一致性、可用性,分區可容忍性
- 一致性consistency
- 可用性availability
- 分區可容忍性tolerance of network partition
- 在工程中,具體理解如下:
(2)一致性和可用性總是矛盾的
(3)Oracle數據庫的DataGuard複製組件包含三種模式:最大保護模式、最大性能模式、最大可用性模式
五、容錯:是分佈式存儲系統設計的首要目標
1.基本概念
- 首先,分佈式存儲系統需要能檢測到機器故障,故障檢測往往通過租約Lease協議實現
- 其次,能夠將服務複製或者遷移到集羣中的其他正常服務的存儲節點
2.常見故障
3.故障檢測
(1)心跳包
(2)租約Lease
4.故障恢復
(1)單層結構
(a)大部分系統爲單層結構,在系統中對每個數據分片維護多個副本
(b)
(2)雙層結構
(a)只有類Bigtable系統爲雙層結構,將存儲和服務分爲兩層, 存儲層對每個數據分片維護多個副本,服務層只有一個副本提供服務
(b)
(3)總控節點
(4)停服務時間由故障檢測時間和故障恢復時間構成
六、可擴展性
1.基礎知識
- 可擴展性的實現手段很多,如通過增加副本個數或者緩存提高讀寫能力,將數據分片使得每個分片可被分配到不同的工作節點以實現分佈式處理,把數據分配到各個數據中心等等
- 主流的分佈式存儲系統大多帶有總控節點,且支持成千上萬臺的集羣規模破
- 可擴展性不能簡單地通過系統是否爲P2P架構或者能夠將數據分佈到多個節點來衡量,而應該綜合考慮節點故障後的恢復時間,擴容的自動化程度,擴容的靈活性等等
2.總控節點
(1)分佈式文件系統與分佈式存儲系統的區別
(2)分佈式文件系統如何不讓總控節點稱爲瓶頸?
3.數據庫擴容
(1)數據庫可擴展的手段
- 通過主從複製提高系統的讀取能力
- 通過垂直拆分和水平拆分將數據分佈到多個存儲節點
- 當主節點出現故障時,可以將服務切換到從節點,當數據庫整體服務能力不足時,可以根據業務特點重新拆分數據進行擴容
(2)數據庫垂直和水平拆分的具體過程
4.異構系統
(1)同構系統
- 定義:統一組內的節點服務相同的數據,這樣的系統稱之爲同構系統。
- 存儲節點分爲若干組,每個組內的節點服務完全相同的數據,其中有一個節點爲主節點,其它節點爲備節點
- eg如下:
(2)異構系統的具體eg
- 異構系統將數據劃分爲很多大小接近的分片,每個分片的多個副本可以分佈到集羣中的任何一個存儲節點
七、分佈式協議
1.兩階段提交協議2PC:實現分佈式事務(大部分分佈式存儲系統不支持)
(1)兩階段提交協議用於保證跨多個節點操作的原子性,即:跨多個節點的操作要麼在所有節點上全部執行成功,要麼全部失敗。
(2)2PC的具體解釋如下
具體eg如下:
2PC協議可能面臨的故障如下
(3)總結
兩階段提交協議是阻塞協議,執行過程中需要鎖住其他更新,且不能容錯,大多數分佈式存儲系統都採用敬而遠之的做法,放棄對分佈式事務的支持。
2.Paxos協議:解決多個節點之間的一致性問題
(1)主要用於確保多個節點對某個投票(例如哪個節點爲主節點)達成一致。考慮到主節點可能出現故障,系統需要選舉出新的主節點。
(2)Paxos協議執行步驟如下:
- 如果主節點發生故障,備節點會提議自己成爲主節點,可能會出現多個備節點提議(Proposer)自己成爲主節點,Paxos協議保證,即使同時存在多個proposer,也能夠保證所有節點最終達成一致,即選舉出唯一的主節點。
- Paxos協議執行步驟如下:
(3)Paxos協議需要考慮兩個問題:正確性和可終止性 - 正確性:只有一個提議者會生效
- 可終止性:最後總會有一個提議者生效
- so,隨着協議不斷運行,它會往某個提議者被多數派接受並生效這一最終目標靠攏。
3.Paxos與2PC協議在分佈式系統中的異同點
八、跨機房部署主要解決2個問題:數據同步和服務切換
1.集羣整體切換
集羣整體切換的數據同步和服務切換的說明:
2.單個集羣跨機房
3.Paxos選主副本