Blog | SparkFabrik

Cloud vs Cloud Native: cosa sono? Una guida introduttiva

Scritto da SparkFabrik Team | Apr 15, 2021 7:30:00 AM

Cosa significa fare Cloud Transformation oggi? La chiave di volta sta nell’adozione del Cloud Computing e di un approccio Cloud Native: approfondiamo insieme questi due concetti.

Sempre più aziende cercano di modernizzare le loro applicazioni esistenti o di costruirne di nuove in modo che siano compatibili con il Cloud, esplorando in particolare l'idea di Cloud Native. Il problema sorge quando questi due concetti vengono confusi o usati persino come sinonimi a causa della loro assonanza (in fondo entrambi afferiscono al Cloud), mentre è necessario tenere ben presente che i loro significati sono profondamente diversi.

Che cos'è il Cloud Computing?

Sono ormai molti anni che sentiamo parlare e parliamo di Cloud. La definizione più semplice e al tempo stesso inclusiva è quella offerta dal Nist, il National Institute for Standards and Technology. Secondo il Nist, il Cloud Computing è un insieme di servizi informatici accessibili in modalità on-demand e self service attraverso Internet, costruiti attorno a delle risorse condivise, caratterizzati dalla capacità di scalare molto rapidamente e dalla misura puntuale dei livelli di performance in modo tale da poter pagare in base al consumo.

Detto in altre parole, il Cloud è un’infrastruttura composta da hardware, server, database e applicativi il cui servizio viene fruito a richiesta tramite Internet garantendo scalabilità e flessibilità. Gli esempi più noti di piattaforme che erogano servizi Cloud sono Amazon Web Services (AWS), Google Cloud Platform e Azure di Microsoft.

 

 

Che cos'è il Cloud Native?

A differenza del Cloud Computing che, come abbiamo visto, è una infrastruttura che eroga servizi, il Cloud Native è un'architettura volta ad assemblare componenti sviluppate nativamente per il Cloud in modo tale da trarne i massimi benefici. Come scrivono Pini Reznik, Jamie Dobson e Michelle Gienow nel loro libro "Cloud Native Transformation" (O'Reilly 2019), "In buona sostanza, Cloud Native è il nome di un determinato approccio alla progettazione, alla creazione e all'esecuzione di applicazioni (...) basata su una Infrastructure-as-a-Service combinata con nuovi strumenti operativi e servizi, come l'integrazione continua, i container e gli orchestratori".

Quindi, la differenza tra Cloud Computing e Cloud Native non potrebbe essere più sostanziale: mentre il primo è un insieme di tecnologie e servizi e un modo di utilizzare delle risorse di calcolo per applicazioni diverse, la seconda è un’architettura articolata e complessa, una destinazione per l'azienda che vuole modernizzare la propria infrastruttura tecnologica e i propri processi. Per poterlo fare, però, è necessario un cambiamento culturale a monte che impatti sui modelli organizzativi e sui metodi di lavoro.

Oggi il modello Cloud Native è sempre più conosciuto e adottato, merito anche del lavoro della CNCF (Cloud Native Computing Foundation), un consorzio internazionale parte della Linux Foundation che raccoglie tutte le tecnologie riguardanti l'ecosistema Cloud Native. Più di 500 membri (tra cui SparkFabrik in qualità di Silver Partner) contribuiscono alla crescita di soluzioni open source come Kubernetes e alla diffusione nel mondo del paradigma Cloud Native.

PER APPROFONDIRE: I requisiti del partner tecnologico per il Cloud Native Journey

Servizi Cloud e modello Cloud Native

C’è sempre maggior familiarità con termini come IaaS, PaaS e SaaS. È ormai noto che i servizi basati sull'infrastruttura Cloud rappresentano una chiave di volta nella trasformazione digitale per via della semplicità d’uso e della flessibilità che offrono alle aziende, da quelle di ridotte dimensioni alle enterprise. Ma di cosa stiamo parlando?

  • Infrastructure-as-a-Service: il provider fornisce un'infrastruttura di cloud computing, inclusi server, rete, sistemi operativi e storage, attraverso la tecnologia di virtualizzazione. Il principale vantaggio? L’azienda può usufruire delle stesse tecnologie e funzionalità di un data center tradizionale senza doverle manutenere o gestire fisicamente. Come esempi di soluzione IaaS possiamo citare Amazon Web Services (AWS), Microsoft Azure e Google Compute Engine (GCE).
  • Platform-as-a-Service: soluzione ibrida tra IaaS e SaaS, prevede che il provider metta a disposizione la piattaforma per la creazione del software. Questa soluzione dà ai developer la libertà di concentrarsi sullo sviluppo del software senza doversi preoccupare di sistemi operativi, aggiornamenti software, storage o infrastruttura. Alcuni esempi di PaaS? AWS Elastic Beanstalk, Windows Azure, Google App Engine e Openshift.
  • Software-as-a-Service: il provider mette a disposizione l’intera applicazione via web e per poterla utilizzare non serve saper scrivere codice. Per capirci meglio, sono esempi di SaaS servizi come Gmail, Google Docs, Salesforce, Dropbox, Microsoft Office 365, iCloud: tutti programmi accessibili tramite internet gratuitamente o previo acquisto di una licenza, senza necessità di scaricare e installare alcun file.

Il vantaggio del Cloud Computing è quello di fornire servizi a richiesta pagando solo per quello che si usa e capaci di scalare in modo praticamente istantaneo. Quello che serve per poterli usare nella maniera più efficace (e questo è il ruolo del Cloud Native) è assemblarli con l'architettura giusta per le esigenze di ogni singola azienda e caso d'uso.

Gli elementi di un’architettura Cloud Native

Le architetture Cloud Native sono costruite utilizzando una serie di elementi imprescindibili di questo approccio progettuale. Vediamo quali sono.

Microservizi

I microservizi sono alla base dell'approccio architetturale per cui un applicativo viene realizzato suddividendolo nelle sue funzioni fondamentali, ognuna delle quali diventa un servizio di piccole dimensioni, indipendente dagli altri (o con interdipendenze minime) in termini di codice, implementazione e manutenzione.

Questo porta al notevole vantaggio nello sviluppo evolutivo o nella manutenzione ordinaria del software così realizzato. Diventa infatti possibile avere team diversi occupati su microservizi distinti in modo indipendente e anche parallelamente, se necessario, senza che questo impatti sulla totalità del progetto.

Containerizzazione

I container sono una tecnologia nata come evoluzione naturale dell'idea di virtualizzazione tradizionale. Sfruttando la capacità del kernel di un sistema operativo, tipicamente Linux, di far coesistere più istanze isolate e autonome nello spazio utente, i container permettono di isolare una applicazione e tutte le sue dipendenze in un ambiente autonomo

Questa architettura garantisce portabilità: i container possono essere eseguiti su qualsiasi tipo di piattaforma e server sia per lo sviluppo e test sia per la messa in produzione. Oggi l’utilizzo dei container è un vantaggio competitivo per molte aziende.

DevOps

È la filosofia di sviluppo che ha creato una vera rivoluzione nell'approccio alla creazione del software; DevOps combina lo sviluppo (Dev) con la parte di operazioni IT (Ops) seguendo la metodologia di sviluppo Agile

Questo approccio permette di ridurre i tempi di sviluppo e fornire una messa in produzione continua e automatica, migliorando sensibilmente il time-to-market. Grazie a DevOps è possibile ottenere un'elevata qualità del software, con meno bug e più funzionalità. DevOps è un elemento irrinunciabile delle architetture Cloud Native.

Automation

L'automazione viene spesso sottovalutata, ma in realtà è un elemento fondamentale per le architetture Cloud Native. Sono due i principali vantaggi che si ottengono grazie a un’infrastruttura automatizzata: in primo luogo, diventa possibile ricavare più tempo per il lavoro di sviluppo effettivo. In secondo luogo, l'automazione rende possibile la gestione di ambienti complessi e diversificati e consente una rapida scalabilità.

L’impatto positivo è tanto per il team Ops che per il team Dev. Il primo può dedicare molto meno tempo allo svolgimento di attività di supporto ripetitive e più tempo al miglioramento continuo del sistema. Il secondo riesce a velocizzare i tempi di modifica e ad eseguire test più rapidamente, ad esempio progettando efficienti pipeline di CI/CD.

Orchestrazione

Le applicazioni moderne si estendono su più microservizi containerizzati distribuiti su una serie di cloud pubblici e privati. Microservizi che vanno distribuiti, gestiti e scalati senza rinunciare mai alla disponibilità: un’operazione che genera, chiaramente, non poca complessità. È qui che entrano in gioco gli orchestratori di container come Kubernetes.

Questo strumento permette di automatizzare e controllare una serie di attività che vanno dalla gestione dei container al provisioning automatico, dal bilanciamento dei carichi di lavoro attraverso l'infrastruttura alla possibilità di scalare rapidamente verso l'alto o il basso. Tutto ciò rende Kubernetes un ingranaggio indispensabile negli ambienti Cloud Native.

LEGGI ANCHE: Cos’è Infrastructure as code e quali sono i vantaggi?

Cloud Computing e Cloud Native: il binomio della trasformazione digitale

L'evoluzione delle applicazioni aziendali verso il Cloud Computing con un'architettura Cloud Native richiede un cambiamento non solo delle tecnologie, ma anche dei processi e della cultura con la quale l'azienda lavora al software. 

Dopotutto, come scrivono gli autori di "Cloud Native Transformation", il Cloud Native «è un approccio filosofico per la creazione di applicazioni che sfruttano appieno il Cloud computing. Questo nuovo paradigma richiede non solo l'adozione di nuove tecnologie, ma anche un nuovo modo di lavorare, il che rende il Cloud Native un'impresa impegnativa. Ma il guadagno è immenso».

Tra i vantaggi per l'azienda, c'è quello di mettere in piedi un meccanismo molto rapido per la creazione di nuove funzionalità del software. Così l’applicazione viene portata sul mercato più rapidamente, raccoglie subito il feedback degli utenti e può essere innovata e migliorata altrettanto velocemente, riducendo al contempo i rischi. 

Ricordiamo, infatti, che l’approccio Cloud Native abilita la possibilità di creare progetti molto complessi lavorando con piccoli team, ognuno dei quali si occupa di singole componenti autonome del progetto. Diventa quindi più facile ridurre la complessità e i colli di bottiglia, procedere rapidamente e al tempo stesso essere pronti a cambiare direzione all’individuazione di problemi, così come ripristinare le singole funzionalità se vengono identificati bug ed errori.