Docs học tập
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?

On this page