Il termine DevOps, derivato dalla combinazione delle parole "Development" e "Operations", rappresenta molto più di una semplice tendenza nel panorama dello sviluppo software. È un approccio metodologico e, allo stesso tempo, un insieme di strumenti progettati per rivoluzionare la collaborazione tra gli sviluppatori e gli operatori IT (amministratori di sistema). L'obiettivo principale di DevOps è quello di accelerare e ottimizzare il processo di sviluppo, velocizzando la distribuzione e la gestione di prodotti e servizi software all'interno di un'organizzazione.
L'evoluzione delle piattaforme moderne, contraddistinte da una crescente complessità e stratificazione, ha reso indispensabile l'adozione di metodologie come DevOps. Il crescente utilizzo della virtualizzazione e dei container, infatti, ha portato ad un aumento della flessibilità e della scalabilità delle infrastrutture, ma ha anche introdotto sfide nella distribuzione e gestione delle applicazioni finali.
Il DevOps si pone, dunque, l'obiettivo di affrontare queste sfide, consentendo alle organizzazioni di sfruttare appieno i vantaggi offerti dalla moderna tecnologia. La collaborazione sinergica tra sviluppatori e operatori IT permette di ridurre gli effetti negativi della complessità delle infrastrutture, offrendo una soluzione integrata per migliorare la flessibilità, la velocità e l'integrazione tra i diversi componenti del processo di sviluppo e distribuzione software.
Glossario. Termini ed espressioni tecniche nell'ambito del Platform Engineering
- Platform Engineering
- Una disciplina che semplifica il flusso di lavoro di uno sviluppatore fornendo strumenti self-service per gestire autonomamente l'intero ciclo di vita dell'applicazione. È vista come un'evoluzione del DevOps, progettata per mitigare la crescente complessità delle moderne piattaforme IT. Coinvolge un Platform Team dedicato che costruisce una Internal Developer Platform (IDP).
- DevOps
- Una metodologia e un insieme di strumenti volti a rivoluzionare la collaborazione tra i team di sviluppo e di IT operations. Il suo obiettivo è accelerare e ottimizzare il processo di sviluppo del software, inclusa la distribuzione e la gestione, riducendo gli effetti negativi della complessità dell'infrastruttura e migliorando flessibilità, velocità e integrazione.
- Kubernetes
- Una tecnologia frequentemente menzionata nel contesto di infrastrutture moderne e complesse. Fa parte della complessità sottostante che il Platform Engineering mira ad astrarre dagli sviluppatori. È anche un obiettivo specifico per diversi strumenti di Chaos Engineering cloud-native come PowerfullSeal, Chaos Mesh, Kraken e Litmus. Ad esempio, Kraken è un framework per creare test di caos su cluster Kubernetes.
- Piattaforma di sviluppo interna (Internal Developer Platform - IDP)
- Un insieme di strumenti, spesso presentati come un portale unificato, forniti da un Platform Team ai team di sviluppo. Il suo scopo è dare agli sviluppatori il potere di gestire l'intero ciclo di vita delle loro applicazioni in completa autonomia. Backstage è un framework open-source per costruire tali portali.
- Strumenti per il Platform Engineering
-
I componenti chiave includono:
- Framework di IDP come Backstage.
- Strumenti "as code" come Ansible o Terraform (IaC).
- Repository Git per il versionamento.
- Pipeline di CI/CD per l'automazione.
- Strumenti di Osservabilità (Metrics, Logging, Tracing).
- Moduli e template pre-configurati.
- Infrastructure as Code (IaC)
- Una pratica fondamentale in cui l'infrastruttura IT viene gestita e provisionata utilizzando file di definizione leggibili dalla macchina (come codice), consentendo l'automazione, la riproducibilità e la riduzione degli errori manuali.
- CI/CD (Continuous Integration/Continuous Delivery)
- Un insieme di pratiche che consentono la consegna continua e automatizzata del software. All'interno del Platform Engineering, le pipeline CI/CD sono essenziali per gestire e automatizzare tutte le risorse.
- Observability (Osservabilità)
- La capacità di misurare gli stati interni di un sistema esaminando i suoi output (come metriche, log e tracce). È un elemento cruciale sia nel Platform Engineering sia nella Data Strategy per garantire la qualità.
GitOps e Infrastructure as Code
GitOps rappresenta un fondamentale principio DevOps, che pone il codice sorgente al centro di ogni operazione, fungendo da singolo punto di verità per gli ambienti di sviluppo e produzione. In questa prospettiva, ogni risorsa, che sia infrastrutturale o applicativa, viene gestita in modo dichiarativo, trattata come codice tramite il concetto di Infrastructure as Code.
Attraverso l'utilizzo di strumenti appositi, come Ansible o Terraform, è possibile creare e aggiornare le risorse in maniera automatizzata, semplificando le operazioni e riducendo il rischio di errori derivanti da modifiche manuali. Inoltre, questa pratica favorisce una migliore Disaster Recovery e Riproducibilità degli ambienti, consentendo la replicazione o il ripristino delle configurazioni precedenti, in maniera idempotente, basandosi su configurazioni versionate e dati di backup.
L'adozione di GitOps si basa sull'utilizzo di strumenti che seguono il paradigma "as code" per la gestione delle risorse. Dalle tecnologie container, progettate per essere indipendenti dall'ambiente di destinazione e gestite tramite file di configurazione, alla gestione delle risorse Cloud Native, fino all'implementazione di procedure e automatismi per integrare l'intero ciclo di vita del software, lo sviluppatore è in grado di interagire con questi strumenti e sistemi per gestire l'intero processo, dall'inizio alla fine. Non è tanto il singolo prodotto o tecnologia utilizzata che conta, ma lo scopo e il problema che questa risolve. Di conseguenza, è comune trovare una serie di strumenti che includono:
- un repository Git per il versionamento del codice sorgente.
- Strumenti e programmi per la configurazione automatizzata delle risorse e degli ambienti a partire dal codice sorgente.
- Un ambiente virtualizzato, che possa consistere in una serie di macchine virtuali o container Docker o cluster Kubernetes, semplificato nell'ambito dei servizi cloud.
- Un sistema Agile di gestione delle attività e del team.
- Infine, un sistema di pipeline per integrare e automatizzare l'intero processo, dalla creazione dell'infrastruttura di base al rilascio del software in produzione e alla gestione dei ticket aziendali.
Platform engineering: la Metodologia
Se il DevOps può essere visto come l’integrazione e automazione delle diverse fasi della gestione del ciclo di vita di un’applicazione o servizio, il Platform Engineering è una sua evoluzione. Questa disciplina mira a semplificare ulteriormente la vita dello sviluppatore, fornendo tutti gli strumenti necessari per gestire in modo autonomo il ciclo di vita di un'applicazione, senza la necessità di coinvolgere direttamente il team Operations.
Questa nuova metodologia, emersa in risposta alla crescente complessità dell'architettura delle moderne piattaforme - complessità in parte aggravata dall'adozione delle pratiche DevOps - agevola l’attività degli sviluppatori e di quanti, pur non essendo esperti, devono operare su una serie di servizi che esulano dal loro campo di competenza o non sono pertinenti allo sviluppo del software.
L'idea di base è quella di fornire al team di sviluppo uno o più strumenti raggruppati sotto il nome di Internal Developer Platform. Questo permette loro di gestire il proprio software in tutte le fasi del ciclo di vita, con caratteristiche e funzionalità ben precise:
- Completa autonomia
- Creazione e gestione degli ambienti, delle risorse (cluster, database, ecc.) e dei test in modalità self-service
- Monitoraggio a 360 gradi delle proprie applicazioni
- La piattaforma stessa guida il team di sviluppo, imponendo il rispetto delle Best Practice e delle Policy aziendali, anche in relazione all'infrastruttura sottostante.
Questa piattaforma rappresenta un vero e proprio prodotto interno dell'azienda, solitamente sviluppato e gestito da un team dedicato allo scopo, chiamato Platform Team. Il team si impegna a creare una piattaforma che offra un'esperienza di sviluppo ottimale, priva di frizioni, che funga da layer intermedio, riducendo la conoscenza necessaria per interagire con l'infrastruttura sottostante, che, con tecnologie come Kubernetes e la virtualizzazione, tende ad essere sempre più complessa. Inoltre, si favorisce un onboarding più rapido dei nuovi membri del team di sviluppo, consentendo a quest'ultimo di concentrarsi esclusivamente sullo sviluppo del software e di migliorarne la qualità e la velocità di rilascio.
Sono quindi chiari i benefici che questo sistema può portare. Secondo Gartner®, infatti, «(...) entro il 2026, l’80% delle organizzazioni software si doterà di Platform Teams», ovvero di team dedicati alla costruzione e manutenzione di tale piattaforma digitale.
Questo nuovo paradigma non deve per forza essere visto come un sostituto del DevOps o di altre metodologie, ma può essere usato in combinazione con essi.
Molto spesso, infatti, è proprio lo stesso Team Operations che insieme ad un Product Manager e a dei Site Reliability Engineers compongono il nuovo Platform Team, che tramite l’utilizzo degli stessi principi e tecnologie descritti nella sezione dedicata al DevOps permettono la costruzione e gestione di questa piattaforma dedicata agli sviluppatori.
Il Platform Engineering è un'evoluzione del DevOps che mira a semplificare la vita dello sviluppatore, fornendo tutti gli strumenti necessari per gestire autonomamente il ciclo di vita dell'applicazione, senza la necessità di un coinvolgimento diretto da parte del team di Operations. Questa metodologia è emersa come risposta alla crescente complessità delle architetture delle piattaforme moderne. Il concetto fondamentale è fornire al team di sviluppo un'Internal Developer Platform (IDP), gestita da un Platform Team dedicato, che astrae l'infrastruttura e offre ogni risorsa necessaria "as a service".
Il Platform Engineering offre diversi vantaggi chiave:
- Developer Experience Semplificata: Fornisce strumenti per la gestione autonoma del ciclo di vita dell'applicazione.
- Maggiore Autonomia e Self-Service: Gli sviluppatori possono creare e gestire ambienti e risorse in autonomia.
- Riduzione del Carico Operativo: Diminuisce il coinvolgimento diretto del team Operations.
- Gestione della Complessità: Aiuta a gestire piattaforme moderne e stratificate.
- Onboarding più Rapido: Facilita l'inserimento di nuovi membri nel team.
- Adozione da parte dell'Industria: Gartner prevede che entro il 2026, l'80% delle organizzazioni software adotterà i Platform Team.
L'implementazione comporta la creazione di un Platform Team dedicato, responsabile della costruzione di una Internal Developer Platform (IDP). L'IDP astrae i dettagli architetturali e si basa su principi come la gestione dinamica delle configurazioni, l'orchestrazione dell'infrastruttura e pipeline CI/CD integrate. Un'architettura completa include sistemi di ticketing, Git, moduli pre-configurati (Golden Paths), ambienti virtualizzati, strumenti di osservabilità e sistemi di backup, il tutto gestito tramite Infrastructure as Code (IaC).
Il Platform Engineering è considerato un'evoluzione del DevOps. Mentre il DevOps si concentra sulla collaborazione e l'automazione tra Sviluppo e Operations, il Platform Engineering va oltre, creando una Internal Developer Platform (IDP) che astrae l'infrastruttura sottostante (come Kubernetes). Questo permette agli sviluppatori di concentrarsi solo sul codice, utilizzando la piattaforma "as a service" costruita dal Platform Team, che a sua volta sfrutta i principi DevOps. Non è un sostituto, ma un complemento che risponde alla crescente complessità.
Migliorare la Developer Experience è l'obiettivo centrale del Platform Engineering. Si ottiene tramite una Internal Developer Platform (IDP) che offre autonomia, funzionalità self-service, monitoraggio completo e guida alle best practice. Riducendo il carico cognitivo legato all'infrastruttura, gli sviluppatori possono concentrarsi sulla logica dell'applicazione, accelerando i rilasci e migliorando la qualità del software.
Internal Developer Platform
Il Platform Engineering comprende, nel migliore dei casi, anche un portale dedicato agli sviluppatori, attraverso cui gestire tutte le risorse da un’unica interfaccia, nel qual caso si ha un Hub centrale, costruito sulla base di alcuni principi:
- la possibilità di gestire le configurazioni delle applicazioni, in maniera dinamica, scalabile e resiliente.
- La possibilità di orchestrare l’infrastruttura, in modo dinamico e dipendente dal contesto.
- La possibilità di creare nuovi ambienti on demand.
- La possibilità di implementare una Pipeline di Continuous Integration e Continuous Deployment.
- La possibilità di gestire in modo scalabile gli accessi RBAC (Role-Based).
Questo si traduce in uno strumento capace di collegare ogni componente infrastrutturale adibito ad una particolare funzione sotto un unico tetto, in cui i dettagli architetturali e implementativi vengono nascosti all’utilizzatore finale, lo sviluppatore.
Un esempio di Internal Developer Platform lo si ottiene con Backstage, che si autodefinisce «(...) an open source framework for building developer portals». Con Backstage è possibile costruire il proprio portale, aggiungendo una serie di plugin che vanno ad interfacciarsi con le diverse soluzioni infrastrutturali sottostanti (ad esempio una pagina che mostri le dashboard di monitoraggio più utili di Grafana, o la lista di Job CI/CD eseguiti di recente, o una serie di template che permettano di creare rapidamente nuovi ambienti, database o cluster kubernetes, interfacciandosi con un determinato Cloud Provide). In questo caso sta al Platform Team mantenere questi plugin o integrazioni.
Il portale possa essere uno strumento molto utile al fine di semplificare la vita al team di sviluppo, non è un componente essenziale per costruire una soluzione di Platform Engineering, infatti è sufficiente avere una serie di strumenti, anche separati, che se usati permettano di fare le stesse cose sempre restando “staccati” e “astratti” dall’infrastruttura sottostante.
Infrastruttura e architettura
Il principale strumento che il team di sviluppo utilizza per gestire le proprie applicazioni è il portale IDP - in alternativa, quando questa manca, deve accedere agli stessi strumenti impiegati dagli sviluppatori - ma per funzionare al meglio, e fornire tutte le funzionalità necessarie al ciclo di vita di un software, l’intera architettura sottostante, gestita dal Platform Team, deve comprendere numerose risorse eterogenee, integrate tra loro. Sono gli stessi elementi della metodologia DevOps/GitOps, ma unificati o comunque integrati tra di loro. Con questa configurazione, che potremmo definire developer centric, tutto diventa accessibile anche da chi non conosce o non ha la possibilità di intervenire nell’infrastruttura reale.
Un’architettura pensata per una soluzione più o meno completa di Platform Engineering potrebbe comprendere diversi strumenti.
- Sistema di Ticket e Attività da cui partire per la gestione del ciclo di vita del progetto e collegato direttamente con i repository di codice.
- Repository Git per il codice sorgente creato automaticamente in base al progetto che il Team di Sviluppo deve gestire e possibilmente partendo da dei template.
- IDE di sviluppo interfacciato con i repository di codice.
- Moduli e Template già configurati secondo i Golden Path prestabiliti dall’azienda per le possibili risorse necessarie alle applicazioni (esempio: database, cluster kubernetes, siti web e frontend, backend, etc…).
- Ambienti Virtualizzati dedicati o condivisi tra i Team e separati in diversi “namespace” automaticamente deployati o configurati on demand tramite Pipeline.
- Sistemi di backup automatici preconfigurati.
- Registry per container, artefatti, librerie e pacchetti vari.
- Strumenti di Observability (Metriche, Logging e Tracing) focalizzati sulle applicazioni.
- Uno o più sistemi di Pipeline e CI/CD per la gestione automatica di tutte le risorse infrastrutturali e applicative (tramite “IaC”) sfruttando la logica a moduli e template preconfigurati secondo i corretti standard e policy aziendali.
- Sistema condiviso di Documentazione, possibilmente legato al codice sorgente.
Ti è piaciuto quanto hai letto? Iscriviti a MISPECIAL, la nostra newsletter, per ricevere altri interessanti contenuti.
Iscriviti a MISPECIAL