分布式系統核心概念
1.?CAP理論
CAP理論指出,分布式系統最多同時滿足以下三項中的兩項:
- 一致性(CC):所有節點訪問同一份最新數據。
- 可用性(AA):每個請求都能在合理時間內獲得非錯誤響應。
- 分區容錯性(PP):系統在網絡分區(節點間通信中斷)時仍能運行。
取舍場景:
- 當網絡分區(PP)發生時,需在CC與AA間選擇:
- 選擇CC(如金融系統):拒絕寫入以保持一致性,犧牲可用性。
- 選擇AA(如社交平臺):返回舊數據,犧牲一致性。
2.?分布式事務
解決跨服務或跨數據庫操作的數據一致性問題。
(1)2PC(兩階段提交)
- 流程:
- 準備階段:協調者詢問所有參與者“能否提交”。
- 提交階段:若所有參與者同意,協調者通知提交;否則回滾。
- 問題:協調者單點故障可能導致參與者長期阻塞。
(2)TCC(Try-Confirm-Cancel)
- 三階段:
- Try:預留資源(如凍結庫存)。
- Confirm:提交(如扣減庫存)。
- Cancel:回滾(如解凍庫存)。
- 缺點:需業務代碼實現補償邏輯,侵入性強。
(3)Seata的AT模式
- 原理:
- 自動生成反向SQL:記錄數據快照(UNDO_LOG),用于回滾。
- 全局鎖:防止其他事務修改同一數據。
- 優點:業務侵入性低,無需手動編寫補償邏輯。
3.?分布式鎖
確保分布式環境下資源的互斥訪問。
(1)基于Redis的實現
- 核心命令:
SETNX
(或SET key value NX EX
)設置鎖,Lua腳本保證原子性解鎖。 - 示例:
-- 加鎖(設置過期時間)
SET lock_key unique_value NX EX 30
-- 解鎖(Lua腳本驗證值后刪除)
if redis.call("get", KEYS[1]) == ARGV[1] thenreturn redis.call("del", KEYS[1])
elsereturn 0
end
- 問題:鎖過期時間需合理,避免業務未完成鎖已釋放。
(2)基于ZooKeeper的實現
- 臨時順序節點:
- 客戶端創建臨時順序節點(如
/lock/node_00000001
)。 - 監聽前一個節點,若前序節點釋放,則獲取鎖。
- 客戶端創建臨時順序節點(如
- Watcher機制:節點刪除時觸發通知,避免輪詢。
- 優點:鎖自動釋放(會話斷開時節點刪除),無死鎖風險。
對比與總結
技術 | 優點 | 缺點 |
---|---|---|
2PC | 強一致性 | 協調者單點問題,性能低 |
TCC | 靈活性高 | 需業務侵入,實現復雜 |
Seata AT | 自動化補償,低侵入 | 依賴全局鎖,并發性能受限 |
Redis鎖 | 高性能,易擴展 | 鎖超時時間難設定 |
ZooKeeper鎖 | 高可靠性,無死鎖 | 性能低于Redis,依賴ZK集群 |