Bỏ qua đến nội dung
Quay lại

Hiểu Saga Pattern trong 5 phút

Đã đăng:  at  11:59 SA

Nếu bạn mới tìm hiểu microservices, chắc hẳn bạn đã nghe đến Saga Pattern – một design pattern quản lý distributed transaction trong microservices. Nó giúp các service phối hợp nhịp nhàng, giữ dữ liệu đồng bộ và duy trì tính nhất quán cuối cùng (eventual consistency) ngay cả khi một service gặp sự cố. Bài viết này sẽ giúp bạn hiểu Saga Pattern nhanh chóng, với ví dụ trực quan và các khái niệm kỹ thuật cơ bản.

1. Bối cảnh và vấn đề

Trong các hệ thống truyền thống (monolithic), bạn có thể dùng transaction để đảm bảo dữ liệu luôn nhất quán:

Nếu tất cả các bước thành công → commit Nếu có bước nào thất bại → rollback

Ví dụ đặt hàng trong hệ thống monolithic:

  1. Trừ tiền khách hàng
  2. Trừ tồn kho sản phẩm
  3. Gửi email xác nhận

Tất cả nằm trong một transaction, nên nếu bước nào lỗi → rollback toàn bộ, dữ liệu vẫn nhất quán.

Tuy nhiên, với microservices, mỗi bước thường do service riêng quản lý, với cơ sở dữ liệu riêng:

Nếu một bước thất bại, các bước trước có thể đã commit, dẫn đến dữ liệu không đồng bộ.

Ví dụ: khách hàng bị trừ tiền nhưng hàng không còn, hoặc email xác nhận chưa gửi.

Đây là vấn đề mà Saga Pattern giải quyết: giúp các service trong microservices phối hợp nhịp nhàng và duy trì dữ liệu đồng bộ ngay cả khi có lỗi xảy ra.

2. Saga Pattern là gì?

Saga Pattern là một design pattern quản lý distributed transaction trong microservices.

Thay vì dùng transaction truyền thống (rollback toàn bộ nếu một bước lỗi), mỗi service tự quản lý transaction riêng, và nếu bước sau thất bại, hệ thống sẽ thực hiện bù đắp (compensation) cho các bước trước.

Ví dụ đặt hàng online:

  1. Payment Service: trừ tiền → thành công
  2. Inventory Service: trừ tồn kho → lỗi (hết hàng)
  3. Notification Service: gửi email → chưa thực hiện

Ý tưởng cốt lõi: Mỗi bước tự chịu trách nhiệm và có cơ chế compensation, giúp các thao tác trong distributed transaction phối hợp mà không phá vỡ toàn bộ hệ thống.

3. Hai cách triển khai Saga Pattern

3.1 Event-Driven Saga (Dựa trên sự kiện)

Ví dụ:

Ưu điểm:

Nhược điểm:

3.2 Orchestration Saga (Điều phối tập trung)

Ví dụ:

Ưu điểm:

Nhược điểm:

4. Ví dụ minh họa: đặt hàng online

Giả sử quy trình đặt hàng gồm 3 bước:

  1. Payment Service: trừ tiền khách hàng → thành công
  2. Inventory Service: trừ tồn kho → lỗi (hết hàng)
  3. Notification Service: gửi email → chưa thực hiện

Không dùng Saga Pattern:

Dùng Saga Pattern (Event-Driven hoặc Orchestration):

Saga Pattern giúp từng thao tác trong distributed transaction độc lập nhưng vẫn phối hợp hiệu quả, đảm bảo dữ liệu đồng bộ và trải nghiệm người dùng tốt.

5. Các thuật ngữ kỹ thuật

6. Kết luận

Saga Pattern là một design pattern quản lý distributed transaction trong microservices, giúp:

Saga Pattern là design pattern quan trọng giúp hệ thống phức tạp hoạt động hiệu quả, đáng tin cậy và dễ quản lý hơn.


Chia sẻ bài viết này trên:

Bài trước
Hiểu Zero Trust trong 5 phút
Bài tiếp theo
Saga Pattern: Khi Lý Thuyết Va Chạm Thực Tế