Blog | SparkFabrik

Cloud Native application definition: capire il Cloud Native

Scritto da SparkFabrik Team | Jun 7, 2022 7:00:00 AM

Cos’è un'applicazione Cloud Native e quali sono i vantaggi? Addentriamoci nell’universo Cloud Native esplorandone i concetti fondamentali. Giungiamo così ad una Cloud Native application definition intuitiva. Ma questo è solo il punto di partenza.

La trasformazione digitale è diventata un tema critico per la competitività delle aziende. Non è solo un'evoluzione tecnologica ma richiede anche un cambiamento di processi e di cultura delle aziende per la creazione e l'utilizzo del software

Attraverso questa trasformazione le aziende possono ottenere un time-to-market più rapido e una flessibilità inimmaginabile prima, per soddisfare utenti e mercati sempre più esigenti. In altre parole, garantire servizi digitali con performance migliori della concorrenza, funzionalità più innovative e tempi di risposta più rapidi. 

È questo il quadro in cui si inseriscono le tecnologie native del Cloud e le Cloud Native application. Definire queste ultime e comprenderne i vantaggi sarà l’obiettivo di questo articolo destinato a chi è in fase di discovery e sta cercando di capirne di più.

I concetti di Cloud Native e Cloud Computing

Prima di dare una definizione di applicazione Cloud Native, facciamo zoom-out e guardiamo il quadro più ampio. Quando parliamo di Cloud Native facciamo riferimento a nuove tecnologie e architetture native del Cloud che consentono di adottare un approccio capace di sfruttare il modello di Cloud Computing in tutta la sua potenzialità.

Pur essendo strettamente collegati, Cloud Native e Cloud Computing sono concetti distinti. 

Il Cloud Computing è una infrastruttura che eroga servizi a richiesta tramite Internet, garantendo scalabilità e flessibilità. Alla base del Cloud Computing ci sono delle risorse informatiche condivise, che permettono a chi le utilizza di scalare molto rapidamente e che possono essere pagate in base al consumo. In Europa e negli Usa i grandi fornitori di servizi di Cloud sono Amazon Web Services (AWS), Google Cloud Platform e Azure di Microsoft.

Attraverso il Cloud Computing le aziende incrementano la scalabilità e la disponibilità delle proprie applicazioni, il cui ciclo di vita viene totalmente automatizzato, dallo sviluppo alla produzione.

I vantaggi sono molti, ma ovviamente rispetto a infrastrutture ed architetture tradizionali, in questo contesto è necessario trasformare il metodo di software development. Ecco così che ci avviciniamo al concetto di Cloud Native e Cloud Native application.

Il Cloud Native è infatti un'architettura volta ad assemblare componenti sviluppate specificatamente per il Cloud. È, in buona sostanza, un approccio alla progettazione, creazione ed esecuzione delle applicazioni basato su una infrastruttura Cloud. Un metodo che si serve di strumenti e servizi innovativi, come l'integrazione continua, i container e gli orchestratori.

PER APPROFONDIRE: Cloud Vs Cloud Native: cosa sono? Una guida introduttiva

 

 

Cloud Native application definition: cosa sono le applicazioni Cloud Native?

Chiamiamo “applicazione nativa” un software sviluppato specificatamente per essere utilizzato in un determinato ambito, che può essere ad esempio una piattaforma.

Un’applicazione Cloud Native è quindi un software progettato per risiedere e funzionare nel cloud, quindi nelle Cloud platforms. Si tratta del contesto di cloud computing che abbiamo definito nel paragrafo precedente. Le applicazioni Cloud Native sono progettate per trarre i massimi benefici dal modello di distribuzione del software proprio del Cloud Computing.

Cambiando punto di vista, possiamo ipotizzare un altro tipo di Cloud Native application definition.

Le applicazioni Cloud Native sono caratterizzate spesso da un’architettura a microservizi. Possiamo quindi definirle come un insieme di microservizi indipendenti e a basso accoppiamento (loosely coupled) che risiedono nel Cloud. Questa struttura agevola lo sviluppo di nuove applicazioni e l’aggiornamento continuo di quelle esistenti. Per questo, lo sviluppo di applicazioni Cloud Native consente alle aziende di rispondere rapidamente alle contingenze e alle richieste del mercato.

In definitiva, lo sviluppo Cloud Native è un approccio allo sviluppo di applicazioni moderne. Un nuovo modo per le aziende di ottenere vantaggi competitivi nel digitale, attraverso applicazioni reattive e scalabili. Progettate specificamente per fornire un'esperienza di sviluppo e una gestione automatizzata coerente, ovunque esse si trovino, nei Cloud privati, pubblici e ibridi

Cos'è un'architettura Cloud Native?

Un'architettura Cloud Native è basata su un approccio esclusivamente Cloud, che sfrutta risorse, sistemi e servizi forniti da Cloud provider. L'architettura Cloud Native è caratterizzata da specifici attributi e tecnologie, i principali sono:

  • Architettura a microservizi (microservice architecture)
  • Containerizzazione delle applicazioni
  • Automazione

Architettura a microservizi

I microservizi sono servizi indipendenti e autonomi, legati fra loro in maniera lasca. A differenza di un approccio monolitico alla progettazione di un applicativo, i microservizi permettono agli sviluppatori di trattare ciascuna componente come se fosse indipendente dalle altre. 

Questa possibilità di disaccoppiare le funzionalità di base dell'applicazione consente di lavorarci sopra con maggiore attenzione e con più iterazioni. Si può così aggiornare o riscrivere un microservizio senza che questo vada a toccare il resto dell'applicazione.

Containerizzazione delle applicazioni

I container sono una tecnologia per pacchettizzare singoli servizi autonomi all'interno di contenitori virtuali indipendenti. Containerizzare un’applicazione significa inserirla in una struttura logica che racchiude tutti i componenti necessari al suo funzionamento. A differenza delle macchine virtuali, i container permettono di creare un ambiente virtuale minimo, leggero ma completo.

I container sono completamente separati dal sistema operativo e dal server sul quale operano e funzionano in maniera indipendente l'uno dall'altro. Per tutti questi motivi, containerizzare le applicazioni rende più facile e sicura la loro portabilità e l’attività di deployment.

Come si è visto, i sistemi nativi del Cloud abbracciano microservizi, container e progettazione moderna del sistema per ottenere velocità e agilità. Ma, questa è solo parte della storia. Come si esegue il provisioning degli ambienti Cloud in base ai quali vengono eseguiti questi sistemi? Come si distribuiscono rapidamente le funzionalità e gli aggiornamenti del software? 

La risposta arriva dall’automazione. Vediamo in che modo.

Automazione

Man mano che le Cloud Native app diventano più grandi è indispensabile il ricorso a livelli crescenti di automazione per gestirle. L’Infrastructure as Code (IaC) è un approccio alla gestione e al provisioning dell'infrastruttura basato sull’automazione, ed è un tassello importante delle architetture Cloud Native. L'infrastruttura e le distribuzioni sono così automatizzate, coerenti e ripetibili.

PER APPROFONDIRE: Infrastructure as code: cos’è e vantaggi

I vantaggi delle applicazioni Cloud Native

Abbiamo visto due possibili Cloud Native application definition e le caratteristiche delle architetture Cloud Native. Ma, in pratica, quali sono i vantaggi delle applicazioni Cloud Native?

Ripercorriamo i punti chiave in maniera più analitica:

  • Il design delle applicazioni Cloud Native è basato su microservizi per essere flessibili e poter scalare rapidamente.

  • Le loro funzionalità sono suddivise in componenti sempre più piccole, per consentire il massimo riuso possibile.

  • Sono progettate in maniera tale da essere resilienti, perché i singoli servizi non compromettono il funzionamento dell'intera applicazione.

  • Data l'architettura a microservizi, il processo evolutivo è più agevole. Solitamente permette di fare aggiornamenti in produzione, riducendo o addirittura eliminando i potenziali tempi di downtime.

  • L'architettura a microservizi e l'approccio DevOps consentono agli sviluppatori di concentrarsi su singole componenti. Grazie all'architettura e agli strumenti di automazione, è possibile fare deploy più frequenti in produzione di nuove funzionalità.

LEGGI ANCHE: FinOps: cos'è? Perchè passare alla gestione finanziaria del Cloud

Sviluppo delle applicazioni Cloud Native e i tool utili

Se la definizione di Cloud Native app e i vantaggi di queste ultime sono sufficientemente chiari, è giunto il momento di fare un passo oltre.

A questo punto forse ti starai chiedendo: d’accordo, ma quali sono gli strumenti necessari per sviluppare applicazioni Cloud Native

I microservizi vengono sviluppati con i migliori linguaggi e framework a disposizione. Le applicazioni Cloud Native sono infatti poliglotte: i servizi utilizzano una grande varietà di linguaggi, runtime e framework. 

La Cloud Native Computing Foundation, parte della Linux Foundation e riferimento di fatto per lo sviluppo di molte delle tecnologie Cloud Native più diffuse, ha creato il CNCF Cloud Native Landscape. Si tratta di una collezione di strumenti open source che coprono molti degli aspetti legati allo sviluppo delle applicazioni Cloud Native. Una vera risorsa per i Cloud Native developers.

Per semplificare, ecco una lista di strumenti e linguaggi più adatti divisi per categorie:

  1. Microservizi: Node.js è il linguaggio più usato per lo sviluppo ma anche Kotlin e Golang sono molto diffusi;
  2. Continuous Integration/Continuous Deployment: vengono sviluppati in ambienti automatizzati come Gitlab CI/CD oppure Github Actions;
  3. Containers: lo standard universale è Docker ma esistono anche altre alternative come POdman e LXD. Servizi popolari, oltre a Docker Hub, sono Google Container Registry e Quay;
  4. Container Orchestration: lo standard di fatto che segue le specifiche OCI è Kubernetes, come tecnologia alternativa Google ha sviluppato la sua Google Cloud Run;
  5. Infrastructure as Code: esistono molte tecnologie per la gestione dell'infrastruttura. Terraform, ma anche Pulumi sono le più importanti;
  6. Certificati e secrets: qui troviamo ad esempio Cert-manager, Google Managed Certificates per la gestione dei certificati e Valut e Sealed Secrets per la gestione dei secrets;
  7. Logging, Monitoring e Alerting: per il corretto funzionamento di ambienti altamente automatizzati è fondamentale l'uso di strumenti di osservazione avanzata. Da Efk a Loki, da Grafana/Prometheus a Datadog (sia per la parte di monitoraggio che di alert). Tecnologie come Jaeger e Zipkin complementano il tutto per quanto riguarda le funzioni di tracing;
  8. Service Mesh e API Gateway: in questo caso sono richieste tecnologie più avanzate di quelle tradizionali. Ambassador e Kong per i reverse proxy delle API, mentre per i mesh che permettono il routing dinamico, il service discovery, le policy di rete e la resilienza (come i circuit breaker), ci sono soprattutto Istio e Consul.

PER APPROFONDIRE: Perché e come realizzare un’applicazione Cloud Native

Come fare la transizione al Cloud Native

Passare al Cloud Native consente alle organizzazioni di rimanere competitive (o di diventarlo!). Tuttavia, prima di investire nel Cloud Native è necessario capire quali sono le esigenze dell’organizzazione, ma anche quali sono i costi di trasformazione e i suoi tempi. L'adozione di una Cloud Native architecture non significa solo trasferire parte del carico di lavoro a un fornitore di Public Cloud. È un approccio completamente nuovo e diverso per costruire infrastrutture, sviluppare applicazioni e strutturare il lavoro dei development teams.

Una transizione corretta al Cloud Native richiede innanzitutto un lavoro di analisi e la creazione di un piano. Una volta creato un piano condiviso e identificate le sue tappe, la transizione comincia cambiando l'approccio allo sviluppo. 

È necessario abbandonare l’approccio tradizionale allo sviluppo del software e adottare la cultura e i processi DevOps. Qualora necessario, andranno introdotte metodologie Agili, come Scrum o Kanban, per governare in maniera trasparente il processo di sviluppo. 

Infine, è necessario adottare processi di automazione di delivery e QA (Quality Assurance), attraverso la Continuous Integration e Continuous Delivery (CI/ CD). Queste due pratiche permettono di ridurre gli errori durante l’integrazione e distribuzione di nuove features e rendono più semplice e al contempo performante il modello di sviluppo.

Il punto essenziale però è questo: non si comincia dalla tecnologia ma dai bisogni e dagli obiettivi, coinvolgendo tutti i team aziendali. 

Inizia da qui

Per adottare il Cloud Native per prima cosa bisogna documentarsi. Capire a fondo la materia per poter prendere decisioni consapevoli. La nostra library è ricca di risorse gratuite per comprendere l’universo del Cloud Native partendo dalla basi. 

Negli approfondimenti e nei white paper mettiamo nero su bianco la nostra esperienza. È il nostro modo per aiutare Leader IT e Responsabili digital ad intraprendere la strada che conduce ai benefici del Cloud e delle applicazioni Cloud Native.

Se invece hai già deciso per la concreta adozione dell’approccio Cloud Native, ti consigliamo il nostro Cloud Native Journey, un bundle di sessioni teoriche e pratiche per accompagnarti nella trasformazione di un tuo progetto.