Introduzione al server less on-premises con Function as a Service utilizzando OpenFaaS e Go

l paradigma Function as a Service (FaaS) consente agli sviluppatori di concentrarsi sul codice riducendo le preoccupazioni relative all’infrastruttura. Di conseguenza, le applicazioni che possono essere specificamente distribuite come FaaS o utilizzare elementi di FaaS riescono solitamente a raggiungere il mercato più velocemente rispetto a metodi alternativi di rappresentazione e incapsulamento della funzionalità chiamabile.

In questo articolo, con l’obiettivo di descrivere in dettaglio le funzionalità di OpenFaaS, esamineremo i concetti di base del FaaS e di OpenFaaS e configureremo un primo ambiente di laboratorio per eseguire una prova di concetto della piattaforma serverless OpenFaaS.

In articoli successivi, esploreremo l’uso di OpenFaaS per invocare funzioni personalizzate in Go, l’utilizzo di Kafka per attivare funzioni OpenFaaS e l’uso di template per migliorare le nostre pratiche di sviluppo.

In ulteriori articoli, approfondiremo la scalabilità di OpenFaaS e i suoi componenti ed ecosistemi necessari.

Cos’è FaaS?

Il FaaS può essere considerato un sotto-concetto del paradigma serverless, in cui il serverless può essere visto come una modalità in cui:

  • L’esperienza dello sviluppatore (devx) richiede lo sviluppo di piccole unità di codice e una necessità minima o nulla di orchestrare l’infrastruttura direttamente.
  • Vengono sviluppate funzioni o microservizi.
  • La scalabilità e il parallelismo possono essere forniti “just-in-time” e facilitati dal software infrastrutturale.
  • Il codice degli sviluppatori è portabile tra diverse infrastrutture FaaS.

In questo caso, la concentrazione sulla funzione genera un carico ridotto sulla gestione del software per lo sviluppatore, un focus su unità di codice più piccole che sono più incentrate sul valore aziendale, una tendenza a essere guidate da eventi o guidate da un endpoint come REST/HTTP e una comprensione presumibilmente migliorata grazie a questi fattori e al fatto che le interfacce delle funzioni sono isomorfe.

Le offerte serverless sono in genere offerte SaaS o possono essere distribuite on-premise e in genere su un cluster Kubernetes. L’attuale moda CNCF è quella di seguire le best practice di ciò che è diventato noto come Serverless 2.0.

What is Serverless 2.0?

Serverless 2.0 solleva la questione su cosa sia/fosse Serverless 1.0.

Le prime offerte FaaS Serverless 1.0 supportate dai fornitori cloud (come AWS Lambda), ora denominate retrospettivamente, in genere affrontavano una serie di problemi; il più saliente dei quali includeva limiti all’esperienza degli sviluppatori; quindi, mancanza di standardizzazione tra i fornitori, barriere alla portabilità, flessibilità e così via. Un buon riferimento a questi problemi può essere trovato in [1]

Per aiutare ad affrontare alcune di queste preoccupazioni, CNCF ha definito un semplice contratto per Serverless 2.0. Il contratto è semplice e promuove la portabilità, stabilisce che:

  • Sono utilizzate immagini di container compatibili con OCI
  • Viene utilizzato un server HTTP sulla porta 8080
  • Configurato da variabili di ambiente.

Cos’è OpenFaaS?

OpenFaas promuove il principio di eseguire il codice ovunque con la stessa esperienza unificata. Fornisce un archivio di funzioni e un sistema di creazione di modelli che consente di avviare rapidamente Serverless FaaS on-prem, on-cloud o persino sul laptop di sviluppo. È disponibile un connector-sdk per creare connettori golang personalizzati.

Esistono altre soluzioni installabili on-prem o Cloud Native. Tra i player più noti ci sono Google Cloud Functions e KNative.

Perché Go?

Go è diventato associato al soprannome di linguaggio di programmazione cloud nativo. È stato originariamente progettato da Google nel 2007 per affrontare problemi idiomatici di sviluppo e manutenzione di progetti software distribuiti e della loro evoluzione nel tempo. Probabilmente altri linguaggi come Rust generano qualità simili; tuttavia, ho selezionato Go per questo sforzo poiché attualmente lo sto utilizzando ampiamente per i progetti cloud privati ​​di k8s.