Coordonarea serviciilor și gestionarea stării

Dezvoltarea aplicațiilor pe AWS

Ricardo Sueiras

Principal Technologist

Coordonarea serviciilor

 

coordonarea serviciilor

  • Mai multe servicii trebuie să colaboreze pentru a finaliza un flux de lucru.
  • Este nevoie de o strategie de coordonare.
  • Două abordări: orchestrare și coregrafie.
Dezvoltarea aplicațiilor pe AWS

Orchestrare

 

modelul de orchestrare

  • Un orchestrator central coordonează fluxul de lucru.
  • Orchestratorul controlează secvența și decide ce serviciu rulează următor.
  • Util pentru reîncercări, logică condiționată și gestionarea erorilor.
  • Pe AWS: implementat cu Step Functions pentru Lambda, ECS, DynamoDB.
Dezvoltarea aplicațiilor pe AWS

Orchestrare

 

modelul de orchestrare

  • Logica fluxului se află într-un singur loc, ceea ce simplifică depanarea și monitorizarea.
  • Compromis: introduce o dependență centrală.
Dezvoltarea aplicațiilor pe AWS

Coregrafie

  • Niciun controler central.
  • Serviciile reacționează la evenimente în mod independent.
  • Fiecare serviciu ascultă evenimentele relevante și își execută sarcina.
  • Niciun serviciu nu trebuie să cunoască întregul flux de lucru.
  • Îmbunătățește cuplarea slabă și scalabilitatea.

 

coregrafie

Dezvoltarea aplicațiilor pe AWS

Coregrafie

  • Pe AWS: EventBridge, SNS, SQS.
  • Scalabilitate ridicată.
  • Compromis: mai greu de înțeles și depanat pe măsură ce fluxurile cresc.

 

coregrafie

Dezvoltarea aplicațiilor pe AWS

Arhitectură bazată pe evenimente

  • Serviciile comunică prin producerea și consumul de evenimente.
  • Promovează cuplarea slabă între servicii.
  • Promovează scalabilitate ridicată.
  • Permite procesarea paralelă a evenimentelor.
  • Servicii noi se pot abona fără a le modifica pe cele existente.

 

arhitectură bazată pe evenimente

Dezvoltarea aplicațiilor pe AWS

Arhitectură bazată pe evenimente

 

arhitectură bazată pe evenimente

  • Compromisuri la implementarea EDA:
  • Proiectează pentru consistență eventuală.
  • Implementează idempotența.
  • Gestionarea eșecurilor este mai complexă.
Dezvoltarea aplicațiilor pe AWS

Idempotență

 

idempotență

  • Aceeași operațiune executată de mai multe ori produce același rezultat.
  • Principiu de proiectare esențial în sistemele asincrone și bazate pe evenimente.
  • Sistemele distribuite pot livra evenimente duplicate (reîncercări, erori de rețea, reprocesare).
  • Păstrează corectitudinea și fiabilitatea sistemului.
Dezvoltarea aplicațiilor pe AWS

Cozi de mesaje moarte

 

coadă de mesaje moarte

  • Gestionează eșecurile în comunicarea asincronă.
  • Izolează mesajele problematice "poison".
  • După reîncercări repetate eșuate, mesajul este mutat în DLQ.
  • Fluxul principal de procesare continuă să ruleze.
Dezvoltarea aplicațiilor pe AWS

Cozi de mesaje moarte

  • Folosește când ordinea mesajelor nu este critică.
  • Omite pentru sisteme necritice unde pierderea ocazională de date este acceptabilă.
  • Evită când ordinea mesajelor trebuie păstrată.

 

coadă de mesaje moarte

Dezvoltarea aplicațiilor pe AWS

Gestionarea stării

  • Gestionarea stării este fundamentală pentru aplicațiile cloud-native.
  • Starea reprezintă orice date păstrate între interacțiuni.
  • Stocarea locală a stării pe server limitează scalabilitatea și reziliența.

 

gestionarea stării

Dezvoltarea aplicațiilor pe AWS

Gestionarea stării

  • Gestionarea stării implică compromisuri în funcție de ce construiești.
  • Starea externă îmbunătățește scalabilitatea și reziliența.
  • Costuri: latență și complexitate suplimentare.
  • De luat în considerare: consistența, memoria cache și modelele de acces la date.

 

gestionarea stării

Dezvoltarea aplicațiilor pe AWS

Stateful

 

design stateful

  • Datele de sesiune sunt reținute pe server.
  • Cererile trebuie direcționate către aceeași instanță (sesiuni sticky).
  • Limitează flexibilitatea scalării.
  • Dacă instanța eșuează, sesiunea se pierde.
Dezvoltarea aplicațiilor pe AWS

Stateless

 

stateless

  • Fiecare cerere este tratată independent.
  • Nicio stare stocată pe server.
  • Starea se află în sisteme externe.
  • Abordarea preferată pentru aplicațiile cloud-native.
  • Orice instanță poate gestiona orice cerere, deci scalarea orizontală este simplă.
Dezvoltarea aplicațiilor pe AWS

Hai să exersăm!

Dezvoltarea aplicațiilor pe AWS

Preparing Video For Download...