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

Tổng 2300 bài
Kiến trúc hệ thống 22/09/2026 6 phút

Stripe idempotency key: vì sao retry thanh toán không tính tiền bạn hai lần

Mạng chập chờn khiến client retry — và với thanh toán, retry ngây thơ nghĩa là tính tiền hai lần. Stripe giải bằng Idempotency-Key: lưu kết quả lần đầu, request trùng key trả lại kết quả cũ mà không thực thi lại. Bài này dựng THẬT trên Redis bằng Lua atomic và đo: có idempotency trừ tiền 1 lần, không có thì 5 lần.

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

ETag và request có điều kiện: đo thật 1.000 lần poll — 304 cắt 62 MB xuống 0,1 MB, nhưng chỉ ETag từ version mới cắt được việc của server

Client poll một danh sách 200 sản phẩm 1.000 lần trong khi dữ liệu không đổi. Không ETag: 62,2 MB qua dây và 1.000 query nặng. ETag băm từ thân phản hồi: 999 lần 304, còn 0,1 MB — nhưng server vẫn chạy đủ 1.000 query và p50 y hệt 0,24 ms, vì phải render xong mới biết là không đổi. ETag tính từ version trong database: cũng 0,1 MB, nhưng chỉ 1 query nặng và p50 còn 0,098 ms. Cùng ETag đó dùng cho If-Match trên PUT: hai người cùng sửa một sản phẩm, không kiểm thì bản của người đầu mất không dấu vết, có If-Match thì người sau nhận 412.

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

Instagram sinh ID phân tán: 64 bit gói cả thời gian, shard và thứ tự

Ở quy mô sharded, cần ID duy nhất mà không có điểm sinh trung tâm (nút thắt). Instagram gói vào 64 bit: 41 bit timestamp + 13 bit shard + 10 bit sequence, sinh ngay trong Postgres bằng PL/pgSQL. Bài này dựng THẬT đúng scheme đó: ID tăng theo thời gian, 50.000 ID không trùng, và trích được shard từ chính con số ID.

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

Google Bigtable dùng bloom filter: cấu trúc tí hon cứu vô số lượt tra đĩa

Đọc một khoá không tồn tại trong LSM-store phải tra nhiều SSTable trên đĩa — rất phí. Bigtable đặt một bloom filter trong RAM cho mỗi SSTable để trả lời rẻ tiền 'khoá này chắc chắn không có'. Bài này dựng THẬT bằng RedisBloom: 1 triệu khoá, dương giả 0,5%, không bao giờ âm giả, và nhỏ hơn SET ~41 lần.

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

Tìm kiếm toàn văn như Elasticsearch: inverted index đánh bại LIKE ~1000 lần

LIKE '%từ%' phải quét từng bản ghi — O(n), không index được. Elasticsearch (và Lucene) dùng inverted index: ánh xạ từ tới danh sách tài liệu chứa nó. Bài này dựng THẬT trong PostgreSQL bằng tsvector + GIN và đo EXPLAIN ANALYZE: cùng kết quả nhưng inverted index nhanh hơn ~1092 lần trên 500.000 tài liệu.

Công cụ 22/09/2026 6 phút

Git là một cơ sở dữ liệu nội dung địa chỉ hoá: blob, tree, commit

Đa số người dùng Git như một hộp đen với add/commit/push. Nhưng bên dưới, Git chỉ là một key-value store đơn giản: khoá là SHA của nội dung, giá trị là object. Bài này mổ xẻ ba loại object (blob, tree, commit) bằng lệnh git thật — tự tính ra khoá SHA của Git và chứng minh nó băm nội dung, không phải tên file.