Per Iniziare
Comincia dalle basi e scopri come utilizzare Mia-Platform a piccoli passi.
Comincia dalle basi e scopri come utilizzare Mia-Platform a piccoli passi.
Inizia ora
Diventa Partner certificato e scopri tutti i benefici del Partner Program.
Scopri il nostro programma
Il mondo dello sviluppo software è in costante e rapido cambiamento. Ogni giorno infatti emergono nuove tecnologie per risolvere i problemi che rallentano il lavoro quotidiano dei reparti IT. Se quindi da un lato l’innovazione è un fattore positivo in quanto aiuta a semplificare il lavoro, dall’altro si verifica un proliferare di nuovi strumenti e servizi che devono essere gestiti dai team di sviluppo, aumentando così la quantità di informazioni e conoscenze necessarie per sviluppare e rilasciare software. Le Internal Developer Platform mirano a risolvere questo problema, semplificando l’utilizzo degli strumenti e dei servizi fornendo un unico punto di accesso e interazione. Chi ha già familiarità con il tema del Platform Engineering avrà già sentito questa frase.
Quello che a volte non viene specificato è quali sono gli strumenti che vengono orchestrati dalle Internal Developer Platform. Con questo articolo vogliamo invece dare una risposta a questa domanda, utilizzando l’esperienza maturata in Mia-Platform in questi anni. In questo modo vogliamo fornire un termine di confronto a chi già si occupa di Platform Engineering.
In questo articolo illustreremo 7 componenti che secondo noi sono indispensabili in una Internal Developer Platform. Per ciascuno di essi mostreremo il problema reale alla base, e come il componente vi risponde.
Prima di cominciare, però, è doveroso fare alcune brevi premesse. Innanzitutto, questi 7 componenti non esauriscono le capacità che può offrire un’IDP, e l’ordine con il quale li menzioneremo non ne rappresenta necessariamente l’importanza. Inoltre, abbiamo scelto di menzionare solo 7 componenti per ragioni di lunghezza dell’articolo, non perché questi siano necessariamente i più importanti in ogni Internal Developer Portal. La stessa scelta di questi 7 componenti può non applicarsi in tutti i casi, dove magari altri hanno maggiore rilevanza, ad esempio per il business di riferimento o per il contesto dell’organizzazione. Tuttavia, nella nostra esperienza abbiamo visto che questi 7 componenti sono fondamentali nella maggior parte dei casi.
Dal momento che parliamo di sviluppo software, l’attenzione va inizialmente diretta verso il codice. Dando ormai per assodata la pratica di versionare il codice, che è ormai uno standard di fatto, il passo successivo riguarda la gestione delle pipeline. Una volta che il codice è stato scritto e versionato, infatti, si presenta la necessità di automatizzare i processi di validazione del codice stesso, ed eventualmente anche del suo rilascio: le pipeline rispondono innanzitutto a questa esigenza.
Ci sono diversi tool per la gestione delle pipeline. Per menzionare solo alcuni dei più utilizzati, troviamo Azure Pipeline, GitHub Actions, GitLab CI Runner, Jenkins.
Un altro tema importante è quello della gestione degli artefatti. Avere a disposizione le immagini versionate del codice già compilato, containerizzato e pronto all’uso è molto importante per ragioni di governance e sicurezza, oltre a fornire un rapido fallback in caso di downtime.
Esempi di tool per il versionamento e il salvataggio degli artefatti containerizzati sono containerd, CRI-O, Docker Engine, Dragonfly, Harbor, Nexus.
Facendo ulteriori passi avanti nel ciclo di vita del software, senza soffermarci su temi comunque molto importanti come ad esempio quello del Continuous Deployment, arriviamo al suo cuore, ovvero alla fase di runtime. Ai fini di questo articolo consideriamo la fase di runtime nella sua interezza, includendo quindi anche le parti di security, gestione dei permessi, networking, ecc.
Considerata nella sua ampiezza, per la fase di runtime troviamo un gran numero di tool, ciascuno dedicato a un aspetto particolare. Per l’orchestrazione delle applicazioni containerizzate non si può non menzionare Kubernetes, che si può ormai considerare lo standard de facto. In particolare, le sue capacità di autoscaling, self-healing e load balancing (senza dimenticare le molte altre che garantisce), rendono Kubernetes uno dei migliori tool per scalare la fase di runtime.
Per garantire la sicurezza, uno strumento degno di nota è Rönd, un progetto open-source sviluppato e mantenuto da Mia-Platform. Rönd è un sidecar container progettato per proteggere le API grazie a delle semplici policy di sicurezza. Inoltre, permette di creare e gestire ruoli e permessi con un approccio RBAC/ABAC.
Oltre a questi due tool, menzioniamo anche Cilium per il networking e Falco per la sicurezza.
Un altro componente imprescindibile per poter garantire che i prodotti e i servizi sviluppati possano comunicare con l’esterno è l’API Gateway. A seconda del tipo di prodotto e del suo utilizzo, comprendiamo in questa sezione anche i Service Proxy, che possono essere implementati per uno scopo simile.
Per approfondire questo argomento rimandiamo a questo video. Alcuni dei tool più utilizzati nella categoria dei Service Proxy ed API Gateway sono Gloo Edge, Emissary Ingress, Envoy, NGINX e Traefik.
Uno degli aspetti più importanti del ciclo di vita del software è quello legato al monitoraggio e al tracking dei log. Il monitoraggio è infatti cruciale per conoscere lo stato dei sistemi, in modo da poter intervenire proattivamente per risolvere problemi e garantire la continuità del servizio. Raccogliendo le metriche, visualizzandole in dashboard dedicate e attivando degli allarmi, i tool di monitoring aiutano i team di sviluppo a individuare e risolvere le criticità. In un contesto di microservizi e applicativi distribuiti, raccogliere i log può essere complesso ma è comunque una parte cruciale per la buona riuscita dei progetti.
Tra i tool più utilizzati per garantire l’osservabilità dei software troviamo Elasticsearch, Fluentd, Grafana, Kibana, Prometheus.
Andando oltre l’ambito dello sviluppo in senso stretto, due temi molto importanti e strettamente correlati tra loro sono quelli di FinOps e della sostenibilità. L’esigenza principale da cui è nata la disciplina FinOps è quella di gestire da un punto di vista finanziario le operazioni legate al cloud. Il controllo e l’ottimizzazione dei costi del cloud porta anche benefici di sostenibilità.
La sostenibilità, in primis ambientale ma non solo, non deve essere soltanto un beneficio che si ottiene di riflesso da altre attività di ottimizzazione, ma deve essere considerato come un obiettivo da raggiungere. Il tema è sempre più rilevante, tanto che, secondo Thoughtworks, l’efficienza energetica sta diventando un vero e proprio requisito architetturale. Per questo motivo il Platform Engineering e le Internal Developer Platform possono aiutare a rendere i software più sostenibili, come spiega in questo articolo Michel Murabito, Developer Adovcate di Mia-Platform.
Uno dei tool più rilevanti in questa categoria è kube-green, un progetto open-source sviluppato da Davide Bianchi, Senior Technical Leader di Mia-Platform. kube-green riduce sensibilmente il consumo energetico spegnendo automaticamente alcune risorse inutilizzate secondo un piano prestabilito, portando anche un grosso risparmio economico.
Infine, ma non certo per importanza, vi è il tema della gestione dei dati, in quanto le applicazioni funzionano grazie ad essi. Saranno quindi necessari dei database per la conservazione dei dati: a seconda del tipo di applicazione, i database possono essere relazionali o documentali (SQL e NoSQL). Esempi di database relazionali sono MySQL, Oracle, PostgreSQL, mentre uno dei database documentali più famosi è MongoDB.
Ma la gestione dei dati non si limita soltanto ai database. I dati possono essere inizialmente raccolti dai vari sistemi in cui risiedono ed essere resi disponibili in tempo reale: questo compito è svolto da sistemi di data stream, quali ad esempio Confluent o Kafka.
Infine, è molto importante gestire i dati in modo diverso a seconda della loro temperatura, ovvero della frequenza con cui sono utilizzati. In questo modo è infatti possibile ottimizzare i costi, sfruttando le capacità di archiviazione dei bucket storage come Amazon S3 e Oracle Object Storage.
I componenti illustrati sopra sono fondamentali per lo sviluppo di software applicativi e, come si è visto, ciascuno di essi richiede la conoscenza e la gestione di tanti servizi diversi. Eseguire i vari passaggi indipendentemente e connettere manualmente tutti i vari componenti è un lavoro lungo, difficile e soggetto ad errori.
Per questo motivo sono nate e si stanno diffondendo le Internal Developer Platform. Grazie ad esse i team di sviluppo hanno un unico punto di accesso, ovvero la piattaforma, che si occupa di gestire l’intero ciclo di vita del software, semplificando e velocizzando il loro lavoro. La Developer Experience migliora in modo significativo utilizzando un’Internal Developer Platform: il software prodotto sarà di qualità più alta e la produttività aumenta sensibilmente, poiché i team di sviluppo potranno focalizzarsi sul codice e sulle nuove funzionalità. Le attività secondarie, ossia quelle legate alla gestione degli strumenti di sviluppo, saranno infatti automatizzate e semplificate dalla piattaforma, alleggerendo il cognitive load degli sviluppatori.
In questo articolo abbiamo illustrato alcuni dei componenti per lo sviluppo di software applicativi. Basandoci sulla nostra esperienza in Mia-Platform, questi componenti sono fondamentali per la maggior parte delle Internal Developer Platform, ma non esauriscono certamente le capacità che le piattaforme possono fornire. Inoltre, considerando che quasi quotidianamente emergono nuovi tool per semplificare lo sviluppo o estendere delle funzionalità, è importante che la piattaforma sia costruita con un’ottica modulare, in modo da poter integrare facilmente nuovi servizi e capacità.
Scarica gratuitamente il nostro white paper per scoprire come far evolvere la tua azienda in una Platform Company!
Questo articolo è stato scritto da Michel Murabito, Developer Advocate di Mia‑Platform.