Retry hoạt động như thế nào?
API thanh toán trả lỗi 503 Service Unavailable. Nếu pipeline dừng ngay, report bị thiếu. Nếu gọi lại liên tục, nó có thể làm dịch vụ đang yếu càng quá tải.
Retry (thử lại) là chạy lại một thao tác sau khi nó thất bại vì một vấn đề có khả năng tạm thời.
Lỗi nào nên thử lại?
| Lỗi | Retry? | Lý do |
|---|---|---|
| Timeout mạng | Có, với giới hạn | Kết nối có thể phục hồi |
| HTTP 429 | Có, theo Retry-After |
Dịch vụ yêu cầu giảm tốc |
| HTTP 503 | Có | Dịch vụ tạm thời chưa sẵn sàng |
| Sai password | Không | Chờ không sửa được cấu hình |
| SQL sai cú pháp | Không | Code phải được sửa |
| Schema thiếu field bắt buộc | Thường không | Cần điều tra contract |
Chờ lâu dần giữa các lần
Lần 1 thất bại → chờ 2 giây
Lần 2 thất bại → chờ 4 giây
Lần 3 thất bại → chờ 8 giây
Sau giới hạn → đánh dấu failedĐây là Exponential Backoff (thời gian chờ tăng dần). Thêm một khoảng ngẫu nhiên nhỏ giúp nhiều worker không gọi lại cùng lúc.
flowchart TD
A["Gọi API"] --> B{"Thành công?"}
B -->|Có| C["Ghi kết quả"]
B -->|Lỗi tạm thời| D["Chờ với backoff"]
D --> E{"Còn lượt?"}
E -->|Có| A
E -->|Không| F["Fail và alert"]
Một timeout không cho biết request trước đã được xử lý hay chưa. Retry thao tác tạo payment có thể thu tiền hai lần. Hệ thống cần idempotency key hoặc kiểm tra trạng thái trước khi thử lại.
Retry nên có giới hạn, ghi lại nguyên nhân và cuối cùng tạo alert có người chịu trách nhiệm. Nó giúp vượt qua lỗi tạm thời, không thay thế việc sửa lỗi lâu dài.