從Paxos到Zookeeper分散式一致性原理與實踐 讀書筆記之(一) 分散式架構
1.1 從集中式到分散式
1 集中式特點
結構簡單,無需考慮對多個節點的部署和節點之間的協作。
2 分散式特點
分不性:在時間可空間上隨意分佈,機器的分佈情況隨時變動
對等性:計算機之間沒有主從之分,所有計算機之間是對等的。副本是分散式系統對資料和服務提供的一種冗餘手段。
資料副本,是指在不同的節點上持久化同一份資料,只是解決分散式系統資料丟失的最有效手段。
服務副本,多個節點提供同樣的服務,每個節點有能力接受外部的請求並進行處理。
併發性
缺乏全域性時鐘:很難定義兩個事件的順序誰先誰後,原因是缺乏全域性時鐘序列控制。
故障總是會發生:組成分散式系統的所有計算機隨時可能發生各種形式的故障。
3 分散式環境各種問題
通訊異常
網路分割槽:當網路發生異常,系統中部分節點之間網路延時不斷增大,最終導致只有部分節點能夠通訊,另一些節點不能。這一現象叫網路分割槽,或者“腦裂”。
三態:失敗、成功與超時。
節點故障:組成分散式系統的節點宕機或者“殭屍”,每個節點都會發生,每天都在發生。
1.2從ACID到CAP/BASE
1 ACID
原子性
全部成功執行
全部不執行
一致性
隔離性
未授權讀取
授權讀取
可重複讀:事務處理過程中,多次讀取資料是一致的。
序列化:所有事務被序列執行,是最嚴重的事務隔離級別。
隔離級別 | 髒讀(Dirty Read) | 不可重複讀(NonRepeatable Read) | 幻讀(Phantom Read) |
---|---|---|---|
未授權讀取 (Read uncommitted) |
可能 | 可能 | 可能 |
授權讀取(Read committed) |
不可能 | 可能 | 可能 |
可重複讀(Repeatable read) |
不可能 | 不可能 | 可能 |
序列化(Serializable ) | 不可能 | 不可能 | 不可能 |
級別越高,資料越安全,但效能越低。(不可重複讀針對的是讀取過程中其他執行緒對資料 update或delete,幻讀針對insert進去符合條件的資料。)
永續性:指一個事務提交,它對資料的修改是永久性的。
2 分散式事務
3 CAP和BASE理論
CAP:一個分散式系統不可能同時滿足一致性、可用性、分割槽容錯性,這三基本要求最多隻能滿足其中的兩個。
一致性:在多個副本中的資料是否能保持一致。
可用性:指系統提供的服務是否一致可用,對使用者的請求是否能在有限的時間內返回結果。
分割槽容錯性:在遇到任何網路故障的時候,仍然滿足一致性和可用性的服務。
對一個分散式系統而言,分割槽容錯性是一個最基本的要求。
Base理論:面向的是大型高可用可擴充套件的分散式系統,和傳統事務的ACID不一樣,它完全不同於ACID的強一致性模型,而是提出通過犧牲強一致性來獲取資料在一段時間內是不一致的,但最終達到一致狀態。
基本可用:分散式系統出現不可預知故障時,允許損失部分可用性。
響應時間上的損失
功能上的損失
弱狀態:允許不同副本資料同步時候的傳輸延時。
最終一致性:指系統中所有的副本,在經過一段時間的同步之後,最終能夠達到一個一致的狀態。