Kiến Trúc Hướng Sự Kiện (Event-Driven Architecture) & Kafka — Worker Pool, Backpressure & Exactly-Once

Kiến Trúc Hướng Sự Kiện (Event-Driven Architecture) & Kafka — Worker Pool, Backpressure & Exactly-Once

← Chương trước: Mở Rộng Cơ Sở Dữ Liệu & Tối Ưu Bể Kết Nối — Sharding, TiDB & PostgreSQL | Mục lục Series | Chương tiếp theo: Khóa Phân Tán (Distributed Locks) — Toán Học Redlock, etcd Raft & Chống Chia Cắt Mạng → Answer-first: Kiến trúc Event-Driven với Apache Kafka tận dụng cơ chế zero-copy sendfile và sparse index để đạt throughput hàng triệu msg/s. Trong Go, mô hình Bounded Worker Pool tạo áp lực ngược (backpressure) tự nhiên và xử lý tuần tự theo partition, đảm bảo ngữ nghĩa exactly-once cho các luồng thanh toán. ...

18 tháng 6, 2026 · 12 phút · Lê Tuấn Anh
Các Mẫu Goroutine Pool Trong Go

Các Mẫu Goroutine Pool Trong Go

🇬🇧 Read the English version of this article on tanhdev.com Answer-first: Quản lý đồng thời an toàn trong Go đòi hỏi các mẫu Goroutine Pool có giới hạn (bounded concurrency): errgroup cho tác vụ theo lô, semaphore có đệm cho I/O pipelines, và channel-based worker pools cho xử lý hàng đợi kèm backpressure, circuit breaking và graceful shutdown. Mọi kỹ sư Go cuối cùng đều viết cùng một sai lầm: một vòng lặp khởi chạy các goroutine vô điều kiện (unconditionally). Trong một bản demo với 10 mục, điều này hoạt động rất đẹp. Nhưng trong môi trường production (thực tế) với 50.000 sự kiện webhook đầu vào, nó sẽ sản sinh ra 50.000 goroutine cùng một lúc, làm cạn kiệt bộ nhớ và kích hoạt sát thủ diệt bộ nhớ (OOM killer). Kubernetes sẽ khởi động lại (restart) cái pod đó. Và rồi kỹ sư trực on-call nhận tiếng bíp gọi dậy lúc 3 giờ sáng. ...

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