Tháng trước, khi review hóa đơn AWS, tôi phát hiện một dòng phí lạ:
$376.57 - regional data transfer - in/out/between EC2 AZs
Gần 400 đô mỗi tháng cho việc truyền dữ liệu giữa các Availability Zone? Hệ thống của chúng tôi chủ yếu là cache read, tại sao lại tốn nhiều như vậy?
Sau một ngày điều tra, tôi tìm ra thủ phạm: DNS round-robin của Redis Reader Endpoint.
Vấn đề
Hệ thống của chúng tôi gồm EKS + ECS Fargate kết nối tới Valkey cluster (3 nodes, Multi-AZ). Tất cả đều dùng Reader Endpoint để đọc cache.

Vấn đề: Reader Endpoint dùng DNS round-robin → mỗi request có 50% cơ hội connect tới replica ở AZ khác → ~50% traffic bị tính phí cross-AZ ($0.01/GB).
Giải pháp: AZ-Aware Routing
Thay vì để DNS chọn random, application tự detect AZ khi boot và connect trực tiếp tới replica cùng AZ.

Cách hoạt động

Key points:
- Detect AZ chỉ 1 lần khi boot, cache kết quả
- Nếu same-AZ replica down → failover trong cùng request (0 request lost)
- Fallback về Reader Endpoint = behavior cũ, không bị break
Kết quả
| Metric | Before | After | Change |
|---|---|---|---|
| Cross-AZ Traffic | 38 TB/m | 4 TB/m | -89% |
| Cost | $376/m | $40/m | -$336/m |
| Latency P50 | 1.2ms | 0.4ms | -67% |
Takeaways
- Reader Endpoint được thiết kế cho HA, không phải cost optimization - AWS không tự động route tới same-AZ
- Cross-AZ là hidden cost - $0.01/GB nghe nhỏ, nhưng với high-throughput system thì tích lũy rất nhanh
- Luôn có fallback - Khi same-AZ fail, tự động chuyển về Reader Endpoint
