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