分散式事務的通用原則
- 2019 年 10 月 6 日
- 筆記

周末來篇短的。
當我們採用分散式來提高系統性能時,首先面對的問題是面對和處理分散式事務。
分散式系統處理數據:
- 數據分區:把數據塊放在不同的伺服器上,採用一致性hash;
- 數據鏡像:讓所有伺服器都有相同的數據,提供相同的服務;
第一種問題,單台機器出現問題,會存在數據丟失的問題。
數據服務的高可用只能通過第二種方式完成數據冗餘存儲。存儲節點越多,跨服務的事務數據一致性就越複雜。
數據不丟失,通過冗餘手段,數據的分區都需要數據冗餘處理。
這就是數據副本:出現某個節點的數據丟失時可以從副本讀到,數據副本是分散式系統解決數據丟失的唯一手段。
結論:
- 數據高可用,需要寫多份數據;
- 多份數據存在數據一致性問題;
- 數據一致性引發性能問題;
一致性模型:
- 弱一致性:寫入一個新值,讀操作在數據副本上可能讀出來,也可能讀不出來。
- 最終一致性:寫入新值,可能讀不出來,在某個時間窗口保證能讀出來。
- 強一致性:數據一旦寫入,任意副本都能讀到新值。
前兩種一般通過非同步方式,最後一種是同步方式。非同步代表更好的性能,帶來了複雜性。同步代表了簡單,但是要考慮性能。
方式:
- M/S方式,讀寫分離,主從;
- M/M方式,多個主節點,都做讀寫;
- 2PC/3PC,階段提交,每個節點都知道自己成功失敗,無法知道其他節點狀態,需要引入一個協調者統一掌控所有節點的操作結果,最終指示節點是否把操作結果進行真正的提交。
- Paxos演算法;