Analizziamo due soluzioni per implementare un'architettura a microservizi e capire su quale orientarci in base alle loro specifiche.
Con microservizi si intende un approccio di sviluppo software in cui è prevista la suddivisione in servizi indipendenti di piccole dimensioni. Questi sono autonomi e specializzati e la comunicazione tra loro avviene attraverso API definite. Rispetto a un’architettura monolitica, i microservizi hanno il vantaggio di semplificare tutte le operazioni di gestione e aggiornamento.
Approfondiamo ora due modalità di implementazione di un’architettura di questo tipo analizzando in particolare le loro specifiche tecniche.
Se utilizziamo il metodo Docker/Spring Boot (DSB) si tratta di realizzare i microservizi in Java con il framework Spring Boot e di farli eseguire in runtime confinati all'interno di container Docker. A loro volta i microservizi sono gestiti in un ambiente di esecuzione (cluster di server) e possibilmente organizzati con un framework come Kubernetes.
In questo caso è necessario prendersi in carico anche la gestione dell'ambiente di esercizio.
Per quanto riguarda Serverless/Lambda (SLL), il primo passaggio da fare è identificare un cloud provider, che nel caso di Lambda è AWS, e i microservizi vengono poi realizzati in uno dei linguaggi supportati. In Ariadne utilizziamo Node.js e Python ma è possibile scegliere anche Ruby, Java, Go, .NET e volendo anche custom.
L’esecuzione dei microservices avviene in un ambiente controllato totalmente dal cloud provider, non ci sono server, cluster o Kubernetes da gestire. Il tradeoff con SLL è che, delegando tutto al cloud provider, si crea un lockin più forte.
Una cosa da notare è che i cloud provider hanno sviluppato servizi per sostenere architetture DSB, mentre in AWS ci sono ECS ed EKS che creano una sorta di compromesso in termini di delega e di lockin.
Semplificando, possiamo dire che DSB consente di mantenere un lockin al minimo ma prevede che ci si prenda in carico molte attività tipicamente IT. Per questi procedimenti ci si può affidare anche ai servizi del cloud provider, ricadendo però nel problema lockin. Per DSB la gestione dei costi è più legata alla "capacity" predeterminata, tenendo conto della possibilità di automatismi di scale up/down.
In sintesi le premesse della scelta di questa soluzione devono essere un forte orientamento per:
Il servizio SLL consente, invece, di focalizzare l’effort unicamente sullo sviluppo dei microservizi, realizzando applicazioni per la loro stessa gestione e delegando al cloud provider tutto il resto. In questo caso i fattori da considerare sono:
In base alla nostra specifica situazione queste sono le motivazioni della scelta del metodo Serverless/Lambda:
In conclusione, a nostro parere SLL consente un’attivazione più rapida nell'adozione di architetture a microservizi rispetto a DSB che necessita di una messa a regime di tutto il gruppo di lavoro e dell'azienda che vuole adottarlo. Questo dovrebbe anche consentire una migliore "scalabilità" delle risorse di sviluppo.
Questo non significa che sia in assoluto semplice o veloce attivare delle risorse SLL, ma a nostro avviso è così attuando un paragone con DSB.