Thundering Herd — Khi cache hết hạn là cả hệ thống sụp
Thundering herd là gì? Khi một key cache 'nóng' hết hạn, hàng chục nghìn request cùng đổ vào database. Kèm cách chặn: singleflight, Redis lock và jitter TTL.
THE ENGINEERING JOURNAL
Những điều mình xây, những vấn đề mình gặp, và những gì mình học được. Về phần mềm, từ bên trong.
Thundering herd là gì? Khi một key cache 'nóng' hết hạn, hàng chục nghìn request cùng đổ vào database. Kèm cách chặn: singleflight, Redis lock và jitter TTL.
Vai trò kiến trúc sư trong kỷ nguyên microservices: governance bằng principles, fitness functions, paved road và quản lý tech debt.
Học multi-stage build trong Docker để giảm image từ 1.2GB xuống 90MB — kèm Dockerfile mẫu, tricks layer cache và kinh nghiệm deploy VPS thực tế.
Conway's Law: cấu trúc team quyết định kiến trúc hệ thống. Stream-aligned teams, platform teams, cognitive load và cách tổ chức team cho microservices.
Testcontainers chạy PostgreSQL, Redis thật trong Docker cho integration test — hết cảnh mock giả, test sát production hơn. Kèm ví dụ Go.
UI composition cho microservices: page-level, server-side (SSI/ESI), client-side — micro frontends và cách tránh UI monolith.

Topic 47 Pragmatic Programmer: pair programming và mob programming — vì sao code chung lại cho kết quả tốt hơn, và làm sao để pair thật sự hiệu quả.
Scaling microservices qua 4 trục: vertical, horizontal duplication, data partitioning và functional decomposition — khi nào dùng trục nào, kèm caching và CQRS.

Goroutine leak âm thầm ăn hết RAM của bạn. Nhận diện 3 pattern leak kinh điển và fix bằng context + select + goleak.
Topic 46 Pragmatic Programmer: bài toán 'bất khả thi' thường chỉ bị giới hạn bởi suy nghĩ của chính mình. Cách nhận diện ràng buộc tự đặt và phá bẫy.
