Orchestrated Saga Pattern với Temporal: Thiết Kế Giao Dịch Phân Tán Bền Bỉ Trong Go

🇬🇧 Read the English version of this article on tanhdev.com Nỗi Đau của Giao Dịch Phân Tán trong Hệ Thống Core Banking Trong kiến trúc Monolith nguyên khối truyền thống, việc đảm bảo tính ACID (Atomicity, Consistency, Isolation, Durability) của một giao dịch tài chính cực kỳ đơn giản. Bạn chỉ cần mở một Database Transaction, thực thi hàng loạt câu lệnh SQL (trừ tiền tài khoản A, cộng tiền tài khoản B, ghi log kiểm toán), và cuối cùng gọi COMMIT. Nếu có bất kỳ lỗi gì xảy ra giữa chừng, bạn gọi ROLLBACK, và database engine sẽ tự động hoàn tác mọi thứ về trạng thái nguyên sơ ban đầu một cách hoàn hảo. ...

17 tháng 7, 2026 · 11 phút · Lê Tuấn Anh

Lưới Saga (Saga Pattern) Trong Go — Dàn Nhạc Temporal, Trò Hũ Trữ (Outbox) & Máng CDC Debezium

Điều kiện tiên quyết: Đây là Phần 8 của Khóa Học System Design. Lục lọi lại Phần 7: Chế Đồ API Cản Đúp trước đi — mớ đòn giao dịch chuộc lỗi (compensating transactions) trong lò Saga bắt buộc phải đính kèm bùa cản đúp (idempotent). Answer-first: Khung rập Saga Pattern cầm trịch giàn xếp mớ bòng bong giao dịch lộn xộn (distributed transactions) vắt ngang dọc bầy microservices bằng ngón đòn băm nát một cục giao dịch chà bá thành một lốc giao dịch lẻ tẻ (local transactions). Lỡ xui một nháy đứt gánh (fails), nguyên hệ thống tự động bóp cò nhả đạn giao dịch chuộc lỗi (compensating transactions) dội ngược theo chiều tua lùi (reverse order) đặng dọn sạch rác (undo) mấy khâu nãy giờ đã dọn mâm xong. Mỗi cục giao dịch cỏn con bắt buộc phải biết cản đúp (idempotent). ...

18 tháng 6, 2026 · 14 phút · Tanh

Hướng Dẫn Dapr Workflow Go: Orchestrated Saga Pattern

🇬🇧 Read the English version of this article on tanhdev.com Hầu hết các lập trình viên Go xây dựng microservices đều biết đến mẫu Choreography Saga: service A phát ra (emit) một sự kiện, service B phản ứng, service C phản ứng với B, và cứ tiếp tục như vậy. Nếu bước C thất bại, các services sẽ phát ra các sự kiện “bù trừ” (compensation) theo thứ tự ngược lại. Mẫu này hoạt động một cách mượt mà đối với các luồng đơn giản, nhưng lại phá vỡ tính hiệu quả khi số lượng bước tăng lên: việc debug một saga thất bại đòi hỏi phải lần theo dấu vết (tracing) các sự kiện qua năm topic của message broker, và việc triển khai logic bù trừ đòi hỏi mỗi service phải hiểu toàn bộ trạng thái của saga. ...

1 tháng 6, 2026 · 17 phút · Tuan Anh