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

Tổng 1741 bài
Backend 01/09/2026 8 phút

Thêm một dòng CREATE INDEX làm truy vấn nhanh hơn 181 lần — tốt hơn cả tỉ lệ trúng cache 99%, và không thêm một hệ thống nào để hỏng

Cache-aside là mẫu dùng Redis phổ biến nhất, nhưng đo thật cho thấy nó thắng ít hơn ta tưởng. Tra khoá chính: Redis GET 0,062 ms ngang PostgreSQL 0,065 ms — đặt cache ở đây chỉ thêm một chỗ để hỏng. Truy vấn đắt 19,9 ms: cache nhanh hơn 321 lần, nhưng một CREATE INDEX kéo nó xuống 0,110 ms — nhanh hơn 181 lần, tốt hơn cả cache trúng 99%. Bộ đệm che một truy vấn chậm; chỉ mục xoá nó.

Backend 01/09/2026 8 phút

Mở kết nối Redis mới cho mỗi lệnh chậm gấp 5,5 lần — và khi chạm trần 10.000 kết nối, chính redis-cli của bạn cũng không vào nổi để xem chuyện gì đang xảy ra

Bể kết nối là thứ mọi thư viện đều có và ít ai chỉnh. Đo thật: tái dùng kết nối nhanh gấp 5,5 lần mở mới mỗi lệnh (6,4 lần khi có mật khẩu), mật khẩu không làm Redis chậm mà chỉ làm việc MỞ kết nối chậm; mỗi kết nối chỉ tốn 1.928 byte và gần như 0 CPU khi ngồi không — nhưng có một trần cứng 10.000, và lúc chạm nó bạn mất luôn đường nhìn vào bên trong.

Backend 01/09/2026 8 phút

Một cặp ngoặc nhọn trong tên khoá đẩy trọn 20.000 khoá về đúng một nút Redis Cluster — nhưng thông lượng không hề đổi; cái nó lấy đi là hai phần ba dung lượng

Phần 23 thấy CRC16 rải khoá rất đều. Bài này đo khi nó KHÔNG đều: một thẻ băm {khach} gom cả 20.000 khoá vào một slot, hai nút còn lại giữ đúng số không. Bất ngờ là tốc độ chẳng suy suyển — một nút chịu trên 1,2 triệu lệnh/giây — nhưng cụm ba máy giờ chỉ còn dung lượng của một máy. Bạn trả tiền cho ba, dùng được một. Vấn đề của khoá nóng không phải chậm, mà là mất chỗ.

Backend 01/09/2026 8 phút

Một khách Redis Cluster không giữ bản đồ slot chạy chậm 1,63 lần vì 67% lệnh bị đá sang nút khác — và cái giá thật của Cluster không phải tốc độ, mà là MGET ngừng hoạt động

Sentinel cho chịu lỗi nhưng dữ liệu vẫn nằm một máy; Cluster chia ra nhiều máy và lấy đi vài thứ. Dựng cụm sáu nút rồi đo: khách tự tính CRC16 gọi thẳng đúng nút đạt 16.907 ops/s với 0 lần MOVED, còn khách 'ngây thơ' chỉ 10.390 ops/s vì 67% lệnh bị chuyển hướng. Nhưng mất mát lớn nhất không đo bằng ops/s: MGET, MSET, Lua, MULTI đều chết với CROSSSLOT khi khoá nằm khác slot. Cái Cluster lấy đi là khả năng diễn đạt.

Backend 01/09/2026 9 phút

Cảnh báo trên phần trăm bộ nhớ Redis cho bạn đúng 2 giây báo trước — rồi nó ghim ở 100% và câm lặng trong khi 15.870 khoá bị vứt đi mỗi giây

INFO trả về hơn hai trăm dòng; đo thật trên một Redis 64 MB cho thấy dòng bạn hay cảnh báo nhất — phần trăm bộ nhớ — là dòng vô dụng nhất khi sự cố xảy ra. Nó là chỉ số bão hoà, chạm trần rồi đứng im; cái thật sự nói mức nghiêm trọng là tốc độ đuổi khoá, một con số không có trần. Cùng bốn nguồn để truy một lệnh chậm, và mười chỉ số nên đưa lên bảng.

Linux 01/09/2026 8 phút

Bảng điều khiển báo CPU 62,6% — 'còn 37% dư địa' — trong khi p99 đã 113 ms và tiến trình bị ghim 60 lần: con số trung bình mù tịt với điều tiết

Tôi dựng lại đúng cảnh 'ứng dụng chậm mà CPU chỉ 60%' và đo: ở 62,6% CPU trung bình, tiến trình đã bị throttle 60 lần và p99 nhảy lên 113 ms. Lý do là quota tính theo từng chu kỳ 100 ms chứ không theo phút — nên p99 chênh tới 44 lần trong khi CPU y hệt nhau, và chữ ký của nó là các yêu cầu chậm dồn đúng bội số 100 ms.