In gedistribueerde architecturen moet foutafhandeling gecentraliseerd, voorspelbaar en robuust zijn tegen verschillende soorten uitval, die onvermijdelijk zijn bij het werken met netwerksystemen. Het wordt aanbevolen om patronen te gebruiken zoals Retry, Circuit Breaker, Timeout, Fallback en gecentraliseerde logging/bewaking.
Principes:
Voorbeeld van Circuit Breaker in Python met behulp van de pybreaker-bibliotheek:
import pybreaker import requests breaker = pybreaker.CircuitBreaker(fail_max=3, reset_timeout=60) @breaker def get_data(): return requests.get('http://service/api/data', timeout=3) try: response = get_data() except pybreaker.CircuitBreakerError: # fallback: geef een placeholder of fout terug response = 'Fallback data'
Belangrijkste kenmerken:
Is het mogelijk om bij fouten alle details van de uitzondering aan de klant te geven?
Nee. Uitzonderingsdetails mogen niet worden onthuld — dit is een beveiligingsrisico. In de antwoorden geven we alleen algemene informatie terug, technische details loggen we in interne systemen.
Is het voldoende om enkel "retry" te implementeren bij netwerkfouten tussen services?
Nee, een "schone" retry kan het probleem verergeren — het is beter om een strategie met backoff (oplopende vertraging) te implementeren, in plaats van harde herhalingen.
Is het beter om logs op de lokale schijf van elke microservice te bewaren?
Nee. De beste optie is gecentraliseerde logverzameling (bijvoorbeeld met ELK, Loki, Grafana), zodat alle logs toegankelijk zijn voor zoeken en analyse op één plek.