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 12 phút

Consensus với Raft trong Go: bầu leader và nhân bản log qua đa số

Khóa Redis có thể sai khi failover. Raft giải bài toán đồng thuận: nhiều node thống nhất một log lệnh dù có node chết, miễn đa số còn sống. Bài dựng cụm 3 node hashicorp/raft thật trong Go: đo bầu leader, nhân bản log đồng nhất, và failover — leader chết thì cụm tự bầu leader mới ở term cao hơn.

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

Idempotency key trong Go: đảm bảo một thao tác chỉ thực thi đúng một lần

Retry ở bài trước chỉ an toàn khi thao tác lũy đẳng. Idempotency key là cách biến thao tác có side effect thành lũy đẳng: client sinh khóa duy nhất, server dedup. Đo thật trong Go: không idempotency retry 5 lần tạo 5 đơn; có thì chỉ 1, kể cả 100 goroutine đồng thời.

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

Distributed lock với Redis trong Go: SET NX PX và Lua unlock an toàn

Mutex chỉ khóa trong một tiến trình. Khi nhiều máy chủ tranh một tài nguyên, cần khóa ngoài tiến trình. Bài dựng distributed lock bằng Redis trong Go: SET NX PX để lấy, Lua so sánh-rồi-xóa để trả an toàn. Đo thật: loại trừ đúng 1 người, 50 goroutine đỉnh critical section = 1, và những cái bẫy.

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

Distributed tracing với OpenTelemetry trong Go: lần theo một request qua nhiều dịch vụ

Log rời rạc không cho biết thời gian một request nằm ở đâu khi nó đi qua API, DB, cache. Distributed tracing nối tất cả bằng một trace_id và quan hệ cha-con giữa span. Đo thật trong Go với OpenTelemetry: dựng cây trace, và chi phí một span 50 ns (tắt) đến 763 ns (ghi đủ) — sampling là nút chỉnh.

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

Metrics với Prometheus client trong Go: counter, gauge, histogram và chi phí đo

Trace chẩn đoán một request; metrics trả lời hệ thống có khỏe không. Bài mổ xẻ ba loại metric Prometheus trong Go, vì sao histogram hơn hẳn trung bình, và đo thật chi phí: mọi thao tác 0 cấp phát, nhưng WithLabelValues tra cứu nhãn tốn 24 ns mỗi lần — cache handle về 1.7 ns.