Web 22/09/2026 6 phút

Nginx phục vụ tĩnh và tối ưu hiệu năng: sendfile, cache, và đo bằng ab

Nginx phục vụ file tĩnh nhanh đến mức nào? Bài cuối sê-ri đo thật: sendfile (zero-copy) cho thông lượng ~281 MB/s và 4301 request/giây trên file 68KB, Cache-Control để trình duyệt khỏi tải lại, gzip nén 156 KB xuống 1.2 KB. Kèm một cái bẫy đo lường: ab mặc định HTTP/1.0 nên không nhận gzip — phải đo tỉ lệ nén bằng curl.

Web 22/09/2026 6 phút

HTTP/1.1 vs HTTP/2: multiplexing nhiều luồng trên một kết nối — đo thật

HTTP/1.1 gửi request tuần tự trên mỗi kết nối, nên response chậm chặn hết phần sau (head-of-line blocking) — trình duyệt phải mở tới 6 kết nối để lách. HTTP/2 chia message thành frame nhị phân, đan xen nhiều luồng trên một kết nối. Bài này đo thật bằng nginx và curl: thương lượng giao thức, log server xác nhận, và multiplexing nhanh hơn khi tải nhiều tài nguyên.

Web 22/09/2026 6 phút

HTTP keep-alive: vì sao mở lại kết nối cho mỗi request là lãng phí — đo thật

Trước khi gửi được một byte dữ liệu, mỗi kết nối mới phải trả giá: tra DNS, bắt tay TCP ba bước, rồi bắt tay TLS. Keep-alive giữ kết nối mở để tái dùng. Bài này đo thật: một handshake tốn ~69ms tới byte đầu, 6 request keep-alive dùng 1 kết nối thay vì 6, và 300 request tái dùng nhanh gấp ~19 lần so với mở mới mỗi lần.

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

String internals trong Go: header 16 byte, bất biến, và chi phí ẩn của []byte(s)

String là header 16 byte trỏ vào dữ liệu bất biến, không có cap. Đo thật: substring s[7:13] miễn phí (chia sẻ backing, 0 cấp phát) nhưng chuyển string sang []byte phải copy toàn bộ (21 ns, 1 cấp phát) vì string bất biến còn byte sửa được. Vì sao và khi nào tốn kém. Go 1.23.

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

Rate limiting: cho phép burst nhưng giữ tốc độ bền vững đúng ngưỡng

Traffic dồn dập làm quá tải hệ hoặc bị lạm dụng — rate limiting chặn phần vượt ngưỡng. Bài này chạy thật trong Go: token bucket giới hạn 100/s cho cụm 100 request đầu qua ngay (burst) rồi giữ đúng 100 req/s bền vững; đo được 1000 request tức thì chỉ 100 qua, và 3 giây liên tục cho qua chính xác 100 req/s. Giải thích token bucket vs leaky bucket và khi nào dùng cái nào.