Idempotency nghĩa là một operation tạo ra cùng kết quả dù được thực hiện một lần hay nhiều lần. Nó then chốt trong distributed system vì retry và message trùng lặp là không thể tránh khỏi — các operation idempotent làm cho những điều này an toàn.
Idempotency là gì
Một operation là IDEMPOTENT nếu làm nó NHIỀU lần có CÙNG hiệu ứng như làm nó MỘT lần:
→ "set balance to 100" → idempotent (cùng kết quả dù làm bao nhiêu lần)
→ "add 100 to balance" → KHÔNG idempotent (mỗi lần gọi đổi nó → sai nếu bị trùng lặp!)
→ trong HTTP: GET, PUT, DELETE là idempotent; POST thường KHÔNG
Tại sao nó quan trọng trong distributed system
Retry và trùng lặp là KHÔNG THỂ TRÁNH KHỎI trong distributed system:
→ một request timeout → client RETRY → nhưng cái gốc có thể đã thành công →
operation chạy HAI lần (vd một payment bị tính hai lần! một order bị đặt hai lần!)
→ message queue thường đảm bảo AT-LEAST-ONCE delivery → trùng lặp xảy ra
→ vấn đề network, lỗi → operation bị retry
→ nếu operation IDEMPOTENT, trùng lặp/retry là AN TOÀN (không hại gì khi lặp lại)
→ điều này thiết yếu cho tính đúng đắn và retry an toàn.
