Senior #idempotency#saga#eventual-consistency#distributed-transaction
Idempotency key, eventual consistency và saga
⚡ Trả lời nhanh
Thao tác idempotent cho cùng kết quả dù gọi nhiều lần: client gửi Idempotency-Key, server lưu key và kết quả để trả lại khi retry. Với giao dịch xuyên nhiều service, saga chia thành chuỗi giao dịch cục bộ, mỗi bước có compensating action để hoàn tác, hệ thống nhất quán dần (eventual consistency).
POST /payments
Idempotency-Key: 7d1f-... # client sinh, giữ nguyên khi retry
-> lần 1: xử lý, lưu (key -> response)
-> lần 2 cùng key: trả lại response đã lưu, không trừ tiền lại
-- UNIQUE chặn xử lý trùng ở tầng DB
CREATE TABLE idempotency_keys (key TEXT PRIMARY KEY, response JSONB, created_at TIMESTAMPTZ);
Saga đặt hàng:
Tạo đơn -> Trừ kho -> Thanh toán
(thanh toán lỗi) -> Hoàn kho (compensate) -> Huỷ đơn
| Kiểu saga | Mô tả |
|---|---|
| Choreography | các service phát sự kiện, phản ứng với nhau |
| Orchestration | một orchestrator điều phối từng bước |