Nelle architetture distribuite, la gestione degli errori deve essere centralizzata, prevedibile e resistente a vari tipi di guasti, che sono inevitabili quando si lavora con servizi di rete. Si raccomanda di utilizzare pattern come Retry, Circuit Breaker, Timeout, Fallback e logging/monitoraggio centralizzati.
Principi:
Esempio di Circuit Breaker in Python utilizzando la libreria pybreaker:
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: restituire un placeholder o un errore response = 'Fallback data'
Caratteristiche chiave:
È possibile restituire al cliente tutti i dettagli dell'eccezione in caso di errori?
No. Non si possono rivelare i dettagli delle eccezioni - questo è un rischio per la sicurezza. Nelle risposte si restituisce solo informazioni generali, i dettagli tecnici vengono registrati nei sistemi interni.
È sufficiente implementare semplicemente "retry" in caso di errori di rete tra i servizi?
No, un "retry" "pulito" può aggravare il problema - è preferibile implementare una strategia con backoff (ritardo crescente) anziché tentativi di ripetizione rigidi.
È meglio conservare i log sul disco locale di ciascun microservizio?
No. La migliore opzione è la raccolta centralizzata dei log (ad esempio, utilizzando ELK, Loki, Grafana), in modo che tutti i log siano disponibili per la ricerca e l'analisi in un unico punto.