什麼是分佈式系統?
協調多個節點共同完成對外提供數據的存儲、計算等服務的系統
分佈式系統解決的問題
解決問題:可擴展性、容錯、高可用、災備
分佈式系統重要概念
複製,分區,事務,數據一致性
複製
1. 複製概念
在不同機器上保存數據的副本,目的可能有保持用戶與數據在地理位置靠近,部分節點故障系統可以繼續運行提高可用性,擴展可用處理請求的機器提高可擴展性
2. 複製算法分類
有主(單主、多主)、無主
有主:同步異步複製,同步容易造成系統不可用,異步複製容易造成主從不一致,處理節點宕機,從庫失效,追趕恢復,主庫失效,故障切換,主庫切換可能有數據不一致,腦裂的問題
3. 複製日誌
基於語句,基於行,WAL
4. 複製延遲
讀己之寫,單調讀,一致性前綴讀
5. 多主複製
- 多個數據中心(性能更好,容忍部分數據中心停機,容忍網絡問題)
- 處理寫衝突(同步異步檢測,避免衝突,收斂至一致的狀態,自定義衝突解決邏輯(寫時、讀時))
- 多主拓撲復制:環形、星型、all-to-all
6. 無主複製
- 故障恢復數據:讀修復(一定可以讀取最新值)、反熵過程(後臺運行數據檢查和複製進程,將節點缺少的數據從其它節點複製過來)。
- 檢測併發寫入衝突:最後寫入勝利(丟棄併發寫入)、合併同時寫入的值、版本向量