iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0
Software Development

CRUD仔的一生(上集)系列 第 13

[ACID] 其實也不用ACID

  • 分享至 

  • xImage
  •  

前言

前面我們介紹了ACID事務處理模型,
意思是當我們在處理一個事務時,會符合ACID這四個特性來處理事務,
但事務處理模型其實不只ACID一種,部分資料的存取並不需要如此嚴格的ACID機制,
因此誕生了鼎鼎大名的BASE事務處理模型。
我們將會介紹BASE事務處理模型所關注的事情。

事務處理模型

事務處理模型,指的就是當我們TX開始到結束,處理資料時會符合哪些規則。
如果以簡單的區分,將會這樣區分

  • ACID 是一種強一致性的事務處理模型
  • BASE 是一種弱一致性的事務處理模型

BASE:

基本介紹BASE

  • B-asically A-vailable: 服務基本上保持可用。系統在出現部分故障或異常情況時,仍然能夠保持基本的可用性,並繼續提供服務。
    即使一部分節點失效或發生網絡分區,系統也應該繼續處理請求,儘管可能提供的是有限的功能。
  • S-oft State: 軟狀態。軟狀態這個詞我看了n次還是無法完全理解,直到看到Hard-State的意思,Hard-State同等於Strong Consistency,反之Soft-State就是非大家都統一。重點在於可以允許某些時間每個節點有些不一致。
  • E-ventual consistency: 最終一致性。雖然有了S-oft State,但不是永遠都不一致,最後還是要一致,有點Soft State的補充說明。

可以看到重點其實就是軟狀態(S-oft State),這裡就必須開始引入網路系統的概念(並非單指分散式系統)了,
資料的處理已經不是在同一個process上做處理,可能是同一台電腦(node),不同個process上,同時處理資料傳遞,
亦或是多台電腦(node),同時處理同一份資料的傳遞。
舉個例子:
讀寫分離是一種系統架構,一個master寫,多個slave讀,中間使用wal log來做資料同步,
關鍵就是在同步這件事情有時間差。所以master與slave之間一定會發生軟狀態,雖然會發生軟狀態,
但最後還是有最終一致性(E-ventual consistency)。

至於為什麼ACID不會是BASE事務處理模型的資料庫需要考量的問題呢?
我們可以一條一條來檢視
原子性(Atomicity): tx到rollback可以順利回到原始狀態。而在BASE模型中,強調可用性和性能,因此可能允許事務的一部分操作成功,而另一部分失敗,而不會要求回滾整個事務。
一致性(Consistency): BASE模型下的一致性要求比較寬鬆,所以並不太在意table定義的約束。
隔離性(Isolation): BASE 模型通常更強調可用性和性能,並且可能允許一定程度的隔離欠佳。
持久性(Durability): BASE 模型部分允許一些操作的結果暫時不被持久化,以提高性能。這可能導致在某些情況下,資料的持久性不如ACID模型那麼強。雖然BASE 模型不使用WAL,但在實際應用中,可以實現某種形式的數據持久性保護機制,以確保資料不會輕易丟失。這可能包括定期的數據備份、複製資料到不同的節點以實現冗余,以及使用異步寫入等方式來提高資料的持久性。

再來看看這張圖

一開始可能會覺得怪怪的,後面覺得還不錯?這個感覺就了。
忠實呈現了軟狀態(S-oft State)與最終一致性(E-ventual consistency)。

分散式系統特性

請不要和事務處理模型搞混,上面講的是TX開始到結束,處理資料時會符合哪些規則。
而這裡講的是系統的特性,想表達的是只當你要設計一個分散式系統時,每個節點上的資料如何同步,強一致性與可用性等等該如何權衡。

CAP定理

這裡強調的是
"在分散式系統中,不可能同時滿足上面三個性質,最多只能同時滿足兩個。"

  • C-onsistency: (Strong Consistency): 強一致性(每次讀到都最新)。
  • A-vailability: 服務基本上保持可用。系統在出現部分故障或異常情況時,仍然能夠保持基本的可用性,並繼續提供服務。(不保證都最新 e.g. 斷路器模式(Circuit Breaker)
  • P-artition Tolerance: 分區容錯。就算腦裂(Split-brain)可正常運作(n/2+1認證)與可復原 e.g. 斷線, 掉隊的大兵回歸部隊......
remark: CAP的Consistency是指強一致性(多個節點間無不一致的時候),和ACID的Consistency一致性(每次新增的紀錄都符合table的約束)不同。

最多只能同時滿足兩個, C3取2=3 所以有三種選擇
C-onsistency A-vailability: 強一致性且不返回錯誤=>只有單機才可能不腦裂或斷線。
C-onsistency P-artition Tolerance: 強一致性且腦裂可正常運作=>為了保持強一致性,所以掉線就卡死或需要重來
A-vailability P-artition Tolerance: 服務基本上保持可用且腦裂可正常運作=>結果可能不是最新的(NoSQL強調的就是Availablity,也就是系統保證運作,但是可能返回的結果不是最新的)

結語

這裡介紹了另外一種思考思維,TX不一定要維持ACID,還有BASE可以考慮。
當要設計分散式系統資料如何同步時,CAP只有C3取2。
CAP只有C3取2,聽起來似乎簡單,
但通常非技術人員的spec都會是C3取3,
這時我們就必須想辦法盡量貼近需求,這就是CRUD仔的價值所在啦!


上一篇
[ACID] 就是要ACID
下一篇
[ACID] 二階段提交(2 Phase Commitment (2PC))
系列文
CRUD仔的一生(上集)32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言