# 基礎理論 ## CAP理論 一致性(Consistency) :在分散式系統中所有的數據備份,在同一時刻都保持一致狀態,如無法保證狀態一致,直接返回錯誤; 可用性(Availability):在集群中一部分節點故障,也能保證客戶端訪問系統並得到正確響應,允許一定時間內數據狀態不一致; 分區容錯性 ...
基礎理論
CAP理論
一致性(Consistency) :在分散式系統中所有的數據備份,在同一時刻都保持一致狀態,如無法保證狀態一致,直接返回錯誤;
可用性(Availability):在集群中一部分節點故障,也能保證客戶端訪問系統並得到正確響應,允許一定時間內數據狀態不一致;
分區容錯性(Partition tolerance):分散式系統在遇到任何網路分區故障時,仍然能保證對外提供滿足一致性和可用性的服務,除非整個網路環境都發生故障;
本地事務四大特性(ACID)
事務應該是具備原子性、一致性、隔離性和持久性,簡稱 ACID。
原子性(Atomicity) ,可以理解為一個事務內的所有操作要麼都執行,要麼都不執行。
**一致性(Consistency) **,可以理解為數據是滿足完整性約束的,也就是不會存在中間狀態的數據,事務前後數據的完整性必須保持一致。。
隔離性(Isolation) ,指的是多個事務併發執行的時候不會互相干擾,即一個事務內部的數據對於其他事務來說是隔離的。
持久性(Durability) ,指的是一個事務完成了之後數據就被永遠保存下來,之後的其他操作或故障都不會對事務的結果產生影響。
BASE理論
基本可用(Basically Available):分散式系統在出現故障時,保證核心可用,允許損失部分可用性。(響應時間上的損失、功能上的損失)
軟狀態(Soft State):系統中的數據允許存在中間狀態,中間狀態不影響系統的整體可用性。(支付中、處理中等)
最終一致性(Eventually Consistent):系統中的數據不可一直處於軟狀態,必須在有時間期限,在期限過後應當保證數據的一致性。(支付中變為支付成功)
相比於本地事務的ADIC強一致性模型,BASE理論提出通過犧牲一定的強一致性來獲得可用性;
不同業務單元和業務組件對數據一致性的要求不一樣,因此分散式系統中BASE理論和ACID特性會結合使用。
冪等性設計
冪等(Idempotent)是一個數學與電腦學中的概念。f(n) = 1^n , 無論n等於多少,f(n)永遠值等於1;
在程式中,使用相同參數執行同一個方法,每一次執行結果都是相同的,即具有冪等性;
以訂單狀態處理為例的冪等性設計,不論執行多少次orderProcess()方法,都只會扣減一次庫存,並且返回true。
分散式事務分類
二段提交2PC(Two-Phase-Commit)|三段提交3PC (Three-Phase-Commit)
三階段提交引入兩個機制
1、 引入超時機制。同時在協調者和參與者中都引入超時機制。
2、在第一階段和第二階段中插入一個準備階段。保證了在最後提交階段之前各參與節點的狀態是一致的。
主要解決的問題:
避免了參與者在長時間無法與協調者節點通訊(協調者掛掉了)的情況下,無法釋放資源的問題,因為參與者自身擁有超時機制會在超時後,自動進行本地commit從而進行釋放資源。而這種機制也側面降低了整個事務的阻塞時間和範圍。
缺點:
性能較差,會存在長時間的鎖表。
補償事務-TCC(Try-Confirm-Cancel)|Saga
TCC 與Saga其實就是採用的補償機制,其核心思想是:針對每個操作,都要註冊一個與其對應的確認和補償(撤銷)操作。確認和補償都有採用冪等性設計。
缺點:代碼量大,可維護性差。
消息事務
消息一致性方案是通過消息中間件保證上、下游應用數據操作的一致性。基本思路是將本地操作和發送消息放在一個事務中,保證本地操作和消息發送要麼兩者都成功或者都失敗。下游應用向消息系統訂閱該消息,收到消息後執行相應操作。
消息方案從本質上講是將分散式事務轉換為兩個本地事務,然後依靠下游業務的重試機制達到最終一致性。
代表產品:RocketMQ