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

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

Streaming replication đo thật: replica 700 MB streaming sau 1,7 giây, lag dưới tải trung vị 9 KB và tối đa 82 ms, số đo giây lên 20 giây khi primary im lặng dù lag thật bằng 0, tắt replica 20 giây thì slot giữ 476 MB và bắt kịp sau 5,2 giây

Dựng replica PostgreSQL 16 bằng pg_basebackup -R với replication slot: 961 ms chép 700 MB, trả lời truy vấn sau 1,7 giây, lag 0. Dưới pgbench 8 client sinh 25 MB WAL mỗi giây, lag byte trung vị 9 KB, tối đa 50 KB, replay_lag trung vị 1 ms và tối đa 82 ms. Khi primary im lặng, now trừ pg_last_xact_replay_timestamp tăng 5, 10, 20 giây trong khi lag byte bằng 0. Tắt replica 20 giây giữa tải: slot giữ 476 MB WAL, bật lại bắt kịp sau 5,2 giây. Không slot và wal_keep_size 0: 16 segment bị dọn, replica báo WAL segment has already been removed, phải dựng lại từ basebackup trong 1,6 giây.

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

Bầu chủ với etcd lease: đo thật trên cụm 3 node — leader chết đột ngột thì chờ đúng TTL (10,01 s với TTL 10 s), từ nhiệm thì 1 ms, và leader cũ tỉnh dậy ghi thẳng 50/50 lần trừ khi dùng Txn

Ba ứng viên dùng etcd concurrency.Election trên lease. Giết leader bằng cách đóng kết nối không revoke: thời gian có leader mới bằng đúng TTL — 1,98 s, 2,98 s, 10,01 s cho TTL 1, 3, 10 giây (etcd đẩy TTL 1 s lên sàn 2 s). Từ nhiệm có chủ ý: 1 ms. Kịch bản đáng sợ hơn: leader A bị treo 4 s với TTL 2 s, B lên thay lúc 2,30 s, A tỉnh dậy lúc 4,07 s vẫn tưởng mình là leader và ghi 50 bản ghi — Put thẳng thành công 50/50, hai leader cùng ghi; Txn kèm điều kiện khoá leader còn tồn tại bị etcd từ chối 50/50. Chi phí: TTL 1 s là 1 keepalive/giây mỗi leader.

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.

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

Cùng O(n²) nhưng chậm hơn 14 lần: phần hiệu năng mà Big-O không nhìn thấy

Hai vòng lặp cùng số phép tính, cùng độ phức tạp O(n²), nhưng một cái chậm hơn cái kia 14 lần — chỉ vì thứ tự truy cập bộ nhớ. Bài này đo thật trong go-lab: duyệt mảng 2D theo cột chậm hơn theo hàng tới 13,9 lần vì cache. Nhưng cũng trung thực: AoS vs SoA và truy cập ngẫu nhiên lại gần như không khác, vì CPU hiện đại giỏi giấu độ trễ cho mẫu đều đặn.

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

Big-O không phải lý thuyết suông: đo thật để thấy nó hiện ra

Ai cũng học Big-O rồi quên, vì nó nghe như toán hàn lâm. Nhưng Big-O là thứ ĐO được. Bài này chạy thật trong go-lab: khi N tăng gấp đôi, O(n) ×2, O(n²) ×4, còn O(log n) gần như đứng yên. Chính tỉ lệ 'nhân đôi N' đó là cách nhận ra độ phức tạp của code bạn — và lý do một hàm O(n²) chạy ngon lúc dev lại làm sập hệ thống lúc scale.

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

Tổng kết: khung tư duy chọn thuật toán — khi nào Big-O quyết định, khi nào thực tế thắng

Mười một bài, mười một phép đo thật trong Docker. Bài tổng kết này nối tất cả thành một bảng số liệu và một checklist thực dụng: cần gì thì dùng cấu trúc nào, khi nào Big-O là yếu tố sống còn (heap top-k 247 lần, Dijkstra 210 lần, memo 4 triệu lần), và khi nào hằng số với cache mới là thứ quyết định (insertion thắng quicksort ở N nhỏ, duyệt cột chậm 14 lần dù cùng O(n²)).