#backend
27 bài viết về chủ đề này
Event-driven Architecture — Bỏ gọi API, nói chuyện qua sự kiện
Event-driven architecture giúp hệ thống decouple và scale mượt mà. Học event, event bus, outbox pattern cùng kinh nghiệm thực chiến.
Idempotency key — Chống trừ tiền 2 lần khi API bị retry
Idempotency key giúp API xử lý an toàn khi client retry: trùng request vẫn trả kết quả cũ, không bao giờ trừ tiền 2 lần.
Go pprof thực chiến — Tìm bottleneck và rò rỉ memory
Profile CPU, heap và goroutine bằng pprof trong Go: cách bật endpoint, đọc flame graph và kinh nghiệm bắt bottleneck thực tế.
Hexagonal Architecture — Kiến trúc đặt domain làm trung tâm
Hiểu Hexagonal Architecture (Ports & Adapters) qua ví dụ Go: tách business logic khỏi framework và database, code dễ test và dễ thay đổi hơn hẳn.
Đổi schema database không downtime — Expand & Contract thực chiến
Migrate schema Postgres an toàn trên production: expand & contract, backfill theo batch, chuyển code từng phase — không cần tắt service.
Kafka, RabbitMQ hay Redis Streams? Chọn message queue cho backend
So sánh Kafka, RabbitMQ và Redis Streams: ưu nhược điểm, khi nào dùng cái nào, kèm code Go consumer với retry và dead letter queue.
API Gateway — Cánh cửa duy nhất của backend hiện đại
API Gateway là cửa ngõ duy nhất cho mọi request: routing, auth tập trung, aggregation. Kèm code Go thực chiến và khi nào KHÔNG nên dùng.
Graceful Shutdown trong Go — Signal, Context & bài học thực tế
Học cách graceful shutdown HTTP server, worker pool và background jobs trong Go bằng signal.Notify, context và sync.WaitGroup từ kinh nghiệm production thực tế.
Redis Caching — Cache Aside, Read Through và chiến lược cho production
Tìm hiểu chiến lược cache với Redis: Cache Aside, Read Through, Write Through kèm code Go thực tế và kinh nghiệm production.
Error Handling trong Rust — Result, Option và câu chuyện `?`
Rust không có exception, chỉ có Result và Option. Mình chia sẻ cách xử lý lỗi trong Rust — từ unwrap tới error chains với anyhow và thiserror.
PostgreSQL EXPLAIN ANALYZE & Composite Index — Cặp bài trùm query chậm
Học cách đọc EXPLAIN ANALYZE và thiết kế composite index trong PostgreSQL — tăng tốc query từ 12 giây xuống còn 45ms.
JavaScript Event Loop — Microtask vs Macrotask trong async
Hiểu rõ Event Loop, Microtask và Macrotask trong JavaScript — cách Node.js và browser xử lý code bất đồng bộ.
.NET Middleware Pipeline — request đi qua đâu trước Controller?
Tìm hiểu Middleware Pipeline trong .NET — cách request HTTP chạy qua từng lớp middleware, custom middleware và exception handling thực tế.
Redis Caching — Cache Aside, Read Through & Write Through trong production
Cache là chìa khóa performance cho hệ thống backend. Tìm hiểu 3 pattern caching phổ biến nhất với Redis: Cache Aside, Read Through, Write Through — code kèm ví dụ thực tế.
PgBouncer & Connection Pooling — vì sao app chậm dù DB vẫn xanh?
Connection pooling không chỉ là chuyện "mở nhiều kết nối". Học cách dùng PgBouncer, tune pool size đúng cách và tránh 5 sai lầm thường gặp.
gRPC — Khi REST không còn đủ nhanh cho microservices
Khám phá gRPC — giao thức giao tiếp microservices nhanh hơn REST nhờ HTTP/2, Protobuf và streaming, kèm code Go thực tế.
Testcontainers — integration test với database thật, không cần mock
Testcontainers giúp bạn chạy integration test với PostgreSQL, Redis, Kafka thật trong container. Tạm biệt mock, tạm biệt những bug chỉ xuất hiện ở production.
Goroutines & Channels — Sức mạnh concurrency của Go không chỉ là 'chạy song song'
Goroutines và channels là hai thứ làm nên tên tuổi của Go. Một góc nhìn thực tế về concurrency trong Go — từ goroutine leak, channel blocking, tới những pattern áp dụng trong công việc hằng ngày.
Database Index — Câu chuyện về thứ giúp query của bạn nhanh hơn 100 lần
Database Index — cấu trúc dữ liệu thần kỳ giúp query tốc độ từ O(n) thành O(log n). Cùng mình tìm hiểu B-Tree, cách index hoạt động, và kinh nghiệm dùng index trong thực tế.
Caching trong System Design — không chỉ là chuyện 'lưu tạm'
Cache là một trong những kỹ thuật cơ bản nhất trong system design, nhưng dùng sai còn hại hơn không dùng. Bài này giải thích các pattern cache phổ biến và cái bẫy cache invalidation.
Rate Limiting — Vũ khí bảo vệ API không thể thiếu
Tìm hiểu về rate limiting trong system design: Token Bucket, Leaky Bucket, Fixed Window, Sliding Window — và cách triển khai thực tế.
.NET Minimal APIs — nhẹ nhàng, gọn gàng mà vẫn xịn
Minimal APIs trong .NET là cách viết API nhẹ nhàng hơn Controller truyền thống. Mình chia sẻ cảm nhận sau một thời gian dùng thử.
Thiết kế Rate Limiter — chuyện không chỉ đơn giản là đếm
Rate limiter là thứ backend dev nào cũng nghe qua, nhưng thiết kế sao cho đúng thì không phải ai cũng biết. Câu chuyện từ basic Token Bucket tới distributed với Redis.
Rate Limiting — mấy thuật toán mà backend dev nào cũng gặp
Rate limiting không chỉ là chuyện 'chặn spam' — Token Bucket, Leaky Bucket, Fixed Window và Sliding Window có gì khác nhau? Bài này giải thích đơn giản, dễ hiểu.