Samordning av tjänster och tillståndshantering

Utveckla applikationer på AWS

Ricardo Sueiras

Principal Technologist

Tjänstesamordning

 

service coordination

  • Flera tjänster måste samverka för att slutföra ett arbetsflöde.
  • De behöver en samordningsstrategi.
  • Två metoder: orkestrering och koreografi.
Utveckla applikationer på AWS

Orkestrering

 

orchestration pattern

  • En central orkestrerare samordnar arbetsflödet.
  • Orkestreraren styr ordningsföljden och bestämmer vilken tjänst som körs härnäst.
  • Användbart för återförsök, villkorsstyrd logik och felhantering.
  • På AWS: implementeras med Step Functions över Lambda, ECS och DynamoDB.
Utveckla applikationer på AWS

Orkestrering

 

orchestration pattern

  • Arbetsflödeslogiken finns på ett ställe, vilket förenklar felsökning och övervakning.
  • Avvägning: introducerar ett centralt beroende.
Utveckla applikationer på AWS

Koreografi

  • Ingen central kontroller.
  • Tjänster reagerar på händelser självständigt.
  • Varje tjänst lyssnar på relevanta händelser och utför sitt arbete.
  • Ingen tjänst behöver känna till hela arbetsflödet.
  • Förbättrar lös koppling och skalbarhet.

 

choreography

Utveckla applikationer på AWS

Koreografi

  • På AWS: EventBridge, SNS, SQS.
  • Hög skalbarhet.
  • Avvägning: svårare att förstå och felsöka när arbetsflödena växer.

 

choreography

Utveckla applikationer på AWS

Händelsestyrd arkitektur

  • Tjänster kommunicerar genom att producera och konsumera händelser.
  • Främjar lös koppling mellan tjänster.
  • Främjar hög skalbarhet.
  • Möjliggör parallell bearbetning av händelser.
  • Nya tjänster kan prenumerera utan att befintliga ändras.

 

event-driven-arch

Utveckla applikationer på AWS

Händelsestyrd arkitektur

 

event-driven-arch

  • Avvägningar vid implementering av EDA:
  • Designa för slutlig konsistens.
  • Implementera idempotens.
  • Felhantering är mer komplex.
Utveckla applikationer på AWS

Idempotens

 

idempotency

  • Samma operation ger samma resultat oavsett hur många gånger den körs.
  • Grundläggande designprincip i asynkrona och händelsestyrda system.
  • Distribuerade system kan leverera duplicerade händelser (återförsök, nätverksfel, ombearbetning).
  • Bevarar systemets korrekthet och tillförlitlighet.
Utveckla applikationer på AWS

Dead letter queues

 

ltq

  • Hanterar fel i asynkron kommunikation.
  • Isolerar problematiska "gift"-meddelanden.
  • Efter upprepade misslyckade återförsök flyttas meddelandet till DLQ.
  • Huvudflödet fortsätter att köra.
Utveckla applikationer på AWS

Dead letter queues

  • Använd när meddelandeordning inte är kritisk.
  • Hoppa över för icke-kritiska system där tillfällig dataförlust är acceptabel.
  • Undvik när meddelandeordning måste bevaras.

 

ltq

Utveckla applikationer på AWS

Tillståndshantering

  • Tillståndshantering är grundläggande i molnbaserade appar.
  • Tillstånd är all data som bevaras mellan interaktioner.
  • Att lagra tillstånd lokalt på servern begränsar skalbarhet och motståndskraft.

 

managing state

Utveckla applikationer på AWS

Tillståndshantering

  • Tillståndshantering innebär avvägningar beroende på vad du bygger.
  • Externt tillstånd förbättrar skalbarhet och motståndskraft.
  • Kostnader: ökad latens och komplexitet.
  • Att tänka på: konsistens, cachelagring och dataaccessmönster.

 

managing state

Utveckla applikationer på AWS

Tillståndsfull

 

state full design

  • Sessionsdata lagras på servern.
  • Förfrågningar måste dirigeras till samma instans (klibbiga sessioner).
  • Begränsar skalningsflexibiliteten.
  • Om instansen kraschar försvinner sessionen.
Utveckla applikationer på AWS

Tillståndslös

 

stateless

  • Varje förfrågan behandlas oberoende.
  • Inget tillstånd lagras på servern.
  • Tillstånd finns i externa system.
  • Föredragen metod för molnbaserade appar.
  • Alla instanser kan hantera alla förfrågningar, vilket gör horisontell skalning enkel.
Utveckla applikationer på AWS

Nu kör vi en övning!

Utveckla applikationer på AWS

Preparing Video For Download...