Proiectarea aplicațiilor tolerante la erori și reziliente pe AWS

Dezvoltarea aplicațiilor pe AWS

Ricardo Sueiras

Principal Technologist

Construirea pentru reziliență

construirea pentru reziliență

Dezvoltarea aplicațiilor pe AWS

totul poate eșua

Dezvoltarea aplicațiilor pe AWS

Erori temporare

 

erori temporare

  • Înțelege modurile comune de eșec:
  • Erorile temporare dispar de la sine – de obicei, e sigur să reîncerci.
Dezvoltarea aplicațiilor pe AWS

Timeout-uri

 

timeout-uri

  • Înțelege modurile comune de eșec:
  • Erorile temporare dispar de la sine – de obicei, e sigur să reîncerci.
  • Timeout-uri: serviciul extern durează prea mult să răspundă.
Dezvoltarea aplicațiilor pe AWS

Erori permanente

 

erori permanente

  • Înțelege modurile comune de eșec:
  • Erorile temporare dispar de la sine – de obicei, e sigur să reîncerci.
  • Timeout-uri: serviciul extern durează prea mult să răspundă.
  • Erori permanente: cererea este fundamental greșită, reîncercarea nu va ajuta.
Dezvoltarea aplicațiilor pe AWS

Limite API

 

limite API

  • Înțelege modurile comune de eșec:
  • Erorile temporare dispar de la sine – de obicei, e sigur să reîncerci.
  • Timeout-uri: serviciul extern durează prea mult să răspundă.
  • Erori permanente: cererea este fundamental greșită, reîncercarea nu va ajuta.
  • Limite de rată API: prea multe cereri, te aștepți la HTTP 429 Too Many Requests.
Dezvoltarea aplicațiilor pe AWS

Strategii de reîncercare

  • Eșecurile în sistemele distribuite sunt adesea temporare.
  • O cerere reîncercată reușește de regulă.
  • Adaugă logica de reîncercare cu atenție – reîncercările oarbe pot agrava situația.
  • Backoff exponențial: crește intervalul dintre reîncercări.
  • Jitter: adaugă aleatorie pentru a evita vârfurile de reîncercări.
  • Limite de reîncercări: previne buclele infinite.

 

strategii de reîncercare

Dezvoltarea aplicațiilor pe AWS

Capabilități native ale AWS SDK

  • AWS SDK-urile gestionează automat logica de reîncercare.
  • Reîncercarea integrată include backoff exponențial și jitter.
  • Cererile eșuate sau throttled sunt reîncercate cu întârzieri crescânde.
  • Reduce cantitatea de cod de gestionare a erorilor pe care trebuie să-l scrii.

 

capabilități SDK

Dezvoltarea aplicațiilor pe AWS

Gestionarea logicii de reîncercare

 

nu reîncerca

  • Logica de reîncercare nu este întotdeauna soluția.
  • Erori HTTP 4xx: serverul a înțeles și a respins cererea.
  • Cereri non-idempotente: reîncercarea poate cauza acțiuni duplicate sau inconsistente.
Dezvoltarea aplicațiilor pe AWS

Gestionarea timeout-urilor

 

Gestionarea timeout-urilor

  • Reîncercările fără limite pot amplifica problemele sub sarcină.
  • Combină reîncercările cu timeout-uri.
  • Un timeout stabilește timpul maxim de așteptare a unui răspuns.
  • Orice apel către un serviciu extern ar trebui să aibă un timeout.
Dezvoltarea aplicațiilor pe AWS

Circuit breaker-e

  • Când un serviciu continuă să eșueze, reîncercările singure nu sunt suficiente.
  • Trimiterea continuă de cereri poate supraîncărca serviciul cu probleme.
  • Modelul circuit breaker oprește temporar cererile către o dependență nesănătoasă.
  • Stare închisă: cererile circulă normal.

 

circuit breaker-e

Dezvoltarea aplicațiilor pe AWS

Circuit breaker-e

  • Când eșecurile depășesc un prag, circuitul se deschide.
  • Cererile ulterioare sunt blocate.

 

circuit breaker

Dezvoltarea aplicațiilor pe AWS

Circuit breaker-e

  • După un interval de răcire, circuitul intră într-o stare semi-deschisă pentru a testa recuperarea.
  • Serviciul răspunde cu succes: operarea normală reia.
  • Încă eșuează: circuitul rămâne deschis.
  • Implementează circuit breaker-ele la nivelul aplicației.

 

circuit breaker

Dezvoltarea aplicațiilor pe AWS

Dead letter queue-uri

 

coadă pentru mesaje eșuate

  • Mesajele care eșuează repetat pot bloca sistemul.
  • Mută-le în afara fluxului principal de procesare.
  • Mesajele eșuate ajung într-un Dead Letter Queue.
  • Componentă esențială pentru aplicații reziliente.
  • Totuși, înțelege compromisurile implicate.
Dezvoltarea aplicațiilor pe AWS

Limite API AWS

 

limite API

  • Interacționezi cu serviciile AWS prin intermediul API-urilor.
  • Fiecare serviciu își definește propriile limite de rată API.
  • Depășirea limitelor declanșează throttling (HTTP 429 Too Many Requests).
  • Proiectează aplicația să gestioneze throttling-ul fără probleme.
Dezvoltarea aplicațiilor pe AWS

Integrarea cu servicii terțe

  • Serviciile terțe introduc incertitudine.
  • Nu ai control asupra performanței sau disponibilității lor.
  • Setează timeout-uri pentru a preveni așteptările lungi.
  • Folosește reîncercări cu backoff pentru problemele temporare.
  • Izolează dependențele pentru a limita impactul eșecurilor.

 

servicii terțe

Dezvoltarea aplicațiilor pe AWS

Integrarea cu servicii terțe

  • Ia în calcul trecerea de la comunicarea sincronă la cea asincronă.
  • Sistemul tău continuă să proceseze chiar dacă serviciul extern întârzie.

 

gestionarea serviciilor terțe

Dezvoltarea aplicațiilor pe AWS

Hai să exersăm!

Dezvoltarea aplicațiilor pe AWS

Preparing Video For Download...