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

分佈式互斥

對排他性的資源訪問方式,稱爲分佈式互斥。而這種被互斥訪問的排他性資源,就叫作臨界資源
  • 如何訪問
    • 霸道總載:集中式算法 優勢:直觀、簡單,信息交互量少、易於實現 問題:協調者會成爲系統性能瓶頸;單點故障 增長主備備分,應用比較普遍
    • 民主協商:分佈式算法 先到先得、投票全票經過機制 適合節點數量少且變更不頻繁的系統,且因爲每一個程序均需通訊交互,適合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理論oop

分佈式鎖

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

  • 實現方式
    • 基於數據庫實現分佈式鎖 建立一張鎖表,爲申請者在鎖表裏創建一條記錄,記錄創建成功則得到鎖,消除記錄則釋放鎖
    • 基於緩存實現分佈式鎖 Redis 經過隊列來維持進程訪問共享資源的前後順序
      • 性能更好,數據存放於內存
      • 不少緩存可跨集羣部署
      • 不少緩存都提供能夠用來實現分佈鎖的方法
      • 能夠直接設置超時來控制鎖的釋放
    • 基於ZooKeeper 實現分佈式鎖 能夠完美解決設計分佈式鎖時遇到的各類問題。

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

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

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

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

相關文章
相關標籤/搜索