Devop in Pillole #3 - Sfide nel software delivery
Sofware Delivery
Il ciclo di consegna del software si è accorciato sempre di più, mentre le dimensioni delle applicazioni sono aumentate. Ciò ha portato gli sviluppatori e gli operatori IT a dover trovare soluzioni per far fronte a questa nuova realtà.
Metodologie di software delivery precedenti
Anni '90:
Il software delivery avveniva tramite supporti fisici come floppy disk o CD-ROM, con cicli di delivery molto lunghi (da un anno a diversi anni).
Il modello di sviluppo software predominante era a cascata (waterfall), con fasi sequenziali di requisiti, progettazione, implementazione, verifica e manutenzione. Questo modello rendeva difficile tornare indietro alle fasi precedenti una volta avviata una fase successiva, rendendo il processo rigido e poco adattabile ai cambiamenti.
Primi anni 2000:
L'avvento di Internet ha portato alla diffusione della delivery del software via rete, come il download online.
Sono emerse nuove metodologie di sviluppo, come i modelli incrementali, iterativi e agili, per accelerare il ciclo di delivery.
Il delivery software si concentrava ancora principalmente sui file binari, come i programmi EXE,DLL, progettati per essere installati ed eseguiti sul PC del cliente. L'infrastruttura (server e rete) era statica e configurata in anticipo.
Ultimi anni 2000:
La diffusione degli smartphone e delle tecnologie wireless ha spostato l'attenzione verso le applicazioni online accessibili tramite browser web.
L'infrastruttura è diventata dinamica, con la virtualizzazione e le reti definite dal software (SDN) che hanno reso possibile la creazione e la gestione di infrastrutture dinamiche.
Consigliati da LinkedIn
Servizi cloud come AWS,GCP,AZURE hanno iniziato a dominare il panorama.
Sfide introdotte dai microservizi: complessità: la scomposizione di applicazioni monolitiche in microservizi interconnessi ha aumentato la complessità della gestione dell'ambiente.
Gestione delle risorse: la proliferazione di microservizi richiede una gestione efficiente di un numero crescente di risorse, tra cui macchine virtuali, sistemi operativi, librerie, volumi di disco e reti.
Orchestrazione: l'orchestrazione di più contenitori Docker, ognuno dei quali esegue un microservizio, richiede strumenti e processi dedicati per gestire l'avvio, l'arresto, il ridimensionamento e la comunicazione tra i contenitori.
Soluzioni proposte:
Integrazione continua (CI): automatizza la creazione, il test e il packaging del software per velocizzare il ciclo di sviluppo e migliorare la qualità.
Delivery continuo (CD): estende la CI includendo l'automazione della distribuzione, consentendo una delivery rapida e affidabile del software ai server di produzione.
Gestione della configurazione: strumenti come Puppet, Chef e Ansible aiutano a gestire la configurazione del sistema operativo, delle librerie e delle applicazioni sui server, garantendo la coerenza e la riproducibilità degli ambienti.
Infrastruttura come codice: definisce e gestisce l'infrastruttura tramite file di configurazione, consentendo l'automazione, la tracciabilità e la riproducibilità dell'ambiente.
Orchestrazione: strumenti come Kubernetes aiutano a gestire e orchestrare i contenitori Docker, automatizzando l'allocazione delle risorse, il deployment, il ridimensionamento e la gestione del ciclo di vita dei contenitori.
Container: tecnologie come Docker forniscono un ambiente isolato e portatile per l'esecuzione dei microservizi, semplificando la gestione delle dipendenze e la distribuzione del software.
CONCLUSIONI
L'evoluzione delle metodologie di sviluppo e degli strumenti DevOps, insieme all'adozione di tecnologie come i container, ha permesso di affrontare le sfide della consegna del software moderno, offrendo cicli di consegna più rapidi, maggiore flessibilità e migliore gestione della complessità.