分佈式的定義
- 分佈式系統是一個硬件或者軟件組件分佈在不同的網絡計算機上,彼此之間僅僅通過消息傳遞進行通信和協調的系統。
分佈式的特點
- 分佈性:空間上隨意分佈
- 對等性:分佈式系統中計算機沒有主/從之分,每個計算機節點都是對等的。
- 併發性:併發操作共享的資源
- 缺乏全局時鐘:執行事件難以確定先後順序。缺乏一個全局的時鐘序列。
- 故障總會發生:預設和未預設的故障問題都會發生
分佈式環境的問題
- 通信異常:網絡問題、硬件問題,內存訪問通常在納秒級別(大約10ns),網絡訪問延遲在毫秒級別,網絡延遲是內存訪問的上百倍。
- 網絡分區:網絡異常導致只有部分節點能正常通信,極端情況會出現局部集羣需要獨立完成所有任務,包括對數據的事務處理,這就對分佈式一致性產生了挑戰。
- 三態:成功、失敗、超時,超時通常是由請求未送達(如發送中丟失)、響應未送達
- 節點故障:組成分佈式系統環境的節點出現宕機。每個節點都可能故障。
ACID與CAP/BASE
ACID
- 事務是由一系列隊系統中數據進行訪問與更新的操作所組成的一個程序執行邏輯單元
事務爲數據庫操作保證數據一致性提供支持
- 事務的四個特點:原子性、一致性、隔離性、持久性
- 原子性(Atomicity):事務必須是一個原子操作,要麼不做,要麼全做。失敗就撤銷已做的
- 一致性(Consistency):事務的操作保證操作的數據從一個一致性狀態到另外一個一致性狀態。
- 隔離性(Isolation):是指在併發環境中的事務相互隔離,互相不干擾,一般通過悲觀或者樂觀鎖實現。
- 持久性(Durability):數據永久改變。
- 事務隔離級別(標準SQL規範)
- 讀未提交(Read Uncommitted):隔離級別最低;一個事務可以讀取到另一個事務還未提交的數據。會產生髒讀、不可重複讀、幻讀
- 讀已提交(Read Committed):只允許讀以提交的數據,防止髒讀,會產生不可重複讀、幻讀
- 可重複讀(Repeatable Read):事務不結束,別的事務不可以修改記錄,解決了髒讀、不可重複讀,會產生幻讀。
- 串行化(Serialiizable):事務串行執行,一個接一個處理,不能併發執行。
分佈式事務
- 一個分佈式事務可以看做多個分佈式的操作序列組成的。簡單案例來說就是兩個不同服務系統中一方減少一方要增加,發生故障只完成一方,就需要回滾。由於系統是分佈式的,所以在執行事務的時候就比較複雜。
CAP理論
- CAP是指:一致性、可用性、分區容錯性,這三個需求最多隻能同時滿足其中兩項。
- 一致性(Consistency): 保證多個節點系統中,某個節點更改數據過後,對任意節點獲取的數據是最新的。
- 可用性(Availability):處理數據請求能在有限的時間內返回結果。
- 分區容錯性(Partition tolerance):保證分佈式系統在遇到故障時,能對外提供滿足一致性和可用性的服務,除非整個網絡環境都發生了故障。
- 放棄其中的一個:
- 放棄P:如果想要避免分區容錯性,簡單的做法是將(事務相關的)數據放在某個節點上,放棄P意味着放棄系統的可拓展性。
- 放棄A:一旦系統遇到故障,那麼被影響的服務將變得不可用。
- 放棄C:放棄數據的強一致性,無法保證實時的一致,但是可以保證最終是一致的。
BASE理論
- BASE理論是指:基本可用、軟狀態、最終一致性;它是基於CAP理論演變而來的,其中的關鍵點就是最終一致性。
- 基本可用(Basically Available):允許損失部分可用性。可以在時間上或者功能上少部分損失。
- 軟狀態(Soft state):允許各個節點數據同步過程存在延遲。
- 最終一致性(Eventually consistent):所有數據副本經過更新後一段時間會變成一致的。