Il 4 Dicembre 2020, presso il campus di Cesena dell’Università di Bologna, gli Ingg. Simone Grotti e Davide Giacomini di eResult hanno condotto un seminario dal titolo: “Scalable Software Architectures: from design to containerized deployment”, destinato agli Studenti del corso di Laboratorio di Sistemi Software nel corso di laurea magistrale in Ingegneria e Scienze Informatiche.
La prima parte dell’intervento si è occupata di descrivere il metamodello alla base della piattaforma software proprietaria Omniaplace, che ha permesso di poterla usare in contesti e domini applicativi anche molto distanti fra loro.
Omniaplace come sistema software complesso è stato preso come esempio non solo per mostrare i vantaggi di un approccio basato su metamodello, come fattorizzazione di evoluzioni e funzionalità all’interno della piattaforma poi disponibili per tutte le installazioni, ma anche come riferimento per descrivere l’esperienza di eResult nella transizione verso un sistema cloud-native scalabile, focalizzandosi sugli aspetti architetturali, le tecnologie, gli strumenti e metodologie innovative utilizzate per la realizzazione di sistemi software complessi basati su microservizi. A conclusione della prima parte sono stati descritti i componenti principali di architetture di questo tipo, mostrando sia l’utilizzo di componenti tipici di queste architetture (service discovery, api gateway, …), sia la decomposizione della piattaforma nei vari microservizi.
La seconda parte di seminario è iniziata con una introduzione alla metodologia devops, in particolare sugli obiettivi principali e le tecnologie abilitanti. Tra queste:
- Strumenti per il build automatizzato (e.g. Gradle)
- Runtime per eseguire container (e.g. Docker)
- Orchestratori di container (e.g. Kubernetes)
- Piattaforme specifiche per aggregare in un unico posto ed utilizzare tutte queste tecnologie (e.g. GitLab)
La trattazione si è quindi concentrata su un sottogruppo di queste tecnologie, ovvero quelle specifiche per il deployment, procedendo per livelli di astrazione partendo da quelli più di basso livello. Si è quindi introdotto Docker, spiegandone i concetti di base, le modalità di utilizzo, i comandi per gestire container, le alternative, andando infine a definire pregi e difetti di questa tecnologia. Successivamente, si è introdotto Docker-compose, un prodotto maggiormente evoluto. Anche in questo caso dopo una veloce panoramica e introduzione dei vari aspetti, sono stati riproposti nuovamente pro e contro, proponendo alcune domande mirate inerenti ad aspetti poco funzionali o poco cloud-oriented. Al termine di questa sezione si è mostrato docker-compose in azione utilizzando come esempio una pipeline per ingestion di big data sviluppata in eResult e preposta all’acquisizione di dati inerenti all’utilizzo da parte degli utenti della piattaforma Omniaplace.
Il passo successivo nel seminario è stato l’introduzione alla prima vera tecnologia cloud-native, ovvero Kubernetes. Si è descritta la sua infrastruttura e tutti i suoi componenti, sviluppando nella trattazione tutti i concetti principali necessari per comprendere ed implementare una soluzione sfruttando questo tipo di piattaforma. In particolare, i concetti trattati più in dettaglio sono stati:
- Objects
- Workloads
- Networking resources
- Storage resources
- Configuration resources
Infine, sempre analizzando le caratteristiche positive e negative delle tecnologie illustrate, si è ripresa la pipeline già mostrata eseguendone il deployment su Kubernetes e mostrando le differenze rispetto al caso precedente.
La successiva parte del seminario ha riguardato Helm, una tecnologia legata a Kubernetes che permette di risolvere alcuni problemi legati all’utilizzo di quest’ultima. Anche in questo caso si è descritto il suo funzionamento e le motivazioni che ne giustificano l’utilizzo. Si sono ancora una volta esposti gli aspetti a favore ed a sfavore dell’impiego di Helm, insieme alle possibili alternative, per poi eseguire nuovamente il deployment della pipeline utilizzando quest’ultima tecnologia per mostrare le differenze e i vantaggi pratici che essa offre.
A conclusione del seminario sono state esibite alcune feature di Kubernetes, sfruttando un deployment inerente alla versione a microservizi della piattaforma Omniaplace, in particolare il funzionamento di self-healing e autoscaling.