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 Go 22/09/2026 9 phút

WebSocket server thật trong Go: nâng cấp từ HTTP, giao tiếp hai chiều bền vững

WebSocket nâng cấp một kết nối HTTP thành kênh hai chiều mở liên tục cho chat, thông báo đẩy, dữ liệu real-time. Đo thật trong Go 1.23: bắt tay 101 Switching Protocols, gửi/nhận trên một kết nối bền, và một message qua WebSocket nhanh hơn HTTP polling khoảng 23 lần.

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

Write-through vs write-back: đo thật write-back nhanh gấp 3, ghi DB ít đi 5 lần, và mất 19,4% dữ liệu khi chết

Bảy phần trước đều để cache đứng ngoài đường ghi. Bài này đưa nó vào thẳng đường ghi và đo trên Go + Redis + PostgreSQL với 20.000 lượt tăng bộ đếm: write-through tốn 0,125ms mỗi lượt và vẫn 20.000 lệnh ghi xuống database, nhưng đổi lại 100% hit khi đọc ngay sau đó (write-around chỉ 80,2%). Write-back gộp lô cho 0,038ms và chỉ 3.926 lệnh ghi — nhanh gấp 3, ít đi 5 lần. Cái giá đo được: cho tiến trình chết trước lúc dồn nốt thì 3.882 lượt mất trắng, 19,41%.

Cơ sở dữ liệu 22/09/2026 6 phút

GIN index trong PostgreSQL: đánh chỉ mục bên trong jsonb, mảng và văn bản

B-tree đánh chỉ mục cả giá trị; GIN đánh chỉ mục từng thành phần bên trong nó — mỗi khoá jsonb, mỗi phần tử mảng, mỗi từ trong văn bản. Đo thật ba truy vấn trên bảng 1 triệu dòng: jsonb nhanh gấp 27 lần, full-text gấp 18 lần, và cái giá phải trả.

Cơ sở dữ liệu 22/09/2026 5 phút

max_connections đặt bao nhiêu: throughput bị chặn bởi số core, không phải RAM

Đặt max_connections cao không cho throughput cao hơn — số truy vấn chạy song song bị chặn bởi số core CPU. Đo thật trên máy 10 core: TPS đạt đỉnh ở ~16 client rồi TỤT 20% khi lên 90 client vì context switch. Vì sao max_connections là trần an toàn chứ không phải mục tiêu, và công thức thực tế. PostgreSQL 16.