Khi một thao tác trải trên nhiều DB/service, không còn transaction ACID cục bộ đơn giản. Hai cách xử lý:
Two-phase commit (2PC) — giao dịch phân tán đồng bộ do một coordinator điều phối:
1. Prepare (vote): coordinator hỏi mọi participant "sẵn sàng commit chưa?"; mỗi bên khóa tài nguyên và trả lời yes/no.
2. Commit/Abort: nếu tất cả yes → coordinator ra lệnh commit; chỉ cần một no → tất cả abort.
- Cho nhất quán mạnh, nhưng chặn (blocking): participant giữ khóa chờ; nếu coordinator chết giữa chừng, các bên kẹt. Chậm và giảm khả dụng → ít hợp microservice quy mô lớn.
Saga — chuỗi các giao dịch cục bộ nối tiếp, mỗi bước commit ngay ở service của nó và phát sự kiện kích bước sau. Nếu một bước lỗi → chạy compensating transaction (bù trừ) để hoàn tác các bước trước theo chiều ngược (vd đã trừ tiền thì hoàn tiền).
- Hai kiểu điều phối: choreography (service phát/nghe sự kiện) và orchestration (một orchestrator điều khiển).
- Đổi lại: không có isolation như ACID → có thể thấy trạng thái trung gian; chỉ đạt eventual consistency; phải tự thiết kế bước bù trừ.
Thực tế microservice thường chọn Saga vì không khóa chéo service và chịu lỗi tốt hơn; 2PC dùng khi thật sự cần nhất quán mạnh và chấp nhận đánh đổi.