Introduzione alle applicazioni cloud native

Suggerimento

Questo contenuto è un estratto dell'eBook, Progettazione di applicazioni .NET native del cloud per Azure, disponibile in .NET Docs o come PDF scaricabile gratuitamente che può essere letto offline.

Cloud Native .NET apps for Azure eBook cover thumbnail.

Un altro giorno, in ufficio, a lavorare sulla "prossima grande cosa".

Il cellulare squilla. È il proprio selezionatore amichevole - quello che chiama quotidianamente con nuove opportunità interessanti.

Ma questa volta è diverso: Start-up, equità e un sacco di finanziamenti.

La menzione del cloud, dei microservizi e della tecnologia all'avanguardia spinge l'utente oltre il limite.

Dopo qualche settimana, si è un nuovo dipendente che sta progettando un'importante applicazione di e-commercio. Si sta andando a competere con i principali siti e-commerce.

Come si creerà?

Se si seguono le indicazioni degli ultimi 15 anni, è probabile che si crei il sistema illustrato nella figura 1.1.

Traditional monolithic design

Figura 1-1. Progettazione monolitica tradizionale

Si costruisce un'applicazione core di grandi dimensioni contenente tutta la logica di dominio. Include moduli come Identity, Catalog, Ordering e altro ancora. Comunicano direttamente tra loro all'interno di un singolo processo del server. I moduli condividono un database relazionale di grandi dimensioni. Il core espone le funzionalità tramite un'interfaccia HTML e un'app per dispositivi mobili.

Complimenti. È stata appena creata un'applicazione monolitica.

Non tutto è negativo. I monoliti offrono alcuni vantaggi distinti. Ad esempio, sono semplici da...

  • build
  • test
  • distribuzione
  • troubleshoot
  • ridimensionare verticalmente

Molte app di successo esistenti oggi sono state create come monoliti. L'app è un successo e continua a evolversi, iterazione dopo iterazione, aggiungendo altre funzionalità.

A un certo punto, però, si inizia a sentirsi a disagio. Ci si trova a perdere il controllo dell'applicazione. Man mano che il tempo va avanti, la sensazione diventa più intensa, e alla fine si entra in uno stato noto come Fear Cycle:

  • L'app è diventata così estremamente complicata che nessuna singola persona lo capisce.
  • Si teme di apportare delle modifiche - ogni modifica ha effetti collaterali imprevisti e costosi.
  • Le nuove funzionalità/correzioni diventano complicate, dispendiose in termini di tempo e costose da implementare.
  • Ogni versione diventa più piccola possibile e richiede una distribuzione completa dell'intera applicazione.
  • Un componente instabile può arrestare l'intero sistema.
  • Le nuove tecnologie e i framework non sono un'opzione.
  • È difficile implementare metodologie di distribuzione agile.
  • L'erosione architetturale si manifesta con il degradarsi della codebase con "correzioni rapide" che non terminano mai.
  • Infine, arrivano i consulenti e dicono di riscriverlo.

Ti sembra familiare?

Molte organizzazioni hanno affrontato questo ciclo monolitico di paura adottando un approccio nativo del cloud alla creazione di sistemi. La figura 1-2 mostra lo stesso sistema creato applicando tecniche e procedure native del cloud.

Cloud-Native Design

Figura 1-2. Progettazione nativa del cloud

Si noti che l'applicazione viene scomposta in un set di microservizi isolati di piccole dimensioni. Ogni servizio è indipendente e incapsula il proprio codice, i dati e le dipendenze. Ognuno di essi viene distribuito in un contenitore software e gestito da un agente di orchestrazione del contenitore. Anziché un database relazionale di grandi dimensioni, ogni servizio è proprietario del proprio archivio dati, il cui tipo varia in base alle esigenze dei dati. Si noti come alcuni servizi dipendono da un database relazionale, ma altri da database NoSQL. Un servizio archivia lo stato in una cache distribuita. Si noti come tutto il traffico passi attraverso un servizio API Gateway, responsabile del routing del traffico verso i servizi back-end principali e dell'applicazione di molti problemi trasversali. Soprattutto, l'applicazione sfrutta appieno le funzionalità di scalabilità, disponibilità e resilienza disponibili nelle piattaforme cloud moderne.

Elaborazione nativa del cloud

Hmm... È stato appena usato il termine Nativo del cloud. Il primo pensiero potrebbe essere: "Che cosa significa esattamente?" “Un'altra parola chiave del settore inventata dai fornitori di software per commercializzare altro materiale?"

Per fortuna è tutt’altro, e spero che questo libro aiuti a convincersene.

In breve tempo, il cloud nativo è diventato una tendenza trainante nel settore del software. È un nuovo modo per costruire sistemi complessi di grandi dimensioni. L'approccio sfrutta appieno le moderne procedure di sviluppo software, le tecnologie e l'infrastruttura cloud. Il cloud cambia il modo in cui si progettano, implementano, distribuiscono e rendono operativi i sistemi.

A differenza dell'hype continuo che guida il nostro settore, il cloud nativo è for-real. Si consideri la Cloud Native Computing Foundation (CNF), un consorzio di oltre 400 grandi società. Il suo scopo è quello di rendere il cloud-native computing onnipresente nella tecnologia e negli stack cloud. Come uno dei gruppi open source più influenti, ospita molti dei progetti open source in rapida crescita in GitHub. Questi progetti includono Kubernetes, Prometheus, Helm, Envoy e gRPC.

Il CNFC promuove un ecosistema open source e di neutralità rispetto ai fornitori. Questo libro presenta i principi, i modelli e le procedure consigliate native del cloud che sono indipendenti dalla tecnologia. Allo stesso tempo, vengono illustrati i servizi e l'infrastruttura disponibili nel cloud di Microsoft Azure per la costruzione di sistemi nativi del cloud.

Quindi, che cos'è esattamente il Cloud Native? Sedersi, rilassarsi e lasciarsi aiutare a esplorare questo nuovo mondo.