Un'introduzione al mondo del cloud

Ottobre 16, 2020

cloud

Se hai ricercato applicazioni e tecnologie native per il cloud, probabilmente ti sei imbattuto nella mappa a questo link

https://landscape.cncf.io/

è la mappa del mondo del cloud. La sua complessità non è incoraggiante: tante categorie e tante tecnologie.

Cerchiamo oggi di definire qualche linea guida per dare un senso a tutto ciò.

Come per qualsiasi altra cosa, se lo scomponi e lo analizzi un pezzo alla volta, scoprirai che non è così complesso e ha molto senso.

In effetti, la mappa è ben organizzata per funzionalità e, una volta capito cosa rappresenta ciascuna categoria, la navigazione diventa molto più semplice.

I quattro strati del paesaggio nativo del cloud

Innanzitutto, eliminiamo tutte le singole tecnologie dal panorama e esaminiamo le categorie.

Esistono diverse "righe" che riflettono i livelli architettonici, ciascuna con il proprio insieme di sottocategorie.

Nel primo livello ci sono gli strumenti per il provisioning dell'infrastruttura, che è la base.

Quindi si passa ad aggiungere gli strumenti necessari per eseguire e gestire app, livelli di runtime e orchestrazione.

Nella parte superiore ci sono gli strumenti per definire e sviluppare la tua applicazione, come i database, creazione di immagini e strumenti CI / CD (Continuous Integration and Deployment).

1.Il livello di fornitura

Il provisioning si riferisce agli strumenti coinvolti nella creazione e nel rafforzamento delle basi su cui sono costruite le applicazioni cloud native.

Copre tutto, dall'automazione della creazione, gestione e configurazione dell'infrastruttura alla scansione, firma e archiviazione delle immagini dei contenitori.

Il provisioning si estende alla sfera della sicurezza fornendo strumenti che consentono di impostare e applicare policies, creare autenticazione e autorizzazione nelle app e piattaforme e gestire la distribuzione delle chiavi.

Nel livello di provisioning, troverai:

  • Strumenti di automazione e configurazione per aiutare gli ingegneri a creare ambienti informatici senza intervento umano.
  • I registri dei container che archiviano i file eseguibili delle app.
  • I framework di sicurezza e conformità che si occupano dell diversi aspetti della sicurezza.
  • La gestione delle chiavi che permettono alla crittografia di garantire che solo gli utenti autorizzati abbiano accesso all’applicazione.

Questi strumenti consentono agli ingegneri di codificare tutte le specifiche dell'infrastruttura, in modo che il sistema possa attivare o disattivare nuovi ambienti a seconda delle necessità, assicurando che siano coerenti e sicuri.

2. Il livello di runtime

Runtime è uno di quei termini che possono creare confusione. Non esiste una definizione rigorosa e può essere utilizzato in modo diverso, a seconda del contesto.

A.In senso stretto, il runtime è una sandbox su una macchina specifica preparata per eseguire un'app, il minimo indispensabile di cui un'app ha bisogno.

B.In senso più ampio, il runtime è qualsiasi strumento di cui l'app necessita per girare.

C.Nel mondo delle app cloud native la definizione di runtime è una via di mezzo, si concentra sui componenti che contano per le app containerizzate: ciò di cui hanno bisogno per eseguire, ricordare e comunicare.

Questi includono:

  • Storage in cloud che forniscono dischi virtualizzati o persistenza per le app containerizzate.
  • Container runtime che offrono vincoli, risorse e sicurezza per i contenitori ed eseguono i file con l'app codificata.
  • Network in cloud cioè la rete su cui i nodi (macchine o processi) di un sistema distribuito sono connessi e comunicano.
3. Il livello di gestione e orchestrazione

Dopo aver automatizzato il provisioning dell'infrastruttura seguendo gli standard di sicurezza e conformità (livello di provisioning) e impostato gli strumenti che l'app deve eseguire (livello di runtime), gli ingegneri devono capire come orchestrare e gestire le loro app.

Il livello di orchestrazione e gestione si occupa del modo in cui tutti i servizi containerizzati (componenti dell'app) vengono gestiti come un gruppo.

Devono identificare altri servizi, comunicare tra loro e coordinarsi. Le app cloud native intrinsecamente scalabili si basano sull'automazione e sulla resilienza, abilitate da questo livello.

In questo livello troverai:

  • Orchestrazione e pianificazione per distribuire e gestire i cluster di container assicurando che siano resilienti e scalabili. In effetti, lo strumento di orchestrazione, nella maggior parte dei casi Kubernetes, è l’elemento che realizza un cluster gestendo i contenitori e l'ambiente operativo
  • Coordinamento in modo che i servizi (componenti dell'app) possano localizzarsi e comunicare tra loro.
  • Chiamata di procedura remota (RPC), una tecnica che consente a un servizio su un nodo di comunicare con un servizio su un nodo diverso connesso tramite una rete.
  • Il proxy di servizio: un intermediario posto tra i servizi attraverso i quali comunicano. L'unico scopo del proxy è quello di esercitare un maggiore controllo sulla comunicazione di servizio, non aggiunge nulla alla comunicazione stessa.
  • Gateway API, un livello di astrazione attraverso il quale le applicazioni esterne possono comunicare.
  • La mesh di servizi: è simile al gateway API nel senso che è un livello di infrastruttura dedicato attraverso il quale le app comunicano, ma fornisce una comunicazione interna da servizio a servizio basata su criteri. Inoltre, può includere qualsiasi cosa, dalla crittografia del traffico alla scoperta dei servizi, all'osservabilità delle applicazioni.
4. Definizione dell'applicazione e livello di sviluppo

Ora passiamo al livello superiore. Come suggerisce il nome, la definizione dell'applicazione e il livello di sviluppo si concentrano sugli strumenti che consentono agli ingegneri di creare app e consentono loro di funzionare. Tutto quanto discusso sopra era relativo alla creazione di un ambiente affidabile e sicuro e alla fornitura di tutte le dipendenze delle app necessarie.

Sotto questa categoria vedrai:

  • Database che consentono alle app di raccogliere dati in modo organizzato.
  • Lo streaming e la messaggistica consentono alle app di inviare e ricevere messaggi (eventi e flussi). Non è un livello di rete, ma piuttosto uno strumento per mettere in coda ed elaborare i messaggi.
  • La definizione dell'applicazione e la compilazione dell'immagine sono servizi che aiutano a configurare, mantenere ed eseguire le immagini dei container (i file eseguibili di un’app).
  • L'integrazione e la distribuzione continue (CI / CD) consentono agli sviluppatori di testare automaticamente che il loro codice funzioni con la base di codice (il resto dell'app) e, se il loro team è abbastanza maturo, automatizzare anche la distribuzione in produzione.

Strumenti in esecuzione su tutti i livelli

Tornando alla panoramica delle categorie (immagine iniziale), esploriamo le due colonne che attraversano tutti i livelli.

L'osservabilità e l'analisi sono strumenti che monitorano tutti i livelli.

Le piattaforme, d'altra parte, raggruppano più tecnologie all'interno di questi livelli in un'unica soluzione, inclusa l'osservabilità e l'analisi.

Osservabilità e analisi

Per limitare le interruzioni del servizio dovrai monitorare e analizzare ogni aspetto della tua applicazione in modo che qualsiasi anomalia venga rilevata e corretta immediatamente. I guasti si verificheranno inevitabilmente in ambienti complessi e questi strumenti contribuiscono a renderli meno impattanti aiutando a identificare e risolvere i guasti il più rapidamente possibile. Poiché questa categoria attraversa e monitora tutti i livelli, si trova sul lato e non è incorporata in un livello specifico.

Qui troverai:

  • Logging per raccogliere i registri degli eventi (informazioni sui processi).
  • Monitoring per raccogliere metriche (parametri di sistema numerici, come la disponibilità della RAM).
  • Tracing che va oltre il monitoraggio e monitora la propagazione delle richieste degli utenti. Ciò è rilevante nel contesto delle mesh di servizi.
  • L'ingegneria del caos: strumenti per testare il software in produzione per identificare i punti deboli e risolverli prima che abbiano un impatto sulla fornitura del servizio.

Piattaforme

Come abbiamo visto, ciascuno di questi moduli risolve un problema particolare. Lo storage da solo non fornisce tutto ciò di cui hai bisogno per gestire la tua app.

Avrai bisogno di uno strumento di orchestrazione, runtime del contenitore, rilevamento dei servizi, networking, gateway API e così via. Coprendo più livelli, le piattaforme raggruppano diversi strumenti insieme per risolvere un problema più ampio.

Configurare e mettere a punto diversi moduli in modo che siano affidabili e sicuri e garantire che tutte le tecnologie che sfrutta siano aggiornate e che le vulnerabilità siano corrette non è un compito facile. Con le piattaforme, gli utenti non devono preoccuparsi di questi dettagli: un vero valore aggiunto.

Probabilmente noterai che tutte le categorie ruotano attorno a Kubernetes. Questo perché Kubernetes, sebbene sia solo un pezzo del puzzle, è al centro dello stack del native cloud. Il CNCF, tra l'altro, è stato creato con Kubernetes come primo progetto di seeding; tutti gli altri progetti sono seguiti in seguito.

Le piattaforme possono essere classificate in quattro gruppi:

  • Distribuzioni Kubernetes prendono il codice open source non modificato (anche se alcuni lo modificano) e aggiungono funzionalità di cui il loro mercato ha bisogno.
  • Kubernetes in hosting (noto anche come Kubernetes gestito) è simile a una distribuzione ma è gestita dal tuo provider sulla propria o sulla tua infrastruttura.
  • I programmi di installazione di Kubernetes sono esattamente questo, automatizzano il processo di installazione e configurazione di Kubernetes.
  • I servizi PaaS / container sono simili a Kubernetes in hosting, ma includono un ampio set di strumenti di distribuzione delle applicazioni (generalmente un sottoinsieme del panorama nativo del cloud).

Conclusione

In ogni categoria, ci sono diversi strumenti volti a risolvere problemi uguali o simili. Alcune sono tecnologie native pre-cloud adattate alla nuova realtà, mentre altre sono completamente nuove. Le differenze risiedono nella loro implementazione e approcci progettuali. Non esiste una tecnologia perfetta che controlli tutte le scatole. Nella maggior parte dei casi la tecnologia è limitata dal design e dalle scelte architettoniche: c'è sempre un compromesso.

Quando si seleziona lo stack, gli ingegneri devono considerare attentamente ogni capacità e compromesso per identificare l'opzione migliore per il loro caso d'uso.

Sebbene ciò comporti ulteriore complessità, non è mai stata possibile come oggi la scelta di uno storage dei dati, della gestione dell'infrastruttura, del sistema di messaggistica, ecc. che meglio si adattano alle esigenze dell'applicazione.

L'architettura dei sistemi oggi è molto più semplice che in un mondo pre-cloud. E, se progettate in modo appropriato, le tecnologie cloud native offrono la grande e necessaria flessibilità di cui c’è bisogno.

Nell’ecosistema tecnologico in rapida evoluzione dei nostri tempi, questa è probabilmente una delle capacità più importanti.

Ci auguriamo che questa rapida panoramica sia stata utile.

Articolo liberamente tradotto da

https://thenewstack.io/an-introduction-to-the-cloud-native-landscape/

Un'introduzione al paesaggio nativo del cloud - a cura di Catherine Paganini

© 2022 All rights reserved