Saga Pattern là gì?
Last updated: March 21, 2026 Xem trên toàn màn hình
- 14 Aug 2024
Eventual Consistency và Strong Consistency trong Cơ sở dữ liệu phân tán 27/218 - 20 Feb 2025
Zachman Framework là gì? 26/37 - 01 Apr 2025
CTO ra quyết định như thế nào? 20/75 - 01 Jun 2025
Thiết Kế Hướng Miền (Domain-Driven Design) hình thành như thế nào trong kiến trúc Lưới Dữ Liệu (Data Mesh)? 18/98 - 13 Sep 2024
Cấp quyền và Hủy quyền người dùng (User Provisioning & Deprovisioning) là gì? 16/121 - 15 May 2025
Hiệu quả năng lượng trong phần mềm (Energy Efficiency in Software) là gì? 14/103 - 09 Aug 2024
Latency (độ trễ) là gì? 14/191
Saga Pattern là gì?
Saga Pattern là một mẫu thiết kế phần mềm dùng để quản lý các giao dịch phân tán trong kiến trúc microservices. Nó chia một giao dịch dài, liên quan đến nhiều dịch vụ, thành chuỗi các giao dịch cục bộ nhỏ hơn, đảm bảo tính nhất quán mà không cần dựa vào cơ chế two-phase commit truyền thống.
- Lĩnh vực: Hệ thống phân tán / microservices
- Mục tiêu chính: Đảm bảo tính nhất quán dữ liệu giữa các dịch vụ
- Xuất hiện: Cuối thập niên 1980 (được phổ biến trở lại cùng microservices)
- Kiểu điều phối: Choreography và Orchestration
- Thay thế cho: Two-phase commit (2PC)
Bối cảnh
Trong hệ thống phân tán, việc đảm bảo tính nguyên tử (atomicity) giữa nhiều dịch vụ rất phức tạp vì mỗi service thường quản lý cơ sở dữ liệu riêng. Saga Pattern giải quyết vấn đề này bằng cách chia nhỏ một giao dịch toàn cục thành chuỗi các giao dịch cục bộ, mỗi giao dịch cập nhật dữ liệu của riêng service đó.
Nếu một bước thất bại, các giao dịch bù trừ (compensating transactions) sẽ được kích hoạt để hoàn tác các bước trước đó, đưa hệ thống trở lại trạng thái nhất quán.
Cơ chế hoạt động
Mỗi saga bao gồm một chuỗi các bước (giao dịch cục bộ), đi kèm với hành động bù trừ tương ứng.
Có hai cách điều phối chính:
- Choreography:
Mỗi service lắng nghe sự kiện và tự phản ứng độc lập, đồng thời phát sinh các sự kiện tiếp theo. - Orchestration:
Một bộ điều phối trung tâm kiểm soát toàn bộ saga, gọi các service tham gia và xử lý rollback khi cần.
Cách tiếp cận này đánh đổi tính nguyên tử chặt chẽ để lấy eventual consistency (tính nhất quán cuối cùng), từ đó tăng khả năng mở rộng và chịu lỗi.
Lợi ích và thách thức
Lợi ích:
- Tăng độ tin cậy và khả năng phản hồi của hệ thống phân tán
- Loại bỏ lock blocking như trong 2PC
- Cải thiện khả năng mở rộng (scalability)
Thách thức:
- Phức tạp trong thiết kế logic bù trừ
- Khó xử lý các lỗi một phần (partial failures)
- Cần đảm bảo tính idempotent (không gây tác dụng phụ khi thực thi lặp lại)
Ứng dụng thực tế
Saga được sử dụng rộng rãi trong các workflow nghiệp vụ dựa trên microservices, như:
- Xử lý đơn hàng
- Thanh toán
- Hệ thống đặt chỗ (booking)
Trong các trường hợp này, cần đảm bảo nhất quán dữ liệu phân tán nhưng không thể áp dụng transaction mạnh (strong consistency) một cách thực tế.
Các framework như Axon Framework, Temporal, và Camunda hỗ trợ triển khai Saga trong môi trường production.









Link copied!
Mới cập nhật