Phần 9: Transactional Outbox & Saga đảm bảo giao sự kiện

Khi một khách hàng bấm nút đặt hàng trên nền tảng Composable Commerce, có tới 7 sự kiện bắt buộc phải diễn ra theo chuỗi vắt ngang qua 4 service hoàn toàn độc lập: Tạo Đơn hàng (Order created) → Duyệt Thanh toán (Payment authorized) → Giữ chỗ Tồn kho (Stock reserved) → Kích hoạt Giao nhận (Fulfillment triggered) → Bắn Thông báo (Notification sent) → Cộng Điểm thưởng (Loyalty points awarded) → Tạo Mã vận đơn (Shipping label generated). Bất kỳ mắc xích nào trong số này cũng có thể đứt. Mạng có thể rớt. Database có thể sập. Một cái cổng thanh toán (payment gateway) của bên thứ ba có thể bị timeout. ...

3 tháng 6, 2026 · 18 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

Chương 4: Gỡ Rối Bài Toán Dual-Write Với Transactional Outbox Pattern

← Bài trước | Series hub | Tiếp theo → Chương 4: Xóa Sổ Cơn Ác Mộng Dual-Write Ngay khi ứng dụng Golang của bạn dịch chuyển từ Monolith (kiến trúc nguyên khối) sang mô hình Event-Driven Microservices, bạn sẽ lập tức nếm mùi một cơn ác mộng kiến trúc: Vấn Đề Dual-Write (Ghi song song). 1. Vấn Đề Dual-Write Là Gì? Answer-first: Dual-Write bộc phát lúc một ứng dụng thử cố gắng vừa lưu chép xuống Database vừa thả (publish) event tới Message Broker (Kafka) cùng một lúc. Do không có vỏ bọc của một transaction phân tán (distributed transaction), chỉ một lần vấp lỗi mạng cũng đủ sức khiến hai hệ thống trên rớt nhịp đồng bộ mãi mãi. ...

9 tháng 6, 2026 · 5 phút · Tuan Anh