Idempotency là gì?
Idempotency (tính bất biến theo lặp) nghĩa là:
Thực hiện cùng một hành động nhiều lần → kết quả vẫn như thực hiện lần đầu (không side effect mới).
Trong distributed systems & event-driven architecture:
-
Network thất bại → sender retry
-
Broker có thể deliver message nhiều lần
-
Consumer cần xử lý mà không gây duplicate effects.
Tại sao Idempotency quan trọng?
Vì trong hệ thống phân tán:
-
Broker dùng chế độ at-least-once delivery → có thể deliver trùng lặp.
-
Network/lỗi service → client retry.
-
Thanh toán bị trừ hai lần
-
Email gửi nhiều lần
-
Inventory deduct double count
Idempotent Consumer là gì?
Idempotent Consumer = mô hình thiết kế xử lý message/event sao cho:
Dù message bị gửi lại nhiều lần, kết quả cuối cùng vẫn giống như chỉ xử lý một lần.
Essential khi:
-
Event-driven systems
-
Message broker (Kafka/RabbitMQ/SQS)
-
Asynchronous microservices
Phần tử để làm Idempotent Consumer
1) Unique Message Identification
-
Mỗi message/event phải có ID duy nhất → dùng để phát hiện trùng lặp.
2) State Tracking
3) Conditional Processing
4) Atomic Operations
-
Xử lý message & cập nhật trạng thái processed phải trong cùng một transaction
5) Business Logic Idempotency
Chiến lược triển khai Idempotency
Natural Idempotency
-
Một số thao tác inherently idempotent:
Status Field
-
Thêm field để track if action done:
Version Number
-
Dùng version để chỉ xử lý nếu version match
Idempotency Key
-
Client/producer cung cấp Idempotency Key (UUID)
-
Consumer dùng key để quyết định xử lý hay ignore
-
Common pattern cho API & asynchronous events