By info@ediscere.it |

Cloud nativo

Le tecnologie native del cloud consentono creare ed eseguire applicazioni scalabili in ambienti moderni e dinamici.


Note: Cloud Native

Definizioni e Reference

https://docs.microsoft.com/it-it/dotnet/architecture/cloud-native/definition

Cloud Native Computing Foundation fornisce la definizione ufficiale or https://github.com/cncf/toc/blob/main/DEFINITION.md:


Le tecnologie native del cloud consentono alle organizzazioni di creare ed eseguire applicazioni scalabili in ambienti moderni e dinamici, ad esempio cloud pubblici, privati e ibridi. I contenitori, mesh di servizi, i microservizi, l'infrastruttura e le API esemplificano questo approccio.


 

URL e Siti web

Componenti principali del Cloud native

  • Implementazione delle prassi o del modello DevOps
  • Infrastruttura basata su container
  • Architettura costruita attorno ai microservizi
  • Utilizzo del modello CI/CD (integrazione continua e dell'erogazione continua)

image-20220513134332-1

Pets vs Cattle: Animali domestici vs bestiame

La nozione di animali domestici contro bestiame è uno dei concetti cardine per il modello di servizio del DevOps.
Nel modello di servizio pets, ad ogni pet server viene dato un nome affettuoso come zeus, ares, hades, poseidon e athena. Sono "unici, amorevolmente allevati a mano e curati, e quando si ammalano, li curate per farli tornare in salute". Li si potenzia rendendoli più grandi, e quando non sono disponibili, tutti se ne accorgono.

Esempi di pet server includono mainframe, server solitari, bilanciatori di carico e firewall, sistemi di database e così via.
Nel modello di servizio bestiame, ai server vengono dati numeri di identificazione come web01, web02, web03, web04 e web05, allo stesso modo in cui al bestiame vengono dati numeri attaccati all'orecchio. Ogni server è "quasi identico all'altro" e "quando uno si ammala, lo si sostituisce con un altro". Li si scala generandone di più, e quando uno non è disponibile, nessuno se ne accorge.

Esempi di server bestiame includono array di server web, cluster no-sql, cluster di accodamento, cluster di ricerca, cluster di caching reverse proxy, datastore multi-master come Cassandra, soluzioni cluster di big-data, e così via.

Evoluzione del modello Cattle (bestiame)

Il modello di servizio del bestiame si è evoluto dall'età del ferro (server montati a rack in bare metal) all'età del cloud (server virtualizzati programmabili attraverso un'interfaccia web).
 

The Iron Age

Si è avuta l'introduzione della virtualizzazione hardware che ha dato origine ai sistemi di gestione del server. Sono stati sviluppati ed utilizzati gli strumenti di configurazione delle modifiche, che hanno consentito le operazioni di configurazione di gruppi di sistemi in modo automatico.

The First Cloud Age

Creazione di servizi cloud IaaS (Infrastructure as a Service) che hanno virtualizzato l'intera infrastruttura (reti, storage, memoria, cpu) in risorse programmabili. Piattaforme popolari che offrono IaaS sono Amazon Web Services (2006), Microsoft Azure (2010), Google Cloud Platform (2011).

The Second Cloud Age

Abbiamo i primi movimenti per virtualizzare o partizionare alcuni aspetti del sistema operativo (processi, rete, memoria, file system). Ciò permette alle applicazioni di essere segregate nel proprio ambiente isolato senza la necessità di dover virtualizzare l'hardware. Alcune di queste tecnologie includono OpenVZ (2005), Linux Containers o LXC (2008), e Docker (2015)
 
L'introduzione dei container è diventata esplosiva con Docker che è diventato un ecosistema onnipresente di per sé. Una nuova serie di tecnologie si è evoluta per allocare le risorse per i contenitori e programmare questi contenitori su un cluster di server: Apache Mesos (2009), Kubernetes (2014), Nomad (2015), Swarm (2015).
 
 
L'ecosistema attuale
 
Per le soluzioni di orchestrazione dei container, Kubernetes è ora l'ecosistema predominante con implementazioni su piattaforme cloud popolari: Google Kubernetes Engine (GKE), Azure Container Service (AKS), e presto AWS Elastic Container Service (EKS).

Nello spazio dei big-data o dello streaming con piattaforme distribuite - Spark, Kafka, Flink, Storm, Hadoop, Cassandra, Samza, Akka, Finagle, Heron, per nominarne solo alcuni -
 
l'ecosistema Apache Mesos è divenuto popolare. Mesosphere e DC/OS sono piattaforme che sfruttano Mesos per creare un sistema completo per orchestrare questi cluster. C'è il supporto per orchestrare anche Kubernetes come cluster sopra DC/OS, dandovi accesso a entrambe le piattaforme. Ora è possibile programmare Kubernetes per programmare le applicazioni che utilizzano i cluster di big data programmati da DC/OS.
 

App cloud native

Cloud-Native Design
(Figura da Introduzione alle applicazioni cloud native https://docs.microsoft.com/it-it/dotnet/architecture/cloud-native/introduction)
l'applicazione viene decomposta in un set di microservizi isolati di piccole dimensioni. Ogni servizio è autonomo e incapsula il proprio codice, i dati e le dipendenze. Ogni oggetto 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 di un archivio dati. Il servizio gateway API è responsabile del routing del traffico verso i servizi back-end principali.
L'incarnazione moderna dell'approccio orientato ai servizi viene spesso definita architettura a microservizi. Le moderne architetture applicative sono composte da servizi che comunicano attraverso eventi e API, con l'inserimento della logica di business. Definiamo i microservizi come piccoli servizi autonomi e completamente indipendenti costruiti intorno a un particolare scopo o capacità aziendale. Idealmente, i microservizi dovrebbero essere facilmente sostituibili e ogni servizio dovrebbe essere scritto in un framework e in un linguaggio appropriati.
E se i microservizi sono correttamente disaccoppiati, i team di sviluppo possono lavorare e distribuire i microservizi indipendentemente l'uno dall'altro. Questo approccio, che consiste nel costruire e distribuire le applicazioni come una collezione di servizi liberamente accoppiati, è considerato oggi l'approccio predefinito allo sviluppo nel cloud (l'approccio "cloud native", se volete).

Le architetture Serveless

Un'architettura serverless utilizza servizi esistenti di provider cloud come AWS per implementare i suoi componenti architetturali. Ad esempio, AWS offre servizi per costruire le primitive delle nostre applicazioni, come API (Amazon API Gateway), flussi di lavoro (AWS Step Functions), code (Amazon Simple Queue Service), database (Amazon DynamoDB e Amazon Aurora) e altro ancora.

L'idea di utilizzare servizi esterni per implementare parti della nostra architettura non è nuova, anzi è una best practice fin dai tempi della SOA. Ciò che è cambiato negli ultimi anni è la possibilità di implementare anche gli aspetti personalizzati delle nostre applicazioni (come la logica aziendale) in modo serverless.

Le funzioni e le architetture serverless, in generale, sono versatili. Possono essere utilizzate per creare backend per applicazioni CRUD, e-commerce, sistemi di back-office, applicazioni web complesse e tutti i tipi di software mobile e desktop. I progetti serverless più flessibili e potenti sono event-driven, il che significa che ogni componente dell'architettura reagisce a un cambiamento di stato o a una notifica di qualche tipo, anziché rispondere a una richiesta o eseguire il polling delle informazioni.

Poiché ogni componente è un servizio, le architetture serverless condividono molti vantaggi e complessità con le architetture di microservizi event-driven. Ciò significa anche che le applicazioni devono essere progettate per soddisfare i requisiti di questi approcci (come ad esempio rendere i singoli servizi stateless). L'approccio serverless consiste nel ridurre la quantità di codice da gestire e mantenere, in modo da poter iterare e innovare più velocemente. Per ottenere ciò bisogna cercare di ridurre al minimo il numero di componenti necessari per costruire l'applicazione. I passaggio da un approccio monolitico a un approccio serverless più decentralizzato non riduce automaticamente la complessità del sistema sottostante. Quindi è necessario ridurre al minimo il codice personalizzato, ciò lo si ottiene perchè molti componenti standard delle applicazioni, come API, flussi di lavoro, code e database, sono già disponibili come offerte serverless da parte di provider cloud e terze parti.

GO il linguaggio per il cloud native

Alcuni esempi di una nuova generazione di tecnologia, cloud native, come Docker per costruire container e Kubernetes per orchestrarli, Prometheus ci permette di monitorarli, Consul ci permette di scoprirli, Jaeger ci permette di tracciare le relazioni tra di loro. sono tutti strumenti scritti in Go.
Linuxteaching | Come creare una semplice applicazione in Go Language
Docker Logos - Docker Kubernetes su AWS | Amazon Web Services Prometheus (software) - Wikipedia image-20220512162157-1 Jaeger: open source, end-to-end distributed tracing

 

 
Il termine "nativo del cloud" sembra ambiguo e un po' troppo " alla moda", ma in realtà ha una definizione abbastanza specifica. Secondo la Cloud Native Computing Foundation, una sotto-fondazione della rinomata Linux Foundation, un'applicazione cloud native è un'applicazione progettata per essere scalabile di fronte a un carico che cambia rapidamente, resiliente di fronte all'incertezza ambientale e gestibile di fronte a requisiti in continua evoluzione.
 
Go è stato creato circa un decennio fa come il primo grande linguaggio progettato specificamente per lo sviluppo di software cloud native. Questo in gran parte perché i comuni linguaggi server in uso all'epoca semplicemente non erano adatti a scrivere il tipo di applicazioni distribuite