Tóm tắt: Khi một nghiệp vụ đi qua nhiều dịch vụ, độ tin cậy đến từ quy trình bền vững chứ không phải một khóa dùng chung.
Thuật ngữ chính: Saga: chuỗi bước nghiệp vụ có khả năng bù trừ; compensation: hành động xử lý hậu quả khi một bước trước đã thành công; durable workflow: quy trình lưu lại được trạng thái để tiếp tục sau sự cố.
Bài toán
Thanh toán, giữ hàng và giao hàng không thể cùng nằm trong một giao dịch cơ sở dữ liệu. Một bước có thể đã thành công dù phản hồi bị mất. Hệ thống phải biết tiếp tục, thử lại hoặc thực hiện hành động bù trừ.
Vì sao cách làm đơn giản chưa đủ
Two-phase commit hiếm khi khả dụng giữa các thành phần phụ thuộc SaaS và nếu có cũng ghép availability của chúng. Durable orchestrator xem hoàn thành một phần là trạng thái bình thường.
Compensation không phải lúc nào cũng đảo ngược. Refund sau khi payment đã chịu phí có thể tạo kết quả tài chính khác và cần chính sách rõ ràng.
Luồng xử lý
khởi tạo workflow→máy trạng thái
lưu từng transition→Activity
gọi dịch vụ idempotent→Compensation
phục hồi nghiệp vụ
Quyết định kiến trúc
Orchestrate luồng quan trọng
Workflow trung tâm làm rõ sequence, deadline và thao tác hỗ trợ. Choreography vẫn phù hợp cho phản ứng độc lập.
Lưu trạng thái trước khi hành động
Ghi transition dự định trước khi gọi activity để sau restart biết phần nào còn thiếu.
Định nghĩa semantic idempotency
Dùng định danh order hoặc operation, không dùng yêu cầu ID ngẫu nhiên của mỗi thử lại, để một hành động nghiệp vụ chỉ có một kết quả.
Phân tích chuyên sâu
máy trạng thái là mô hình sản phẩm
Pending, confirmed, cancelled và requires-rà soát phải có ý nghĩa chính xác với khách hàng. Support, finance và engineering cần dùng chung ngôn ngữ.
Công việc con người nằm trong thiết kế
Một số ngoại lệ không thể tự động an toàn. Manual task cần người phụ trách, deadline, evidence và resume action vẫn idempotent.
Các bước triển khai
- Mô hình hóa business trạng thái, deadline và terminal kết quả trước khi viết activity.
- Gán stable operation ID và cơ chế tra kết quả idempotent cho mỗi activity.
- Xem compensation là hành động nghiệp vụ có sự cố và audit trail riêng.
Ví dụ kỹ thuật: Workflow đơn hàng bền vững
workflow.save(state = 'RESERVING', version = 4)
reservation = inventory.reserve(orderId, operationId)
workflow.save(state = 'CHARGING', reservationId)
charge = payments.charge(orderId, operationId)
workflow.save(state = 'CONFIRMED', chargeId)Khi replay, kết quả activity được tra bằng operation ID. Workflow không được tính lại giá trị nondeterministic như thời gian hiện tại nếu chưa ghi nó vào history.
Các tình huống lỗi cần tính trước
- Thanh toán thành công nhưng phản hồi bị mất.
- Compensation lỗi và cần thử lại sau hoặc quyết định thủ công.
- Hai workflow instance tranh cùng một business aggregate.
Tín hiệu cần giám sát
| Tín hiệu | Ý nghĩa |
|---|---|
| Tuổi workflow theo trạng thái | Tìm hành trình khách hàng bị kẹt hoặc quá deadline. |
| Số lần và độ trễ của activity | Phát hiện thành phần phụ thuộc bất ổn cùng thử lại amplification. |
| Tỷ lệ compensation và kiểm tra thủ công | Thể hiện chi phí ngoại lệ kỹ thuật lẫn nghiệp vụ. |
Cách kiểm chứng thiết kế
- Làm mất phản hồi sau mỗi activity thành công và chứng minh workflow vẫn hội tụ.
- Restart orchestrator ở mọi trạng thái đã lưu.
- Buộc compensation thất bại và kiểm tra alert cùng xử lý thủ công.
Kế hoạch triển khai an toàn
Mirror một luồng hiện có vào workflow nhưng chưa điều khiển tác động phụ. So sánh history. Sau đó, chuyển từng activity. Giữ fallback hữu hạn và báo cáo đối soát tới khi đường mới vượt qua diễn tập thành phần phụ thuộc cùng restart.
Checklist trước khi đưa vào vận hành
- Workflow history bền vững và replay xác định.
- Timeout thể hiện business deadline, không phải giới hạn HTTP tùy ý.
- Operator có thể xem, thử lại, compensate hoặc escalate an toàn.
Kết luận
Saga thành công khi partial progress được nhìn thấy và phục hồi, không phải khi giả vờ hệ phân tán là atomic.
