Khi một giao dịch trải qua nhiều microservice (mỗi service một DB riêng), không thể dùng một transaction ACID chung. Two-phase commit thì khóa lâu, kém sẵn sàng, ít dùng.
Saga chia giao dịch thành chuỗi local transaction ở từng service; sau mỗi bước thành công thì kích hoạt bước kế. Nếu một bước lỗi, saga chạy các compensating transaction để hoàn tác các bước đã thành công (ví dụ đã trừ kho → cộng lại kho).
Hai kiểu điều phối:
- Choreography: các service phản ứng với event của nhau, không có bộ điều phối trung tâm — đơn giản, nhưng luồng khó theo dõi khi nhiều bước.
- Orchestration: một orchestrator trung tâm ra lệnh từng bước và xử lý bù trừ — dễ quản lý/quan sát hơn, nhưng thêm một thành phần.
Đặc điểm: chỉ eventual consistency, không cô lập như ACID → cần thiết kế bước bù trừ và xử lý idempotency cẩn thận.