分佈式設計(二)協調與同步

分佈式互斥

對排他性的資源訪問方式,稱爲分佈式互斥。而這種被互斥訪問的排他性資源,就叫作臨界資源
  • 如何訪問
    • 霸道總載:集中式算法

      優勢:直觀、簡單,信息交互量少、易於實現
      問題:協調者會成爲系統性能瓶頸;單點故障
      增長主備備分,應用比較普遍
    • 民主協商:分佈式算法

      先到先得、投票全票經過機制
      適合節點數量少且變更不頻繁的系統,且因爲每一個程序均需通訊交互,適合P2P系統
      應用場景:Hadoop
    • 輪值CEO:令牌環算法

      更加公平的算法
      很是適合通訊模式爲令牌環方式的分佈式系統
      場景:移動自組織網絡,無人機通訊

分佈式選舉

集羣多節點組成,多個節點到底怎麼協同,怎麼管理。
主節點:在一個集羣中負責對其餘節點的協調和管理,能夠保證其餘節點有序運行,數據一致性。算法

  • 選舉算法
    • 長者爲大:Bully算法
    • 民主投票:Raft 算法
    • 優先級的民主投票:ZAB算法

      多數派選主算法一般採用奇數節點:ZooKeeper 、etcd、Kubernetes

分佈式共識

分佈式共享地就是在多個節點都可獨自操做或記錄的狀況下,使用得全部節點針對某個狀態達成一致的過程
分佈式共識的本質就是「存異求同」
從本質上看,分佈式選舉問題,其實就是傳統的分佈式共識方法,主要基於多數投票策略實現的。
分佈式在線記賬,是指在沒有集中的發行方,也就是沒有銀行參與的狀況下,如何保證交易的一致性。數據庫

  • PoW (Proof of Work) 工做量證實
  • PoS (Proof of Stake) 權益證實
  • DPos (Delegated Proof of Stake) 委託權益證實

一致性是指,分佈式系統中的多個節點之間,給定一系列的操做,在約定協議的保障下,對外界呈現的數據或狀態是一致的。
共識是指,分佈式系統中多個節點之間,彼此對某個狀態成達一致結果的過程緩存

分佈式事務

分佈式事務,就是在分佈式系統中運行的事務,由多個本地事務組合而成網絡

  • ACID
    • 原子性 (Atomicity)
      要麼成要麼敗
    • 一致性 (Consistency)
      事務操做前和操做後,數據完整性保持一致
    • 隔離性 (Isolation)
      多個事務不會相互干擾
    • 持久性 (Durability)
      永久保存
  • 如何實現分佈式事務
    • 二階段鎖
      同步阻塞問題
      單點故障問題
      數據不致問題
    • 三階段鎖
      鎖定資源,下降性能
    • 消息隊列
  • BASE 理論
    • 基本可用 Base Available
      分佈式系統出現故障時,容許損失一部分功能的可用性
    • 柔性狀態 Soft State
      容許系統存在中間狀態,但不會影響系統總體可用性。好比,數據庫讀寫分離,寫庫同步到讀庫會有一個延時,其實就是一種柔性狀態
    • 最終一致性 Eventual Consistency
      事務在操做過程當中可能會因爲同步延遲等問題致使不一致,但最終狀態下,數據都是一致的。

基於XA協議的2PC和3PC採用強一致性,基於消息的最終一致性方法,聽從BASE理論多線程

分佈式鎖

鎖是實現多線程同時訪問同一共享資源,保證同一時刻只有一個線程可訪問共享資源所作的一種標記框架

  • 實現方式
    • 基於數據庫實現分佈式鎖
      建立一張鎖表,爲申請者在鎖表裏創建一條記錄,記錄創建成功則得到鎖,消除記錄則釋放鎖
    • 基於緩存實現分佈式鎖

      Redis 經過隊列來維持進程訪問共享資源的前後順序
      • 性能更好,數據存放於內存
      • 不少緩存可跨集羣部署
      • 不少緩存都提供能夠用來實現分佈鎖的方法
      • 能夠直接設置超時來控制鎖的釋放
    • 基於ZooKeeper 實現分佈式鎖
      能夠完美解決設計分佈式鎖時遇到的各類問題。

ZooKeeper分佈式鎖的可靠性最高,有封裝好的框架,很容易實現分佈式鎖的功能,幾乎解決數據庫鎖和緩存鎖的不足,是首選方法。分佈式

爲了確保分佈式鎖的可用性,在設計時應考慮:oop

  • 互斥性
  • 具有鎖失效機制
  • 可重入性
  • 有高可用的獲取鎖和釋放鎖的功能

如何解決分佈式鎖的羊羣效應問題
??性能

相關文章
相關標籤/搜索