分佈式互斥
對排他性的資源訪問方式,稱爲分佈式互斥。而這種被互斥訪問的排他性資源,就叫作臨界資源
- 如何訪問
- 霸道總載:集中式算法 優勢:直觀、簡單,信息交互量少、易於實現 問題:協調者會成爲系統性能瓶頸;單點故障 增長主備備分,應用比較普遍
- 民主協商:分佈式算法 先到先得、投票全票經過機制 適合節點數量少且變更不頻繁的系統,且因爲每一個程序均需通訊交互,適合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
爲了確保分佈式鎖的可用性,在設計時應考慮:
- 互斥性
- 具有鎖失效機制
- 可重入性
- 有高可用的獲取鎖和釋放鎖的功能
如何解決分佈式鎖的羊羣效應問題 ??