Trong hệ phân tán, retry là bắt buộc (timeout, mất mạng, at-least-once delivery) → cùng một thao tác có thể tới nhiều lần. Một thao tác idempotent cho cùng kết quả dù chạy 1 hay N lần → retry an toàn, không tạo trùng.
Ví dụ nguy hiểm nếu không idempotent: một lệnh "trừ tiền/tạo đơn" retry → trừ tiền hai lần.
Cách đảm bảo:
- Idempotency key: client gửi khóa duy nhất cho mỗi thao tác; server lưu kết quả theo khóa, lần retry cùng khóa → trả lại kết quả cũ, không thực thi lại.
- Thiết kế thao tác tự nhiên idempotent: dùng PUT (set giá trị) thay vì cộng dồn; INSERT ... ON CONFLICT; dedupe theo message id.
- Kết hợp cho consumer queue để xử lý message trùng.