Bài viết mới nhất

Tổng 2272 bài
Lập trình 22/09/2026 7 phút

Replication và ISR trong Kafka: cách không mất dữ liệu khi broker chết, và vì sao single-node không demo nổi

Độ bền của Kafka đến từ replication — mỗi partition có nhiều bản sao trên nhiều broker, với ISR là tập bản sao đang theo kịp. Bài này đo thật trên lab single-node và dùng chính các giới hạn làm bằng chứng: RF=1 chỉ có một bản sao, thử RF=2 báo lỗi vì chỉ một broker, và một phát hiện trung thực về min.insync.replicas mà single-node không tái hiện nổi. Hiểu RF, ISR, min.insync.replicas và acks=all để cấu hình độ bền đúng trên cluster thật.

Lập trình 22/09/2026 7 phút

Serialization và tiến hoá schema trong Kafka: vì sao Avro nhỏ hơn JSON 2,4 lần và không làm vỡ consumer

Kafka chỉ chuyển byte — cách bạn mã hoá message quyết định băng thông, dung lượng và cả khả năng nâng cấp hệ thống. Bài này đo thật trong go-lab: cùng một bản ghi, JSON 88 byte, gob 115 byte, Avro chỉ 36 byte. Rồi chứng minh schema evolution bằng Avro resolution: thêm field có default đọc được dữ liệu cũ (channel lấy web), nhưng đổi kiểu double sang string bị từ chối ngay. Hiểu vì sao Schema Registry là bắt buộc khi nhiều team dùng chung topic.

Lập trình 22/09/2026 7 phút

Heap và bài toán top-k: vì sao lấy 10 phần tử lớn nhất lại nhanh hơn sắp xếp 247 lần

Cần 10 phần tử lớn nhất từ 8 triệu? Sắp xếp cả mảng rồi lấy 10 đầu là cách ai cũng nghĩ tới — và là cách sai. Bài này đo thật trong go-lab: min-heap size k lấy top-10 trong 4,3 ms, còn full sort mất hơn 1 giây — nhanh hơn 247 lần. Kèm cơ chế heap làm hàng đợi ưu tiên với Push/Pop O(log n), nền tảng của Dijkstra và lập lịch.

Lập trình 22/09/2026 6 phút

Outbox pattern: ghi database và gửi Kafka mà không bao giờ lệch nhau, và vì sao dual-write là cái bẫy

Ghi đơn hàng vào database rồi gửi sự kiện lên Kafka nghe đơn giản, nhưng đó là hai thao tác trên hai hệ thống không có transaction chung — crash ở giữa làm chúng lệch nhau. Bài này đo thật trong pg-lab: outbox pattern ghi cả thay đổi nghiệp vụ lẫn sự kiện trong MỘT transaction (rollback thì cả hai biến mất), rồi relay đẩy 3 dòng outbox thành đúng 3 message trong Kafka. Hiểu vì sao dual-write luôn có khe hở mất đồng bộ.

Lập trình 22/09/2026 6 phút

Tổng kết sê-ri Kafka: khi nào nên dùng, khi nào đừng, và checklist vận hành đúc kết từ 11 bài đo thật

Mười một bài, hàng chục phép đo thật trên lab — giờ gộp lại thành thứ dùng được. Bài tổng kết này so Kafka với RabbitMQ và hàng đợi trên database để biết khi nào Kafka là đúng công cụ (và khi nào nó chỉ thêm gánh nặng), một cây quyết định có nên dùng Kafka không, và một checklist vận hành production ánh xạ về từng bài: partition, replication, acks, offset, lag, retention, compaction, schema, outbox.

Lập trình 22/09/2026 6 phút

gRPC cho backend từ con số 0: gọi hàm từ xa như hàm nội bộ, và Protobuf nhỏ hơn JSON 2 lần

gRPC không phải REST nhanh hơn — nó là một mô hình khác: định nghĩa dịch vụ trong .proto, protoc sinh code type-safe cho cả server lẫn client, chạy trên HTTP/2 với payload nhị phân Protobuf. Bài mở màn sê-ri dựng server+client gRPC thật bằng Go trong Docker, gọi một unary RPC, và đo thật: cùng message Order, Protobuf 41 byte so với JSON 88 byte, 1000 call hết 42ms (~23.800 call/giây localhost).