AZ'ler Arası Trafik Fatura Şoku
Kubernetes servislerimiz gevezeydi. Fazlasıyla geveze. AZ'ler arası veri transferi: ~$8K/ay.
Mimari:
- 20 mikroservis
- 3 AZ'ye dağıtılmış (HA için iyi)
- Servisler birbirini sık çağırıyor
- Her istek: ortalama 5 servisler arası çağrı
Hesap:
- AZ'ler arası veri transferi: her yönde $0,01/GB, yani efektif $0,02/GB
- Pod'lar 3 AZ'ye eşit dağıldığında çağrıların kabaca 2/3'ü bir AZ sınırını geçer
- Kullanıcıya dönük tek bir akış için örnek hesap: 1M istek/gün × 5 çağrı × 50KB payload ≈ 250GB/gün doğu-batı trafiği, bunun ~167GB'ı AZ'ler arası ≈ $100/ay
- Kulağa zararsız geliyor — ta ki tüm akışları ekleyene kadar: istek ve yanıt payload'ları, retry'lar, gRPC streaming, log gönderimi ve 20 servisin tamamında Kafka replikasyonu
- VPC Flow Logs ile ölçüldü: ~13TB/gün AZ'ler arası ≈ $260/gün ≈ $8K/ay
Değerlendirilen çözümler:
- Tek AZ — reddedildi: maliyeti, yüksek erişilebilirliği ortadan kaldırarak ortadan kaldırıyor
- Topology-aware routing — servisler arası çağrılarda aynı AZ'deki endpoint'leri tercih et
- Payload boyutlarını küçült — en geveze API'lerde sıkıştırma ve sayfalama
- Mümkün olan yerde API çağrılarını toplu (batch) yap
- Locality-aware load balancing yapan service mesh
Sonuç: Istio locality-aware routing ile AZ'ler arası trafikte %60 azalma.
Ders: Yüksek erişilebilirliğin bir maliyeti var. Ne olduğunu bilin. Veri transferi, bulut maliyet incelemelerinde ilk denetlediğimiz kalemlerden biridir; çünkü “ağ” başlığının içinde saklanır ve kimse sahiplenmez.
Bu tür olaylar önlenebilir. AWS Yönetilen Hizmetler ekibimiz müşteri ortamlarını yapay zekâ destekli izleme ve nöbetteki kıdemli mühendislerle 7/24 gözetir — böylece bu tür hikâyeler arşivde kalır.