Cos'è il cloud-native? Il modo moderno per sviluppare software

Il termine "cloud-native" viene spesso utilizzato, soprattutto dai fornitori di cloud. Non solo, ma ha anche una sua base: la Cloud Native Computing Foundation (CNCF), lanciata nel 2015 dalla Linux Foundation.

Definito "cloud-native"

Nell'uso generale, "cloud-native" è un approccio alla creazione e all'esecuzione di applicazioni che sfrutta i vantaggi del modello di fornitura del cloud computing. "Cloud-native" riguarda il modo in cui le applicazioni vengono create e distribuite, non dove. Implica che le app risiedano nel cloud pubblico, al contrario di un data center locale.

Il CNCF definisce "cloud-native" in modo un po 'più restrittivo, per indicare l'utilizzo di stack software open source da containerizzare, in cui ogni parte dell'app è impacchettata nel proprio contenitore, orchestrata dinamicamente in modo che ogni parte sia attivamente pianificata e gestita per ottimizzare le risorse utilizzo e orientato ai microservizi per aumentare l'agilità e la manutenibilità complessive delle applicazioni.

"Un'app cloud native è progettata specificamente per funzionare nella natura elastica e distribuita richiesta dalle moderne piattaforme di cloud computing", afferma Mike Kavis, amministratore delegato della società di consulenza Deloitte. "Queste app sono liberamente accoppiate, il che significa che il codice non è cablato a nessuno dei componenti dell'infrastruttura, in modo che l'app possa aumentare e diminuire su richiesta e abbracciare i concetti di infrastruttura immutabile. In genere, queste architetture vengono create utilizzando microservizi, ma non è un requisito obbligatorio ".

Per le applicazioni cloud native, la grande differenza è quindi il modo in cui l'applicazione viene costruita, fornita e gestita, afferma Andi Mann, chief technology advocate di Splunk, un fornitore di servizi cloud. "Sfruttare i servizi cloud significa utilizzare componenti agili e scalabili come i contenitori per fornire funzionalità discrete e riutilizzabili che si integrano in modi ben descritti, anche oltre i confini tecnologici come il multicloud, che consente ai team di consegna di iterare rapidamente utilizzando automazione e orchestrazione ripetibili".

Lo sviluppo di app native del cloud include in genere devops, metodologia agile, microservizi, piattaforme cloud, contenitori come Kubernetes e Docker e distribuzione continua, in breve, ogni metodo nuovo e moderno di distribuzione delle applicazioni.

Per questo motivo, vuoi davvero avere un modello PaaS (platform-as-a-service). Un PaaS non è richiesto, ma rende le cose molto più semplici. La stragrande maggioranza dei clienti cloud inizia con IaaS (Infrastructure-as-a-Service), che aiuta ad astrarre le proprie app dall'hardware sottostante. Ma PaaS aggiunge un ulteriore livello per astrarre il sistema operativo sottostante, così puoi concentrarti interamente sulla logica di business della tua app e non preoccuparti di effettuare chiamate al sistema operativo.

Video correlato: qual è l'approccio nativo del cloud?

In questo video di 60 secondi, scopri come l'approccio nativo del cloud sta cambiando il modo in cui le aziende strutturano le loro tecnologie, da Craig McLuckie, fondatore e CEO di Heptio, e uno degli inventori di Kubernetes open source.

Differenze tra applicazioni native del cloud e locali

Lo sviluppo di applicazioni native del cloud richiede un'architettura molto diversa rispetto alle tradizionali applicazioni aziendali.

Le lingue

Le app locali scritte per essere eseguite sui server aziendali tendono a essere scritte in linguaggi tradizionali, come C / C ++, C # o un altro linguaggio Visual Studio se distribuito su una piattaforma Windows Server e Java aziendale. E se è su un mainframe, è probabile che sia in Cobol.

Le app cloud-native hanno maggiori probabilità di essere scritte in un linguaggio incentrato sul web, il che significa HTML, CSS, Java, JavaScript, .Net, Go, Node.js, PHP, Python e Ruby.

Aggiornabilità

Le app native del cloud sono sempre attuali e aggiornate. Le app native del cloud sono sempre disponibili.

Le app locali necessitano di aggiornamenti e in genere vengono fornite in abbonamento dal fornitore e richiedono tempi di inattività durante l'installazione dell'aggiornamento.

Elasticità

Le app native del cloud sfruttano l'elasticità del cloud utilizzando maggiori risorse durante un picco di utilizzo. Se la tua app di e-commerce basata su cloud registra un picco di utilizzo, puoi impostarla per utilizzare risorse di elaborazione aggiuntive fino a quando il picco non si attenua, quindi disattivare tali risorse. Un'app nativa per il cloud può adattarsi alle maggiori risorse e scalare secondo necessità.

Un'app locale non può scalare dinamicamente.

Multitenancy

Un'app nativa del cloud non ha problemi a lavorare in uno spazio virtualizzato e a condividere risorse con altre app.

Molte app locali non funzionano bene in un ambiente virtuale o non funzionano affatto e richiedono uno spazio non virtualizzato.

Risorse connesse

Un'app locale è abbastanza rigida nelle sue connessioni alle risorse di rete, come reti, sicurezza, autorizzazioni e archiviazione. Molte di queste risorse devono essere codificate in modo rigido e si interrompono se qualcosa viene spostato o modificato.

"La rete e lo storage sono completamente diversi nel cloud. Quando si sente il termine "re-platforming", questo è in genere il lavoro per accogliere i cambiamenti nelle tecnologie di rete, archiviazione e persino database per consentire l'esecuzione dell'app nel cloud ", afferma Kavis di Deloitte.

Tempo morto

La ridondanza nel cloud è maggiore rispetto a quella locale, quindi se un provider di servizi cloud subisce un'interruzione, un'altra regione può rimediare.

Le app locali potrebbero essere pronte per il failover, ma ci sono buone probabilità che se il server si arresta, l'app si blocca con esso.

Automazione

Gran parte del cloud è automatizzato e ciò include la gestione delle app. "I vantaggi della distribuzione nativa del cloud, in particolare la velocità e l'agilità, si basano in modo significativo su un substrato di processi noti, affidabili, comprovati e verificati che vengono eseguiti ripetutamente secondo necessità dagli strumenti di automazione e orchestrazione piuttosto che tramite intervento manuale", afferma Splunk Mann. Gli ingegneri dovrebbero cercare di automatizzare praticamente tutto ciò che fanno più di una volta per consentire ripetibilità, self-service, agilità, scalabilità, audit e controllo.

Le app locali devono essere gestite manualmente.

Design modulare

Le app locali tendono ad essere monolitiche nel design. Sicuramente scaricano un po 'di lavoro nelle biblioteche, ma alla fine è un'unica grande app con un sacco di subroutine. Le app cloud-native sono molto più modulari, con molte funzioni suddivise in microservizi. Ciò consente di spegnerli quando non sono necessari e di distribuire gli aggiornamenti a quel modulo, piuttosto che all'intera app.

Apolidia

La natura liberamente accoppiata del cloud significa che le app non sono legate all'infrastruttura, il che significa che sono apolidi. Un'app nativa del cloud memorizza il proprio stato in un database o in qualche altra entità esterna in modo che le istanze possano andare e venire e l'app può ancora tenere traccia della posizione dell'applicazione nell'unità di lavoro. “Questa è l'essenza del debolmente accoppiato. Il fatto di non essere legato all'infrastruttura consente a un'applicazione di funzionare in modo altamente distribuito e di mantenere il proprio stato indipendentemente dalla natura elastica dell'infrastruttura sottostante ", afferma Kavis.

La maggior parte delle app locali sono stateful, ovvero archiviano lo stato dell'app nell'infrastruttura su cui viene eseguito il codice. L'app può essere interrotta quando si aggiungono risorse del server a causa di ciò.

Le sfide del cloud-native computing

Uno dei grandi errori commessi dai clienti è cercare di trasferire e trasferire le loro vecchie app locali nel cloud, afferma Mann. "Il tentativo di prendere le applicazioni esistenti, in particolare le applicazioni legacy monolitiche, e spostarle su un'infrastruttura cloud non trarrà vantaggio dalle funzionalità cloud native essenziali".

Invece, dovresti cercare di fare cose nuove in modi nuovi, inserendo nuove applicazioni native del cloud nella nuova infrastruttura cloud o rompendo i monoliti esistenti per rifattorizzarli utilizzando i principi nativi del cloud da zero.

Devi anche fare a meno dei tuoi vecchi metodi di sviluppo. Il modello a cascata di certo non funzionerà e anche lo sviluppo agile potrebbe non essere sufficiente. Pertanto, è necessario adottare nuovi approcci nativi per il cloud come sviluppo MVP (minimum viable product), test multivariati, iterazione rapida e lavorare a stretto contatto oltre i confini dell'organizzazione in un modello devops.

Ci sono molti aspetti nell'essere cloud-native, inclusi servizi di infrastruttura, automazione / orchestrazione, virtualizzazione e containerizzazione, architettura dei microservizi e osservabilità. Tutto ciò significa un nuovo modo di fare le cose, il che significa rompere le vecchie abitudini mentre impari i nuovi modi. Quindi fallo a un ritmo misurato.

Ulteriori informazioni sulle tecnologie cloud native correlate

  • Spiegazione di Platform-as-a-Service (PaaS)
  • Multicloud spiegato
  • Spiegazione della metodologia agile
  • Best practice per lo sviluppo agile
  • Devops ha spiegato
  • Best practice di Devops
  • Microservizi spiegati
  • Tutorial sui microservizi
  • Spiegazione dei container Docker e Linux
  • Tutorial su Kubernetes
  • Spiegazione di CI / CD (integrazione continua e consegna continua)
  • Best practice per CI / CD