Đi đến nội dung chính
VI
Trang chủ / Bài viết / Điều phối giao dịch phân tán bằng Saga và quy trình bền vững
08 thg 7, 2026 · Z-SOFT Admin · 10 phút đọc

Điều phối giao dịch phân tán bằng Saga và quy trình bền vững

Điều phối thanh toán, tồn kho và giao hàng bằng quy trình lưu được trạng thái, có thử lại và xử lý bù trừ.

Xem tất cả bài viết

Ý chính: 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ữ trong bài: 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 thực tế

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ừ.

Khi thanh toán, tồn kho và giao hàng thuộc các dịch vụ khác nhau, không có một giao dịch cơ sở dữ liệu chung để quay lui tất cả. Mỗi bước có thể đã thành công dù phản hồi bị mất.

Saga cần lưu trạng thái bền vững, phân biệt thao tác có thể thử lại với thao tác cần bù trừ và cho phép con người can thiệp khi nghiệp vụ không thể tự quyết định.

Thiết kế và triển khai

  1. Mô hình hóa các trạng thái nghiệp vụ, thời hạn và kết quả kết thúc trước khi viết từng bước xử lý.
  2. Gán mã vận hành ổn định cho mỗi bước và cung cấp API tra cứu kết quả để thử lại an toàn.
  3. Xem bù trừ là một thao tác nghiệp vụ độc lập, có trạng thái lỗi và nhật ký kiểm toán riêng.

Mã minh họa: Quy trình đơn hàng có lưu trạng thái

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 chạy lại, mỗi bước tra cứu kết quả bằng mã vận hành. Giá trị không xác định như thời gian hiện tại phải được lưu vào lịch sử trước khi sử dụng.

Rủi ro cần tính trước

  • Thanh toán đã thành công nhưng phản hồi bị mất, khiến hệ thống không biết có nên thử lại.
  • Thao tác bù trừ thất bại và cần thử lại sau hoặc chuyển cho người có thẩm quyền quyết định.
  • Hai phiên quy trình cùng lúc thay đổi một đối tượng nghiệp vụ.

Nên theo dõi gì?

Tín hiệuĐiều tín hiệu cho biết
Thời gian quy trình nằm ở mỗi trạng tháiPhát hiện hành trình khách hàng bị kẹt hoặc quá thời hạn.
Số lần thử và độ trễ của từng bướcPhát hiện dịch vụ phụ thuộc thiếu ổn định hoặc việc thử lại đang khuếch đại tải.
Tỷ lệ bù trừ và xử lý thủ côngThể hiện chi phí của cả ngoại lệ kỹ thuật lẫn ngoại lệ nghiệp vụ.

Đưa vào production từng bước

Cho quy trình mới chạy ở chế độ quan sát trên một luồng hiện có, chưa tạo tác động bên ngoài. So sánh lịch sử xử lý, chuyển từng bước một và giữ báo cáo đối soát cho tới khi luồng mới vượt qua các bài kiểm thử dừng dịch vụ, gửi trùng và khởi động lại.

Điều cần nhớ

Saga tốt làm mọi trạng thái dở dang có thể quan sát và phục hồi; nó không giả vờ rằng hệ thống phân tán vẫn có tính nguyên tử.

HỢP TÁC CÙNG Z-SOFT

Mỗi quyết định công nghệ hôm nay đều ảnh hưởng đến nhiều năm sau.

Trao đổi với đội ngũ Z-SOFT để đánh giá hiện trạng, xác định mục tiêu và lựa chọn kiến trúc phù hợp với định hướng phát triển của doanh nghiệp.

Đặt lịch tư vấn