CAP、BASE 理論真的很重要!|分佈式事務系列(一)
在微服務越來越流行的當下,我們應該如何保證不同服務器上數據的一致性?
本系列將先從 CAP 理論和 BASE 理論說起,之後從一致性強弱的角度梳理當前主流的強一致性方案、最終一致性方案和弱一致性方案,最後總結一下各個方案的特點和適用場景,一篇文章幫你掌握分佈式事務。
什麼是分佈式事務
分佈式事務是指在分佈式系統中,涉及多個事務操作的一組相關操作,但是這些操作必須以原子方式執行,即要麼全部成功,要麼全部失敗,從而確保數據的一致性。
傳統事務也就是單機事務,因爲只會同時操作一個數據庫資源,所以單節點可以利用數據庫自帶的事務操作來解決數據的一致性問題。而在分佈式系統中,不同的事務可能會涉及到多個節點或數據存儲位置,因此需要確保各個節點或數據存儲位置的數據在完成事務操作後能夠保持一致性。爲此,需要採用分佈式事務機制來保證數據的一致性。
分佈式事務問題產生的原因
在分佈式系統中,分佈式事務問題產生的主要原因包括:
-
網絡故障:分佈式系統中各個節點之間通過網絡進行通信,網絡故障可能會導致通信中斷或延遲,從而影響事務的執行。
-
節點故障:分佈式系統中的節點可能會因爲硬件故障或者軟件異常而發生故障,這可能會導致數據丟失或者無法進行事務提交。
-
事務併發執行:在分佈式系統中,多個事務可能會併發執行,這可能會導致數據訪問衝突或者死鎖等問題,從而影響事務的執行。
-
數據複製延遲:在分佈式系統中,爲了提高可用性和性能,數據通常會進行復制。但是,數據複製可能會存在延遲,導致不同節點上的數據版本不一致,從而影響事務的執行。
-
複雜性:分佈式系統由於涉及多個節點和多個數據存儲位置,因此其架構比較複雜,管理和調度難度較大,這也可能會導致分佈式事務問題的發生。
這些因素可能會導致分佈式事務問題的發生,因此需要採取相應的措施來保證分佈式系統的可靠性和穩定性,確保分佈式事務的正確執行。
CAP 理論
CAP 理論是分佈式系統設計中的一個非常重要的基礎理論,指的是在分佈式系統中,一致性(Consistency)、可用性(Availability)和分區容錯性(Partition Tolerance)這三個要素無法完全保證同時滿足,需要在這三個要素之間做出權衡,CAP 是這三個詞的縮寫。
-
一致性(Consistency):指的是在數據更新後,多個節點之間能夠保持數據的一致性,即在事務完成後,所有節點的數據狀態都必須一致。
-
可用性(Availability):指的是系統能夠及時響應並處理請求,即系統一直處於可用狀態,能夠對外提供服務。
-
分區容錯性(Partition Tolerance):指的是系統即使出現網絡分區故障,系統仍然能夠按照預期正常工作。
CAP 理論指出在分佈式系統中,分佈式系統必須容忍分區故障的發生。由於網絡等問題分區故障發生不可避免,所以必須做到,否則分佈式系統就沒有出現的必要。所以分區容錯性(P)是必需的。因此,在出現網絡分區的情況下,系統要麼保證一致性(C)和分區容錯性(P),但無法保證可用性;要麼保證可用性(A)和分區容錯性(P),但無法保證一致性(C)。
原因也很好推理:
-
CP:當出現網絡分區的情況下,如果系統要求保證一致性,那麼必須停止服務或者等待網絡分區恢復後再提供服務,這將導致系統的不可用。舉例:假設支付服務扣款成功,沒有通知到訂單服務,要求強一致性,那麼期間用戶查詢訂單服務將被阻塞無法查詢。
-
AP:當出現網絡分區的情況下,如果系統要求保證可用性,那麼可以繼續提供服務,但這可能會導致數據不一致。舉例:假設支付服務扣款成功,沒有通知到訂單服務,要求可用性,那麼期間用戶查詢訂單服務將顯示支付不成功。
所以 A 和 C 無法同時出現,通常只能選擇實現 CP 或者 AP。因此,在設計分佈式系統時,需要根據具體應用場景和需求,權衡 CAP 理論的三個要素,選擇最適合的方案來保證系統的正確性和性能。顯然,按照上述訂單和支付服務的案例,無論是 CP 還是 AP 在實際場景中都會帶來很差的用戶體驗,於是就產生了 BASE 理論。
BASE 理論
BASE 理論是一個關於分佈式系統中可用性和事務處理的理論,他是基於 CAP 理論的一個擴展。CAP 理論指出在一個分佈式系統中,無法同時滿足一致性、可用性和分區容忍性這三個特性。
但是當前的大環境下,服務的可用性與一致性都很重要,難以取捨。BASE 理論的提出就是爲了解決這個問題,將可用性和一致性達成一種平衡。
它由 eBay 架構師 Dan Pritchett 在 2008 年提出,用於解決大規模分佈式系統下的數據一致性問題
BASE 理論認爲,在分佈式系統中,數據的一致性不需要在任何時刻都得到保證,而是可以在一定時間範圍內保證最終達到一致性。需要注意的是,BASE 理論並不是一種完整的分佈式系統架構,而是一種指導性的理論,可以根據實際應用場景和需求來進行具體的實現和部署。
BASE 是下面三部分的英文縮寫簡稱:
-
BA:Basically Available ,基本可用性(對應可用性)
-
S:Soft State,軟狀態(對應一致性和可用性提供了妥協可能)
-
E:Eventually Consistency,最終一致性(對應一致性)
基本可用:在分佈式系統中,因爲各種原因(如網絡故障、節點宕機、資源限制等),不可能保證系統 100% 的可用性。因此在設計分佈式系統時,要追求基本可用性,即系統可以繼續提供核心功能的基本服務,允許系統出現部分功能和性能上的損失:比如增加響應時間,服務降級,通過容錯機制和負載均衡等方案解決等。
軟狀態:在分佈式系統中,節點之間的狀態是相互獨立的,因此節點的狀態也可能出現不一致的情況。但是 CAP 定理的一致性要求數據變化要立即反映到所有的節點副本上去,是一種強一致性。所以爲了解決這個問題,BASE 理論提出在分佈式系統中應該採用軟狀態,即允許節點之間的狀態出現短暫的不一致,不要求數據變化立即反映到所有的服務器節點上,這樣可以提高系統的可用性和性能。比如可以允許存在一箇中間狀態進行過渡,比如支付中狀態,又比如允許放大延時等。
最終一致性:上面 “軟狀態” 的介紹中提過強一致性會存在一些問題,所以在分佈式系統中它不要求系統數據始終保持一致的狀態,但是需要一定的時間和機制最終來達到的節點之間的狀態一致。比如數據同步、補償機制,重試機制等。最終一致性是一種弱一致性,相比於強一致性,它更加容易實現和維護,並且可以在保證系統可用性的同時提高系統的性能。
總之,BASE 理論是對 CAP 中一致性和可用性權衡的結果,基於 CAP 定理逐步演化而來,它是對 CAP 理論的一種補充,其來源於對大型互聯網分佈式實踐的總結。
爲了提高可用性,強調在分佈式系統中追求基本可用,在強一致性無法滿足時追求軟狀態和最終一致性,以提高系統的可用性、性能和擴展性。在實際應用中,需要根據具體的業務需求和場景選擇合適的數據庫和架構,以實現最優的系統設計。
解決方案
由於我們非常關注數據的一致性,所以總體來說按照一致性強弱的維度分類,解決分佈式事務問題可以有以下方案:
-
強一致性方案:2PC(兩階段提交)、3PC(三階段提交)、XA 協議
-
最終一致性方案:TCC、本地事務狀態表、本地消息表、可靠消息最終一致性、RocketMQ 事務消息方案、最大努力通知方案,SAGA
-
弱一致性方案:基於業務補償,定時任務對賬
-
分佈式事務框架:LCN、Seata
具體每種方案是什麼?優劣如何?後續文章會繼續講解,請繼續關注!
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/8L_pBgLKTyFPezqD6xiOsA