Nhật ký kỹ thuật · Hà Nội · Backend & CloudVol. 2026

Nhật ký kỹ thuật

Ghi chép dài về hệ thống backend: bài toán, con số, thiết kế, và những đánh đổi mình sẵn sàng bảo vệ khi bị review. Viết từ chính những hệ thống mình đã làm.

9 bài viết

Tranh đầu sách. Xưởng in, nơi từng trang nhật ký được sắp chữ bằng tay.

Mới nhất

Số 0917 phút đọc

100.000 lượt xem mỗi giây đập vào một dòng MySQL

Một video lên xu hướng và mọi người xem đều chạy cùng một câu vô hại: views = views + 1. CPU vẫn rảnh mà database vẫn chết. Vì sao một hot row tuần tự hóa mọi thứ, phép tính chặn nó quanh 1.000 lượt ghi mỗi giây, ba lối thoát, và nơi duy nhất tuyệt đối không được dùng chúng.

  • system-design
  • mysql
  • redis
  • kafka
  • concurrency
Đọc bài →

Mục lục

Số 0818 phút đọc

Thiết kế hệ thống đặt lịch khám không bao giờ đặt trùng

Hai bệnh nhân bấm cùng một khung 9:30 trong cùng một mili giây. Chỉ một người được thắng, lần nào cũng vậy, kể cả lúc 7 giờ sáng khi cả thành phố cùng mở app. Yêu cầu, con số, schema, bốn cách giữ invariant, và thứ gì vỡ trước khi traffic dồn lên.

  • system-design
  • postgresql
  • concurrency
  • redis
Số 0717 phút đọc

Thiếu một cái index, cả hệ thống tắc và đường đi tới deadlock

Một câu DELETE trông vô hại làm đứng cả bảng vì khóa ngoại thiếu index. Vì sao một cái lock chỉ hẹp bằng cái index đứng sau nó, two-phase locking thật sự là gì (không phải khóa hai lần), deadlock sinh ra và được phát hiện thế nào, và vòng retry mà ai dùng ORM cũng nợ database.

  • databases
  • locking
  • deadlock
  • indexing
  • postgresql
Số 0614 phút đọc

Leader chết: failover, split brain và hai chiếc ATM

Một tài khoản 10 triệu, một đường mạng bị cắt đôi, và hai leader cùng duyệt lệnh rút 10 triệu. Vì sao thêm follower không scale được ghi, ba bước của failover, ba cách failover tự động có thể hỏng, và vì sao quorum là lối thoát.

  • distributed-systems
  • replication
  • failover
  • consensus
Số 0521 phút đọc

LSM-Tree, B-Tree, Clustered: ba từ, ba câu hỏi khác nhau

Mình từng trộn ba khái niệm này suốt nhiều năm, và lần nào cũng nhầm cùng một kiểu: coi ba câu trả lời như một. Database ghi xuống đĩa kiểu gì, tìm kiếm kiểu gì, và dòng dữ liệu thực sự nằm ở đâu là ba câu hỏi riêng. Cộng thêm phần quyết định query nhanh hay chậm: optimizer, statistics, và vì sao full scan đôi khi lại là plan đúng.

  • database
  • indexing
  • b-tree
  • lsm-tree
  • ddia
Số 0418 phút đọc

Đừng tin con số trung bình

Dashboard báo 150 ms, đèn xanh sáng, vậy mà user vẫn nhắn “app lag quá”. Vì sao con số trung bình che giấu nỗi đau, p50, p99, p999 thực sự nói gì, phép tính 63% biến một service khỏe mạnh thành một trang chậm, cách tính percentile mà không tự lừa mình, và nên nói gì với sếp.

  • performance
  • latency
  • percentiles
  • observability
  • ddia