Khóa Phân Tán (Distributed Locks) Trong Go — Toán Học Redlock, etcd & Chứng Phân Liệt Split-Brain

Điều kiện tiên quyết: Đây là Phần 6 của Khóa Học System Design. Bơi ngược lại Phần 5: Kafka & Bám Đuôi Sự Kiện để nhồi nhét mấy cái trò mồi rác sự kiện (event sourcing) trước khi xắn tay vào cùm gông khóa mõm. Answer-first: Đám khóa phân tán (Distributed locks) được đẻ ra để giàn xếp cái nợ đòi độc chiếm cắn xé nhau (mutual exclusion problem) chéo qua vắt lại giữa 1 nùi server độc lập — trói gô lại (ensuring) bắt buộc chỉ chừa đúng nháy 1 thằng server thò mõm vào cắn cấu một bãi rác dùng chung (shared resource) tại 1 thời điểm. Cái bùa Redlock của nhà Redis quăng ra cái ổ khóa chạy bạt mạng đua xe (high-performance) xài chiêu trò kéo bè kéo cánh số đông (majority quorum) rải rác đè đầu mớ node master; Thằng etcd lại vỗ ngực xưng tên ban phát bùa hộ mệnh sống chết chắc nịch (stronger guarantees) nhờ cái giao ước máu Raft (Raft consensus) đổi lại phải nôn tiền trả giá bằng độ lề mề lê lết (higher latency). ...

18 tháng 6, 2026 · 16 phút · Tanh

Chương 8: Distributed Locking Xử Lý Tranh Chấp Race Conditions: Redlock Đấu Với ZooKeeper

← Bài trước | Series hub | Tiếp theo → Chương 8: Đồng Bộ Hóa Clusters Bằng Distributed Locks Bên trong một ứng dụng Go chạy cô lập (standalone), để tránh chuyện hai Goroutines giành giật dẫm đạp lên nhau ghi đè chung một cục dữ liệu (Race Condition), người ta hay viện đến gã gác cửa sync.Mutex. Xui thay, lúc hệ thống của bạn phình to rải quân ra tận 10 servers nấp sau lưng một gã Load Balancer, cái sync.Mutex bỗng hóa thứ đồ bỏ vì nó chỉ khóa được mỗi cục RAM nội bộ của nhà nó. Bạn sẽ phải mưu cầu một thứ lớn lao hơn: Distributed Lock (Khóa phân tán). ...

9 tháng 6, 2026 · 6 phút · Tuan Anh