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

Plugin architecture trong Go: package plugin (.so) vs registry, và vì sao Go ít nạp động

Go có hai lối làm plugin: package plugin nạp .so lúc chạy, và registry pattern biên dịch tĩnh tự đăng ký qua init(). Đo thật trong Go 1.23: nạp .so thành công nhưng ràng buộc khắc nghiệt (chỉ Linux/macOS, cùng phiên bản), còn registry cho một binary tĩnh gọn và di động — lý do đa số Go chọn nó.

Kiến trúc hệ thống 22/09/2026 6 phút

Discord lưu hàng nghìn tỷ tin nhắn: chống hot partition, đo THẬT trên ScyllaDB

Discord chứa hàng nghìn tỷ tin nhắn. Bài toán khó: một kênh nóng biến thành một partition khổng lồ. Cách giải: khoá phân mảnh (channel_id, bucket). Bài này dựng THẬT trên ScyllaDB, tạo cả hai schema và dùng nodetool đo trực tiếp: partition nóng 315KB/14.237 cell với đọc 2.106µs, còn bucket chỉ 29KB/1.109 cell đọc 207µs.

Kiến trúc hệ thống 22/09/2026 6 phút

Consistent hashing: cách Amazon Dynamo chia dữ liệu, dựng THẬT trên Redis Cluster

Chia khoá cho N node bằng hash%N nghe hợp lý — cho tới khi thêm một node và gần như MỌI khoá phải chuyển chỗ. Dynamo (2007) giải bằng consistent hashing. Bài này dựng THẬT một Redis Cluster 3 node (16384 hash slot), nạp 20.000 khoá, thêm node thứ 4 và đo trực tiếp: chỉ 24,9% khoá phải dời (~1/N) thay vì ~75% của modulo.

Kiến trúc hệ thống 22/09/2026 5 phút

Kafka và log phân tán: chạy THẬT và đo 1,25 triệu message/giây trên một broker

Kafka ghi xuống đĩa mà vẫn ingest hàng triệu message/giây. Bí quyết là một lựa chọn cấu trúc: log chỉ-thêm-vào-cuối biến mọi ghi thành tuần tự, cộng page cache và zero-copy. Bài này chạy THẬT Kafka 3.8 và đo bằng chính công cụ perf của Kafka: producer 1.253.132 records/giây (119,51 MB/s), consumer 1.139.211 msg/giây.

Kiến trúc hệ thống 22/09/2026 6 phút

Uber tìm tài xế gần bạn thế nào: geospatial index chạy THẬT trên Redis GEO

Ghép khách với tài xế không thể so khoảng cách tới cả triệu tài xế mỗi lần. Bài này dựng THẬT một chỉ mục không gian trên Redis GEO (dùng geohash), nạp 500.000 tài xế và đo trực tiếp: GEOSEARCH trả lân cận đã sắp theo khoảng cách, 13.368 truy vấn/giây p50 3,6ms, index 42MB. Và vì sao Uber tự xây H3 lục giác.

Kiến trúc hệ thống 22/09/2026 6 phút

Dựng feed như Twitter/X trên Redis THẬT: fanout ghi vs đọc và bài toán người nổi tiếng

Timeline phải trả về tức thì dù bạn theo dõi hàng nghìn người. Bài này dựng feed THẬT trên Redis: push bằng LPUSH, đọc bằng LRANGE. Đo trực tiếp: một tweet của sao 50 triệu follower = 50 triệu LPUSH ~ 138 giây fanout cho MỘT tweet. Và cách hybrid push-người-thường / pull-người-nổi-tiếng cứu hệ thống.