AWS üzerinde hataya dayanıklı ve dirençli uygulamalar tasarlamak

AWS üzerinde Uygulama Geliştirme

Ricardo Sueiras

Principal Technologist

Dayanıklılık için geliştirme

dayanıklılık için geliştirme

AWS üzerinde Uygulama Geliştirme

her şey arızalanır

AWS üzerinde Uygulama Geliştirme

Geçici hatalar

 

geçici hatalar

  • Yaygın hata türlerini anla:
  • Geçici hatalar kendiliğinden kaybolur, genelde yeniden denemek güvenlidir.
AWS üzerinde Uygulama Geliştirme

Zaman aşımları

 

zaman aşımları

  • Yaygın hata türlerini anla:
  • Geçici hatalar kendiliğinden kaybolur, genelde yeniden denemek güvenlidir.
  • Zaman aşımı: dış servis yanıt vermekte çok gecikiyor.
AWS üzerinde Uygulama Geliştirme

Kalıcı hatalar

 

kalıcı hatalar

  • Yaygın hata türlerini anla:
  • Geçici hatalar kendiliğinden kaybolur, genelde yeniden denemek güvenlidir.
  • Zaman aşımı: dış servis yanıt vermekte çok gecikiyor.
  • Kalıcı hatalar: istek temelde hatalı, yeniden denemek işe yaramaz.
AWS üzerinde Uygulama Geliştirme

API limitleri

 

api sınırları

  • Yaygın hata türlerini anla:
  • Geçici hatalar kendiliğinden kaybolur, genelde yeniden denemek güvenlidir.
  • Zaman aşımı: dış servis yanıt vermekte çok gecikiyor.
  • Kalıcı hatalar: istek temelde hatalı, yeniden denemek işe yaramaz.
  • API hız limitleri: çok fazla istek, HTTP 429 Too Many Requests beklenir.
AWS üzerinde Uygulama Geliştirme

Yeniden deneme stratejileri

  • Dağıtık sistemlerde hatalar çoğunlukla geçicidir.
  • Yeniden denenen bir istek sık sık başarılı olur.
  • Retry mantığını dikkatle ekle; körüne denemeler durumu kötüleştirebilir.
  • Üssel geri çekilme: denemeler arasındaki gecikmeyi artır.
  • Jitter: yeniden deneme yığılmalarını önlemek için rastgelelik ekle.
  • Retry sınırları: sonsuz döngüleri engelle.

 

yeniden deneme stratejileri

AWS üzerinde Uygulama Geliştirme

AWS SDK yerel yetenekleri

  • AWS SDK'lar retry mantığını otomatik yönetir.
  • Dahili retry; üssel geri çekilme ve jitter içerir.
  • Başarısız veya kısıtlanan istekler artan gecikmeyle yeniden denenir.
  • Yazman gereken hata yönetimi kodunu azaltır.

 

sdk yetenekleri

AWS üzerinde Uygulama Geliştirme

Retry mantığını yönetmek

 

yeniden deneme

  • Retry mantığı her zaman çözüm değildir.
  • HTTP 4xx hataları: sunucu isteğini anladı ve reddetti.
  • İdempotent olmayan istekler: yeniden denemek yinelenen veya tutarsız işlemlere yol açabilir.
AWS üzerinde Uygulama Geliştirme

Zaman aşımlarını yönetmek

 

Zaman aşımlarını yönet

  • Sınırsız yeniden deneme, yük altında sorunları büyütebilir.
  • Yeniden denemeleri zaman aşımlarıyla birleştir.
  • Zaman aşımı, bir yanıt için bekleyeceğin en uzun süreyi belirler.
  • Her dış servis çağrısında bir zaman aşımı olmalı.
AWS üzerinde Uygulama Geliştirme

Circuit breakerlar

  • Bir servis sürekli hata veriyorsa, sadece yeniden denemek yetmez.
  • İstek göndermeye devam etmek hatalı servisi aşırı yükleyebilir.
  • Circuit breaker deseni, sağlıksız bağımlılığa geçici olarak istekleri durdurur.
  • Kapalı durum: istekler normal akar.

 

circuit breakerlar

AWS üzerinde Uygulama Geliştirme

Circuit breakerlar

  • Hatalar eşik değeri aşınca devre açılır.
  • Sonraki istekler engellenir.

 

circuit breaker

AWS üzerinde Uygulama Geliştirme

Circuit breakerlar

  • Soğuma süresinden sonra, toparlanmayı test etmek için devre yarı açık duruma geçer.
  • Servis başarılı yanıt verirse: normal işleyişe dönülür.
  • Hâlâ hatalıysa: devre açık kalır.
  • Circuit breakerları uygulama katmanında uygula.

 

circuit breaker

AWS üzerinde Uygulama Geliştirme

Dead letter queue'lar

 

dql

  • Sürekli başarısız olan iletiler sistemi tıkayabilir.
  • Onları ana işlem akışından çıkar.
  • Başarısız iletiler Dead Letter Queue'ya düşer.
  • Dayanıklı uygulamalar kurmanın kilit parçasıdır.
  • Ancak, ödünleşimleri anla
AWS üzerinde Uygulama Geliştirme

AWS API limitleri

 

API limitleri

  • AWS servisleriyle API'ler üzerinden etkileşirsin.
  • Her servis kendi API hız limitlerini tanımlar.
  • Limitleri aşmak kısıtlama tetikler (HTTP 429 Too Many Requests).
  • Uygulamanı kısıtlamayı zarifçe ele alacak şekilde tasarla.
AWS üzerinde Uygulama Geliştirme

Üçüncü taraf servislerle entegrasyon

  • Üçüncü taraf servisler belirsizlik getirir.
  • Performansları veya kullanılabilirlikleri üzerinde kontrolün yok.
  • Uzun beklemeleri önlemek için zaman aşımı ayarla.
  • Geçici sorunlar için geri çekilmeli yeniden deneme kullan.
  • Etki alanını sınırlamak için bağımlılıkları yalıt.

 

üçüncü taraflar

AWS üzerinde Uygulama Geliştirme

Üçüncü taraflarla entegrasyon

  • Senkron haberleşmeden asenkrona geçmeyi düşün.
  • Dış servis gecikse bile sistemin işlemeye devam eder.

 

3. tarafları yönetmek

AWS üzerinde Uygulama Geliştirme

Hadi pratik yapalım!

AWS üzerinde Uygulama Geliştirme

Preparing Video For Download...