Backend nền tảng
E3 · Distributed Lock – Khóa phân tán
Khóa xuyên nhiều server: Redis, Redlock, Zookeeper.
E3 · Nâng cao
Một chiếc chìa khóa duy nhất treo ở chỗ chung (Redis): server nào cầm được chìa mới được làm việc.
Cốt lõi
- Khóa xuyên nhiều server: Redis, Redlock, Zookeeper.
- Redis: SET key value NX PX 5000 (chỉ đặt nếu chưa có + tự hết hạn); dùng Lua để release an toàn (chỉ xóa khóa của mình).
Đánh đổi
Ngăn race condition giữa các instance. Rủi ro: khóa hết hạn khi việc chưa xong → cần fencing token.
Trong thực tế
Chống double-spend khi thanh toán, cron leader election, giảm tồn kho.
Bug thường gặp
Job chạy lâu hơn TTL của khóa → khóa hết hạn, instance khác cũng chạy job, dữ liệu bị xử lý hai lần.
Tự hỏi lại
Vì sao phải có TTL? Vì sao không DEL khóa trực tiếp?