Q

Quản trị viên

Là một lập trình viên yêu công nghệ, thích viết blog để chia sẻ kiến thức, kinh nghiệm lập trình và những điều thú vị trong thế giới tech.

2312 bài viết · Website
Lập trình 22/09/2026 9 phút

Tổng kết Caching: gom 11 phép đo thành một hàm, DB giảm 19 lần và Redis giảm 60 lần

Phần cuối loạt Caching gom mọi thứ đã đo thành một hàm đọc duy nhất — L1 trong tiến trình, singleflight, khoá SET NX, dấu vắng mặt, TTL có nhiễu — rồi đo nó cạnh cache-aside ngây thơ dưới cùng một lưu lượng: 32 người đọc song song, Zipf trên 5000 key, 5% là bot quét id không tồn tại. Kết quả: truy vấn database từ 101.739 xuống 5.300 (đúng sàn lý thuyết), lưu lượng Redis từ 100% xuống 0,1%, p99 từ 0,283ms xuống 0,001ms — đổi lại đuôi khởi động nguội xấu hơn, 388,7ms so với 21,5ms. Kèm khung quyết định và checklist rà soát trước khi lên production.

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

PgBouncer gộp kết nối: vì sao ngàn kết nối làm sập PostgreSQL, và cách cứu

Mỗi kết nối PostgreSQL là một process riêng tốn RAM, và max_connections có trần cứng — ngàn client làm cạn kết nối, database từ chối. PgBouncer đứng giữa, gộp nhiều client vào một pool nhỏ. Bài này dựng THẬT Postgres + PgBouncer: 30 client chỉ thành 5 backend, và đo chi phí thiết lập kết nối đắt gấp 50 lần giữ kết nối.

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

Viết hàm assembly Plan 9 trong Go: chạy được, nhưng vì sao thường lỗ

Hướng dẫn viết một hàm assembly từ đầu: khai báo Go không thân, cài đặt trong file .s, đọc tham số qua FP. Chạy thật cho kết quả đúng. Nhưng đo trung thực cho thấy hàm asm không inline được, nên với hàm nhỏ thường lỗ — nó chỉ đáng cho thứ compiler không diễn đạt được. Go 1.23.

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

Rate limiting bằng token bucket trong Go: giới hạn tốc độ, không phải số đồng thời

golang.org/x/time/rate dùng thuật toán token bucket để giới hạn số sự kiện mỗi giây, cho phép burst ngắn. Đo thật: 200 sự kiện ở 50/giây hội tụ chính xác 50,2/giây, burst 3 cho 3 lần đầu qua ngay, Reserve báo trước delay 0,50s. Khác semaphore thế nào. Go 1.23.

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

Service discovery trong Go: đăng ký, health check TTL và round-robin

Địa chỉ cứng không co giãn: dịch vụ scale, chết, đổi IP thì client không biết. Service discovery giải bằng sổ đăng ký động — dịch vụ tự đăng ký và heartbeat, client tra để tìm bản sống. Bài dựng registry trong Go và đo thật: round-robin phân đều 3/3/3, health check loại bản chết, traffic tự né.