nanoservizi-atSistemas

Anticipated Compilation e Nanoservizi

Attualmente, l’adozione di soluzioni software basate su servizi forniti dai Cloud Providers sono una realtà, ma sorgono domande sul fatto che i linguaggi di programmazione utilizzati siano idonei per l’implementazione di soluzioni informatiche sul Cloud Computing.

I fornitori cloud hanno un catalogo di servizi che consentono alle aziende di progettare, distribuire o migrare ed eseguire la maggior parte delle applicazioni/sistemi che compongono il business di molte aziende in soluzioni Cloud Native. Il concetto di soluzione Cloud Native è legato all’idea di costruire ed eseguire applicazioni che sfruttano il calcolo distribuito per sfruttare la scalabilità, resilienza e flessibilità offerta dai diversi fornitori di Cloud Pubblici o Privati (on-premise).

Il cloud e le sue molteplici Applicazioni

Oggi i Servizi Cloud possono essere forniti in più modi, come Infrastructure as a Service (IaaS), Platform as a Service (PaaS) and Software as a Service (SaaS) tra gli altri. Questo è possibile mediante l’uso e l’adozione di diversi linguaggi di programmazione da parte della comunità tecnologica.

I linguaggi di programmazione più utilizzati nella progettazione di questo tipo di soluzioni sono quelle che usano una compilazione Just-in-Time (JIT) in cui il codice sorgente viene compilato in bytecode e “l’interprete” (la macchina virtuale) lo elabora in runtime.

Linguaggi di programmazione: “Just-In-Time” e “Ahead-of-Time”

In Java abbiamo C1 e C2 come parte del noto “OpenJDK”, che ha molteplici vantaggi nello sviluppo di applicazioni Cloud Native, come l’indipendenza dalla piattaforma per la sua esecuzione.

Tuttavia, dobbiamo tener conto delle implicazioni che ci sono nell’esecuzione di soluzioni altamente scalabili, come l’uso delle risorse e il tempo di esecuzione ed i corrispondenti impatti economici.

In alternativa, sono nati i linguaggi di programmazione Ahead-of-Time (AOT) che generano un file eseguibile nativo per la piattaforma in cui eseguiamo il software.

La differenza è che la compilazione AOT sposta il lavoro di compilazione a Nativo da Just in Time a Build Time richiedendo perciò di dover analizzare molte volte anche altre varianti per ottimizzare il codice generato (ad esempio librerie, risorse, etc).

I vantaggi forniti dall’AOT vs JIT sono:

Tempo di esecuzione

  • Utilizzo della memoria
  • Dimensioni dei pacchetti

Tutti questi determinanti nell’ eseguire Soluzioni Native Cloud.

Framework AOT e compilatori nel 2022

Nel 2022 dovremo prestare molta attenzione all’evoluzione di framework e compilatori AOT incluso i seguenti:

  • Java con GraalVM e Quarkus (Red Hat)
  • Golang
  • Python (Shed Skin e micropython)
  • Compilatore AOT angolare

Questo tipo di soluzioni apportano all’Architettura un nuovo concetto di unità di esecuzione nota come “Nanoservizio”.

Nanoservizi, Servizi molto piccoli e altamente scalabili

I nano-servizi sono caratterizzati fondamentalmente da molti servizi di piccola dimensione, in molte occasioni con una singola funzione, che sono altamente scalabili, progettati per essere distribuiti su piattaforme “Serverless” o soluzioni basate su containers come Kubernetes, e consentono di sfruttare il l’Elastic Scaling al 100%.

Le piattaforme Serverless più popolari per l’implementazione di questi servizi sono:

  • Azure Cloud Functions
  • Amazon Lambda Functions
  • Google Cloud Functions

Casi d’uso: Microservizi vs Nano Servizi

I casi d’uso dei microservizi vs. nanoservizi che troviamo nello sviluppo di soluzioni Cloud Native sono:

  • Contesto delimitato ben definito (DDD) vs funzionalità molto specifiche
  • Necessità di ridimensionamento in ogni contesto delimitato vs. scalabilità e disponibilità molto elevate
  • Team differenziati (ciascuno responsabile del proprio microservizio) vs. Implementazione di  funzionalità ad alto valore con un costo di deployment minimo (solitamente considerato un anti-pattern nelle architetture a microservizi).

Per tutto il 2022 vedremo che le soluzioni basate sui compilatori AOT saranno consolidate nel mercato e adottate dalla comunità “techie” sulla base delle richieste dei clienti di ottimizzare i costi di esecuzione dei propri sistemi ed applicazioni.

Saranno sempre più richiesti profili tecnici specializzati, che attualmente sono molto scarsi in una società in cui la tecnologia si evolve ad un ritmo vertiginoso.

Oscar Sanz Sebastián

Head of Technology and Innovation – atSistemas