CLOUD NATIVE: SEMPRE PIU' INDISPENSABILE PER GLI SVILUPPATORI

cloud-native_grande.jpg

a cura di Gennaro Falanga (componente Commissione ICT dell’Ordine degli ingegneri di Napoli)

Negli ambienti degli sviluppatori software, l'espressione CLOUD NATIVE è ormai piuttosto ricorrente.
Con questa espressione si indicano le applicazioni utilizzabili per l’installazione in ambienti CLOUD, alla cui base vi sono i concetti e le tecnologie che mi accingo ora ad illustrare.
Quando si fa riferimento al CLOUD NATIVE bisogna innanzitutto presentare il concetto di microservizio. Il microservizio può essere considerato come l’unità atomica di un’ applicazione software.   E’ progettato in modo da essere poco accoppiato (autonomo) e la sua interazione calata in un contesto più ampio consente il continuo delivery/deployment di una applicazione più complessa.
Per meglio comprendere, pensiamo ai lego; tanti mattoncini indipendenti, microservice, dalla cui unione è possibile ottenere una solida costruzione, ovvero l’applicazione software.

È possibile incapsulare tali microservizi, grazie ai Dockers che ne consentono l’esecuzione su qualunque sistema operativo.
Il formato docker è supportato anche dalle installazioni cloud: allo stesso modo delle macchine virtuali, i docker possono esssere installati anche in una infrastruttura cloud.
Il Docker è un software open source - disponibile a QUESTO LINK- che consente l’installazione delle classiche applicazioni all’interno di “container” software, sfruttando la virtualizzazione a livello di sistema operativo. Tale software consente quindi la “stratificazione” dei software necessari al corretto funzionamento del microservizio.
Supponiamo di dover realizzare un’applicazione web.
A tal fine, è possibile inserire nel container il software per consentire l’esecuzione dell’applicazione web. Ad un’applicazione web in genere sono necessari un application server, un database server e l’applicazione stessa; o anche, per sfruttare al meglio le caratteristiche dei Docker, è possibile inserire ogni elemento in un container distinto.
La “containerizzazione”  dei microservizi è possibile grazie all’introduzione nel kernel linux della feature definita control group (cgroup). Questa feature consente di limitare, contabilizzare e isolare le risorse (CPU, memoria, disk I/O, network) per una collezione di processi.
Altra caratteristica del kernel Linux necessaria alla “conteinerizzazione“ è la cosiddetta Namespace Isolation, che consente l’isolamento dei processi, nel senso che a questi ultimi non è consentito “vedere” le risorse usate da altri gruppi.

Tali caratteristiche del Kernel Linux hanno reso le applicazioni “containerizzate”, poiché sono:
1.    flessibili;
2.    scalabili;
3.    leggere dal punto di visto di consumo  di CPU e Memoria;
4.    portabili;
5.    intercambiabili;
6.    stackable cioè stratificabili verticalmente.

Nel mondo Docker, vanno distinti due oggetti: container image e container.
Il container image è un package software autonomo ed eseguibile, che contiene tutto il necessario affinchè l’applicazione possa essere eseguita.
L’immagine diventa container quando viene eseguita da un elemento dell’infrastruttura docker, il docker engine.

Gli elementi che compongono la piattaforma Docker sono :
1.    Docker Hub che è il registro on line da cui scaricare le docker image;
2.    Docker Engine è un demone linux, cuore dell’applicazione;
3.    Docker registry immagazzina le docker image;
4.    Docker client consente, mediante l’uso di api restful, l’interazioner con il docker engine;
5.    Docker Compose è un tool per definire e startare contemporaneamente più Docker container;
6.    Docker Swarm  consente il management dei container.

Infine c’è il docker orchestator che consente la scalbilità dell’applicazione implementata. Il docker orchestrator fornisce anche servizi di load balancing (bilanciamento del carico d’ingresso); ad esempio, qualora l’applicazione ricevesse cartelline telefonici da elaborare, questi sarebbero instradati a diversi microservizi.
Con l’avvento di tali tecnologie, il lavoro degli sviluppatori software si sta semplificando consentendo  ad essi di focalizzarsi solo sullo sviluppo tralasciando tutte le difficoltà delle installazioni in ambienti distinti.
Inoltre la promessa di elasticità, flessibilità e leggerezza delle architetture in cui sono presenti i Docker ne incrementano l’appeal per tutti gli operatori del settore.