Polly.NET
Polly.NET
Introduzione
Esistono numerosi scenari in cui
le nostre applicazioni consumano servizi esposti da terze parti quali web
service, REST Api, database, … Uno dei problemi ricorrenti in questi casi è
legato alla temporanea indisponibilità del servizio che vogliamo contattare
legata a problemi di rete, pooling delle risorse, sovraccarico del sistema,
ecc. In letteratura si trovano numerosi documenti che suggeriscono le tecniche
di retry, fallback o circuit breaker al fine di gestire nel miglior modo
possibile questo genere di inconvenienti mantenendo consistente lo stato della
nostra applicazione e fornendo un eventuale feedback all’utente finale. Polly è
una libreria disponibile su GitHub che ci permette di utilizzare le tecniche di
cui sopra in modo semplice e thread-safe.
Descrizione libreria
I principali scenari in cui la libreria risulta
particolarmente utile sono riportati nella tabella che segue:
|
Policy
|
Descrizione
|
Come aiuta
Polly?
|
|
Retry
|
Spesso i problemi sono temporanei e un
secondo tentativo dà esito positivo
|
Permette di configurare dei retry
automatici
|
|
Circuit breaker
|
Permette di proteggere un sistema già
carico da ulteriore sovraccarico
|
Blocca le chiamate per un certo tempo
|
|
Timeout
|
Inutile attendere una risposta oltre un
certo tempo
|
Permettere di configurare il massimo
tempo di attesa
|
|
Cache
|
Molte richieste sono identiche
|
Fornisce un sistema di cache delle
risposte
|
|
Fallback
|
Le richieste possono fallire e
definisce come comportarsi in quel caso
|
Permette di definire cosa restituire
nella risposta in caso di fallimento della richiesta
|
La configurazione delle policy illustrate nella precedente
tabella avviene in modo semplice grazie all’uso di lambda expression e della
fluent api che consente la concatenazione di regole e la gestione a cascata
delle azioni da intraprendere nei diversi scenari di errore che possono
presentarsi.
L’esempio che segue per prima
cosa configura i casi in cui deve scattare il meccanismo di Retry durante l’esecuzione
del metodo DoSomething. Qualora, a runtime, si verificasse una delle due
condizioni configurate, la libreria si occuperà di rieseguire il nostro metodo
DoSomething per 3 volte.
var policy = Policy
.Handle<HttpResponseException>()
.OrResult<HttpResponseMessage>(r => r.StatusCode == HttpStatusCode.InternalServerError).Retry(3);
var result = policy.Execute(() => DoSomething());
Ulteriori esempi e dettagli sulle altre tipologie di policy
sono disponibili al link: https://github.com/App-vNext/Polly
Conclusioni
In uno dei precedenti post ho parlato di Wolfram Netlink, una libreria che
permette di invocare le funzioni scritte in Wolfram Mathematica da .NET. Il
numero di calcoli paralleli eseguibili dipende dal numero di licenze di calcolo
acquistate e possono pertanto verificarsi dei casi in cui l’engine di
Mathematica ci restituisca un errore poiché tutte le unità di calcolo sono
occupate. In questo scenario è stato molto utile sfruttare le policy di Retry
di Polly.NET per risottomettere la chiamata all’engine di Mathematica dopo un breve
delay.
Commenti
Posta un commento