0

Bài 3 — Distributed Lock: Khi backend chạy nhiều instance

Khi hệ thống có nhiều instance:

  • Cron job (schedule job) có thể chạy trùng
  • Đơn hàng có thể bị xử lý hai lần
  • Race condition xuất hiện


→ Redis thường được dùng để giải quyết bằng distributed locking.


Dùng lệnh:

SET key value NX PX 30000

→ Ý nghĩa:

NX: chỉ set nếu chưa tồn tại
PX: tự động hết hạn sau 30 giây


Trong Java

Redisson:

  • RLock
  • tryLock() auto unlock với release time


Ví dụ thực tế:

  1. Lock xử lý đơn hàng →Tránh double charge khi 2 request cùng đến.
  2. Lock batch job/schedule job →Chỉ cho phép 1 instance chạy cron job.
  3. Idempotent API →Đảm bảo 1 transaction ID chỉ xử lý một lần.


* Lưu ý quan trọng

  • Luôn set expire time
  • Không giữ lock quá lâu
  • Redis lock không thay thế DB transaction
  • Vẫn cần unique constraint ở database


==> Chú ý: Redis lock là lớp bảo vệ ở application level, không phải ACID transaction.

Tham khảo:
1. Distributed Locks with Redis - Redis IO
2. Distributed Locking Mechanism using Redis - Medium
3. Top 10 Redis Use Cases - Algomaster Newsletter


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí