AWS Fargate 102: Kimsenin Bahsetmediği Pattern'ler
Production workload'ları çalıştırırken öğrenilen gelişmiş Fargate pattern'leri. Maliyet optimizasyonundan stateful container'lara, dokümantasyonun size söylemeyecekleri.
Fargate 101'de temelleri ele aldık. Bu yazıda, production workload'ları çalıştırırken ortaya çıkan gelişmiş pattern'lerden bahsedelim. Bilirsiniz, troubleshooting sırasında sistemin gerçek mekaniklerini anladığınız o anlar var. Maliyet optimizasyonu, stateful container'lar, monitoring ve güvenli deployment'larla devam ediyoruz.
Maliyet Optimizasyonu: İflas Etmeme Sanatı
Fargate'in EC2'den daha pahalı olduğunu söylemiştik. İşte maliyetleri azaltmanın etkili yolları var: Spot, right-sizing, ARM ve Savings Plans. AWS faturaları beklenmedik şekilde artmaya başladığında, sistematik optimizasyon kritik hale gelir.
Fargate Spot: Kimsenin Kullanmadığı %70 İndirim
Fargate Spot normal Fargate gibi, ama AWS 2 dakikalık uyarıyla container'ınızı çekebiliyor. Kulağa korkutucu mu geliyor? Aslında çoğu workload için sorun değil.
İşte akıllıca nasıl kullanılır:
Bu konfigürasyon task'larınızın %80'ini Spot'ta çalıştırır (~%70 tasarruf) ve stabilite için bir baseline'ı normal Fargate'te tutar. Spot interruption oranları yükseldiğinde alarm'lar devreye girer. Bu pattern özellikle şunlar için uygundur:
- Batch işleme job'ları
- Development ve staging ortamları
- Restart'ı kaldırabilen async worker'lar
- CI/CD runner'ları
Kritik bir ders: Her zaman Spot kesintileri için CloudWatch alarm'ları kurun. Kesinti oranları arttığında, trafiği geçici olarak normal Fargate'e kaydırın:
Doğru Boyutlandırma: Goldilocks Problemi
Birçok ekip OOM kill'lerden kaçınmak için Fargate task'larını fazla provision'lar. İşte doğru kaynak tahsisi için sistematik bir yaklaşım:
-
Büyük başla, ölç, sonra küçült
-
%80 kuralını kullan: %100 değil, peak kullanımın %80'i için boyutlandır. O %20 buffer spike'ları halleder.
-
Farklı ortamlar için farklı boyutlar:
ARM + Savings Plans: Çifte İndirim
AWS Graviton (ARM) işlemciler %20 daha ucuz ve genelde daha hızlı. Savings Plans ile birleştirin, %20 daha indirim:
Her iki mimari için build edin:
Sonra task definition'ınızda:
Node.js servislerini Graviton'a taşımak genellikle %30-40 tasarruf sağlar. Yaygın uyumluluk sorunları arasında x86'ya özel JNI kütüphaneleri olan eski Java uygulamaları var, ancak modern workload'ların çoğu sorunsuz geçiş yapar.
Stateful Workload'lar: Evet, Yapabilirsiniz (Ama Yapmalı mısınız?)
Herkes container'ların stateless olması gerektiğini söyler. Herkes çoğunlukla haklı. Ama bazen state'e ihtiyacınız olur ve EFS burada hem dostunuz hem düşmanınız.
EFS: İyi, Kötü ve Çirkin
Fargate ile EFS kurulumu:
Gerçeklik Kontrolü:
- EFS gecikmesi: Operasyon başına 0.25–10ms (metadata daha hızlı; yerel SSD ~0.1ms)
- Throughput: 100MB/s'ye burst, general purpose modda sürdürülen ~10MB/s
- Maliyet: Yaklaşık 0.10). Ocak 2024 itibarıyla Fargate daha hızlı kalıcı depolama için EBS volume desteği de sunuyor
EFS Ne Zaman Mantıklı:
- Paylaşılan konfigürasyon dosyaları
- Birden fazla container'ın ihtiyaç duyduğu kullanıcı yüklemeleri
- Build cache'leri (dikkatli kilitlemeyle)
- Kesinlikle paylaşımlı dosya sistemi gereken eski uygulamalar
Ne Zaman Değil:
- Database depolama (sadece RDS kullanın)
- Yüksek frekanslı yazma işlemleri
- Geçici dosyalar (container'ın ephemeral storage'ını kullanın)
- Cache katmanları (ElastiCache kullanın)
Session Affinity Pattern'i
Bazen sticky session'lara ihtiyacınız olur. Fargate ile nasıl yapılır:
Ancak sticky sessions ve auto-scaling iyi anlaşmaz. Task'lar beklenmedik şekilde sonlandığında, o session'lar kaybolur. Daha iyi bir yaklaşım:
- Session verisini ElastiCache Redis'te sakla
- Sunucu session'ları yerine JWT token'ları kullan
- Deployment'lar sırasında bazı kullanıcıların çıkış yapacağını kabul et
Monitoring: Orada Aslında Ne Oluyor?
Fargate'in altyapıya görünürlüğü azaltması debugging'i zorlaştırır. İşte etkili bir monitoring yaklaşımı:
Fargate Gözlemlenebilirliğinin Üç Direği
-
CloudWatch Container Insights (Temeller)
Bu size CPU, bellek, network ve disk metriklerini verir. Temeller için iyi ama application-level şeyleri kaçırır.
-
Distributed Tracing için X-Ray (Bağlantılar)
-
StatsD ile Custom Metrikler (Detaylar)
Saatleri Kurtaran Debug Pattern'i
Fargate'e SSH yapamıyor musunuz? ECS Exec kullanın, ama faydalı hale getirin:
Blue-Green Deployment'lar: Güvenli Yol
Fargate + CodeDeploy = zero-downtime deployment'lar. Bizi birçok kötü deploy'dan kurtaran setup:
Killer özellik? CloudWatch alarm'larında otomatik rollback:
Multi-Region Fargate: Çünkü Felaketler Olur
Fargate'i region'lar arası çalıştırmak zor değil, ama onları senkronize tutmak öyle. Veri tutarlılığı, failover testi ve maliyet (her region ayrı faturalanır) dikkat edilmesi gereken noktalar. İşte bizim pattern'imiz:
Keşfettiğimiz tuzaklar:
- Region başına environment variable'lar: Endpoint'leri hardcode etmeyin; her region kendi RDS, S3 ve servis endpoint'lerine sahip olmalı.
- S3 bucket isimleri global olarak benzersiz olmalı: Region veya account suffix ekleyin.
- Cross-region gecikme: Region çiftine göre 80–150ms (us-east-1–eu-west-1 genelde ~90ms).
- Failover anında değil: Route 53 health check'leri tipik 30–60 saniye alır; bunu disaster recovery planınıza yazın.
Production Fargate için Temel Pattern'ler
Sidecar Pattern'i
Init Container Pattern'i (Bir Nevi)
Fargate'in gerçek init container'ları yok, ama taklit edebilirsiniz:
Circuit Breaker Pattern'i
Harici servis çağrıları için circuit breaker kullan. Timeout ve retry ile birlikte cascading failure'ı önle. Bir servis sürekli hata veriyorsa diğerlerinin de çökmesini engeller.
Unutmayın: Fargate bir İsviçre çakısı gibi. İnanılmaz faydalı, ama dikkatli olmazsanız ara sıra kendinizi kesersiniz.
AWS Fargate Derinlemesine Serisi
AWS Fargate'e temellerden production'a tam rehber. Gerçek dünya deneyimleri ile serverless container'ları, maliyet optimizasyonu, debugging tekniklerini ve Infrastructure-as-Code deployment pattern'lerini öğrenin.