Qual è la tecnologia di routing Go più efficiente?

In questo articolo proseguirò nel trattare l’ottimizzazione nello sviluppo di una Applicazione Web.
Il punto di partenza per un’applicazione ottimizzata è sicuramente l’utilizzo di un linguaggio opportuno, ma non è abbastanza.
Nel precedente articolo ho parlato del motivo per cui la scelta del linguaggio Go influisce nell’ottimizzazione della nostra applicazione, ma non è sufficiente scegliere
un linguaggio ottimizzato per ottenere automaticamente un’applicazione ottimizzata.
In questo articolo mi soffermerò quindi su un altro aspetto altrettanto importante: la scelta della tecnologia di routing più efficiente possibile.
I router ed i framework disponibili in linguaggio Go sono moltissimi, a partire dai famosissimi GorillaMux e Martini, che con il tempo sono stati superati in termini di prestazioni da altri router “più giovani”. Testarli tutti sarebbe un lavoro mastodontico, pertanto mi sono concentrato sul test di un router ed un framework che ritengo tra i più efficienti al momento: HttpRouter di Julien Schmidt ed il framework Gin.
Un po’ di teoria..
HttpRouter è un router di richiesta HTTP leggero ed ottimizzato per
fornire prestazioni elevate con un consumo ridotto di memoria rispetto al mux standard del pacchetto net/http. Tra le sue caratteristiche principali abbiamo:
- Path auto-correction: non importa se inserite lettere maiuscole dove c’erano minuscole o viceversa, HttpRouter correggerà automaticamente l’errore per voi.
- Zero immondizia: gli unici bytes allocati saranno per costruire la corrispondenze chiave-valore per i percorsi che intendete coprire con la vostra applicazione.
- Anti-panic: è possibile impostare un Panic Handler per evitare crash anomali del server e gestire situazioni indesiderate.
Gin è un web framework che presenta una API simile a Martini, che era il framework più usato fino a poco tempo fa, resa più performante.
Vediamo alcune delle sue caratteristiche:
- Community attiva: grazie alla community di Gin c’è una vasta scelta di middlewares.
- Anti-panic: anche questo framework dà la possibilità di impostare un Panic Handler per evitare crash anomali del server e gestire situazioni indesiderate.
- Sintassi compatta: rispetto ad altri router Gin presenta una sintassi più compatta che che vi permetterà di risparmiare righe di codice preziose.
..e ora si passa ai fatti
Per stabilire quale dei due router presenta la miglior prestazione ho sviluppato un microservizio utilizzando il router di Julien Schmidt ed uno utilizzando il router Gin che tramite una chiamata POST genera altre 500 chiamate POST concorrenti con un body consistente nel JSON
{
"name": "prova"
}
che verrà successivamente stampato in console.
Per far partire le chiamate su uno dei microservizi sviluppati ho creato un terzo microservizio il quale, in base alla chiamata GET che gli viene passata, genera una chiamata POST all’uno o all’altro microservizio.
Dopo aver effettuato 50 prove per ogni microservizio ed aver calcolato la media dei tempi necessari all’esecuzione degli stessi il risultato ha premiato Gin.

In conclusione, nonostante il router di Julien Schmidt ha guadagnato la sua fama per la sua efficienza, abbiamo dimostrato che c’è un router che riesce ad esserlo ancora di più senza dover scrivere codici più lunghi o complessi.
Se volete dare un’occhiata al codice o modificarlo per fare test con altri routers potete trovarlo QUI.
#LetsGO