Ontwerp fouttolerante en veerkrachtige applicaties op AWS
Toepassingen ontwikkelen op AWS
Ricardo Sueiras
Principal Technologist
Bouwen voor veerkracht
Tijdelijke fouten
Begrijp de veelvoorkomende faalmodi:
Tijdelijke fouten verdwijnen vanzelf, opnieuw proberen is meestal veilig.
Timeouts
Begrijp de veelvoorkomende faalmodi:
Tijdelijke fouten verdwijnen vanzelf, opnieuw proberen is meestal veilig.
Timeouts: externe service reageert te traag.
Permanente fouten
Begrijp de veelvoorkomende faalmodi:
Tijdelijke fouten verdwijnen vanzelf, opnieuw proberen is meestal veilig.
Timeouts: externe service reageert te traag.
Permanente fouten: verzoek is fundamenteel kapot, opnieuw proberen helpt niet.
API-limieten
Begrijp de veelvoorkomende faalmodi:
Tijdelijke fouten verdwijnen vanzelf, opnieuw proberen is meestal veilig.
Timeouts: externe service reageert te traag.
Permanente fouten: verzoek is fundamenteel kapot, opnieuw proberen helpt niet.
API-verzoeklimieten: te veel verzoeken, verwacht HTTP 429 Too Many Requests.
Retry-strategieën
Fouten in gedistribueerde systemen zijn vaak tijdelijk.
Een opnieuw verzonden verzoek slaagt vaak.
Voeg retry-logica zorgvuldig toe; blind retrypen kan het erger maken.
Exponentiële backoff: vergroot de wachttijd tussen retries.
Jitter: voeg willekeur toe om retry-pieken te vermijden.
Retry-limieten: voorkom eindeloze lussen.
AWS SDK-native mogelijkheden
AWS SDK's verwerken retry-logica automatisch.
Ingebouwde retries omvatten exponentiële backoff en jitter.
Mislukte of gethrottlede verzoeken worden met oplopende vertragingen herhaald.
Minder foutafhandelingscode die je zelf moet schrijven.
Retry-logica beheren
Retry-logica is niet altijd de oplossing.
HTTP 4xx-fouten: server begreep en wees je verzoek af.
Niet-idempotente verzoeken: opnieuw proberen kan dubbele of inconsistente acties geven.
Timeouts beheren
Onbeperkt retrypen kan problemen onder load verergeren.
Combineer retries met timeouts.
Een timeout zet de max. wachttijd op een antwoord.
Geef elke externe servicecall een timeout.
Circuitbreakers
Als een service blijft falen, zijn retries niet genoeg.
Blijven sturen kan de falende service overbelasten.
Het circuitbreaker-patroon stopt tijdelijk verzoeken naar een ongezonde afhankelijkheid.
Gesloten status: verzoeken gaan normaal door.
Circuitbreakers
Als fouten een drempel overschrijden, opent het circuit.
Volgende verzoeken worden geblokkeerd.
Circuitbreakers
Na afkoelen gaat het circuit halfopen om herstel te testen.
Service reageert goed: normale werking hervat.
Nog steeds fouten: circuit blijft open.
Implementeer circuitbreakers op applicatieniveau.
Dead letter queues
Berichten die blijven falen kunnen het systeem blokkeren.
Haal ze uit de hoofdverwerkingsstroom.
Mislukte berichten komen in een Dead Letter Queue.
Essentieel voor veerkrachtige applicaties.
Begrijp wel de trade-offs
AWS API-limieten
Je gebruikt AWS-services via API's.
Elke service heeft eigen API-verzoeklimieten.
Overschrijden leidt tot throttling (HTTP 429 Too Many Requests).
Ontwerp je applicatie om throttling soepel af te handelen.
Integreren met diensten van derden
Externe diensten brengen onzekerheid mee.
Je hebt geen controle over hun prestaties of beschikbaarheid.
Stel timeouts in om lang wachten te voorkomen.
Gebruik retries met backoff bij tijdelijke problemen.
Isoleer afhankelijkheden om de impact te beperken.
Integreren met derden
Overweeg de stap van synchroon naar asynchroon.
Je systeem blijft verwerken, ook als de externe service vertraagt.
Laten we oefenen!
Toepassingen ontwikkelen op AWS
Preparing Video For Download...