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

Post popolari in questo blog

Azure Service Bus Topics

R – regressione lineare semplice