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 bootconnect 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ả

MetricBeforeAfterChange
Cross-AZ Traffic38 TB/m4 TB/m-89%
Cost$376/m$40/m-$336/m
Latency P501.2ms0.4ms-67%

Takeaways

  1. Reader Endpoint được thiết kế cho HA, không phải cost optimization - AWS không tự động route tới same-AZ
  2. 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
  3. Luôn có fallback - Khi same-AZ fail, tự động chuyển về Reader Endpoint