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.


← Çıkarılan Dersler'e dön

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.