Il serverless computing è un modello di esecuzione basato sul cloud che consente di ospitare le applicazioni come servizio, senza bisogno di mantenere un server.

Il provider del servizio mantiene l’allocazione delle risorse sul server e all’utente vengono addebitati i costi in base all’utilizzo effettivo. L’attenzione si sposta sull’applicazione principale che si sta creando e l’infrastruttura è gestita esclusivamente dal provider del servizio. Il serverless computing è anche noto come Function as a Service (FaaS).

In altre parole, PHP Serverless è l’implementazione del serverless computing con un backend PHP, per fare un esempio.

In questa guida esamineremo da vicino il significato di Serverless PHP, le sue principali caratteristiche, i pro e i contro, per darvi una migliore comprensione di questo approccio al cloud computing.

In particolare, esamineremo il concetto di serverless computing, i suoi casi d’uso e la sua portata, i vantaggi e gli svantaggi, una semplice implementazione del Serverless PHP con Bref e lo stato del Serverless PHP sui big three (Amazon, Microsoft e Google).

Pronti? Cominciamo!

Tradizionalmente, era necessario l’hardware di un server per configurare un’applicazione su Internet. La macchina server (o le macchine) sarebbe stata fisicamente connessa a Internet per consentire a qualcuno di accedere all’applicazione. La manutenzione del server era un affare costoso.

Successivamente, l’evoluzione dei servizi di hosting ha permesso ai webmaster di acquistare spazio di hosting – ogni server poteva contenere più applicazioni. Questo ha abbassato i costi.

Con la crescita del cloud computing, le economie di scala hanno ridotto notevolmente i costi, dato che è stato possibile affittare una piccola quantità di spazio su una grande server farm remota. Infatti, il serverless computing consente di pagare solo i servizi utilizzati. Quando non viene utilizzato, praticamente non si utilizza alcuno spazio o risorsa sul cloud.

Il serverless computing semplifica il processo di sviluppo del software: consente ad un’organizzazione di focalizzarsi esclusivamente sullo sviluppo senza preoccuparsi della distribuzione, della manutenzione del server e dello scaling.

Serverless PHP: Le Basi

Tendenze per il termine "serverless" su Google
Tendenze per il termine “serverless” su Google

Per implementare un’applicazione PHP serverless, si dovrebbe prima approfondire il concetto di serverless computing. Mentre il termine serverless è apparso per la prima volta in questo articolo del 2012 sul futuro dello sviluppo del software di ReadWrite, ha guadagnato popolarità con il lancio di AWS Lambda nel 2014.

In questa sezione, concentriamoci su alcuni concetti chiave del serverless computing, e cerchiamo di rispondere a una domanda frequente che aleggia intorno a questa tecnologia: è davvero server-“less”?

Caratteristiche di Serverless PHP

L’implementazione è un task facile senza gestire il server. È sufficiente caricare il codice sul server e di tutto il resto si occupa il provider. La tecnologia serverless consente di avere funzioni indipendenti dal linguaggio che interagiscono tra loro.

Ad esempio, se avete un’applicazione di messaggistica, il modulo di login può essere codificato in un linguaggio e la funzione che aggiorna il vostro stato può essere codificata in un altro linguaggio.

Senza l’hosting serverless, anche se questo è possibile, è sicuramente più complesso. Ogni volta che un’azione attiva la vostra funzione, si riproduce un’istanza per gestirla.

Questo processo di riproduzione di un’istanza può essere “caldo”, dove si utilizza un’istanza esistente, o “freddo”, dove si inizia una nuova istanza. In questo processo c’è un leggero ritardo, soprattutto una partenza a freddo, rispetto all’hosting tradizionale, dove il vostro server è sempre in modalità standby per gestire le richieste.

Tuttavia, la situazione tra l’hosting serverless e quello tradizionale diventa esattamente l’opposto quando si hanno un gran numero di richieste da gestire. La scalabilità è intrinseca alla tecnologia serverless. Se avete un’improvvisa richiesta di mille richieste simultanee, il provider le gestirà senza alcuno sforzo o configurazione supplementare da parte vostra.

Il PHP Serverless è Davvero Serverless?

Non lasciatevi confondere dal termine “serverless”. Non significa che il “server” non esista. Quando usate un’applicazione serverless, c’è un server in background che elabora i vostri input e calcola l’output necessario.

Il “-less” è presente nel termine dal punto di vista dello sviluppatore, che non è mai esposto a vari elementi del server. Pertanto, se effettuate il deploy di un’applicazione PHP serverless, c’è un vero e proprio server in esecuzione sul cloud che provvede alle richieste.

BaaS vs Architetture Serverless

  • Sebbene il “serverless computing” non sia rigidamente definito, può anche riferirsi ad applicazioni BaaS (Backend as a Service). BaaS si riferisce anche ad un modello di cloud computing in cui le operazioni del server sono esternalizzate a terzi e uno sviluppatore deve solo concentrarsi sulla creazione e la manutenzione del software.
  • La principale somiglianza tra BaaS e Serverless è il fatto che lo sviluppatore non si concentra sulla gestione dei server. Molte organizzazioni forniscono pacchetti BaaS e FaaS sotto lo stesso ombrello.
  • Ecco le principali differenze tra BaaS e il serverless computing:
  • Componenti: Le applicazioni BaaS sono simili alle loro controparti tradizionali, uno sviluppatore non può apportare modifiche alla sua struttura affinché si adatti al BaaS. In serverless, l’applicazione è divisa in parti logiche chiamate funzioni, e ognuna di queste funzioni risponde ad un evento ed esegue un compito specifico.
  • Scalabilità: La scalabilità è una componente cruciale in un’applicazione serverless – vengono allocate più risorse con un aumento del traffico. Non è un modulo necessario per le applicazioni BaaS, anche se alcuni provider di servizi lo forniscono come componente aggiuntivo.
  • Trigger: Un’applicazione serverless è guidata dagli eventi, il che significa che una particolare attività attiva l’applicazione ogni volta che si verifica. D’altra parte, un’applicazione BaaS può essere in esecuzione in background utilizzando le risorse in modo continuo come un’applicazione tradizionale.
  • Architettura modulare: nell’architettura serverless, è possibile che varie funzioni di un’applicazione risiedano e girino su diversi server, ma funzionano senza problemi grazie alla loro integrazione. Un’applicazione BaaS può seguire o meno questa struttura.

Serverless PHP: Casi d’Uso

Abbiamo analizzato vari aspetti del serverless computing e di come sia diverso dal BaaS. Anche se abbiamo trattato le basi del serverless computing, analizziamo le situazioni in cui si possa preferire una tale architettura.

Forse vi siete resi conto che potrebbe non essere una buona idea ospitare applicazioni complesse su tecnologie serverless. Tuttavia, anche se decidete di non eseguire il deploy di un’applicazione completa attraverso il Serverless PHP, è possibile eseguire il deploy di moduli.

In questa sezione presenteremo due esempi di implementazione di uno stack serverless: database e file storage.

Un database serverless è un database on-demand che consente di eseguire query ogni volta che se ne ha bisogno. Scalare è facile grazie allo stack serverless e il provider vi addebita i costi solo per il tempo in cui utilizzate la risorsa.

Amazon Aurora e Google Cloud Datastore sono esempi di database serverless disponibili oggi sul mercato. Un sistema di file storage serverless è implementato come archivio di oggetti. I file non sono trattati come nella gerarchia di un file system, ma come oggetti che contengono i dati del file stesso e i suoi metadati. L’archiviazione e il recupero avvengono tramite un’API tipo REST.

IBM Cloud fornisce un servizio di archiviazione di oggetti. Altri casi di uso comune di applicazioni serverless sono le API e i backend mobili, il cui design si basa su piccole funzioni logiche interdipendenti.

Serverless PHP: Vantaggi

In questa sezione, esaminiamo i principali vantaggi del serverless computing e il motivo per cui sta guadagnando terreno negli ultimi anni.

Riduzione dei Costi del Server

Teoricamente, il serverless computing genera costi inferiori rispetto all’hosting tradizionale. La ragione intrinseca è semplice: si utilizza il servizio per periodi di tempo specifici e non ci sono costi di manutenzione durante i periodi di inattività. Tuttavia, se si deve affrontare un traffico costante nel tempo, l’adozione di un’architettura serverless potrebbe non portare a grandi differenze di costi.

Più Facile da Implementare

Il deployment di un servizio serverless non richiede l’impostazione e la configurazione del server. Il deployment di un’applicazione senza server avviene anche attraverso semplici funzioni. È più facile creare una versione dell’applicazione e renderla disponibile sul cloud. L’intero processo di implementazione, quindi, è più facile e più efficiente.

Scalabilità

In una configurazione tradizionale, è necessario fare molti sforzi per aumentare il traffico. D’altra parte, il fornitore del servizio si occupa dell’allocazione delle risorse in caso di aumento del traffico. Di conseguenza, è più facile scalare quando si implementa un’architettura serverless.

Serverless PHP: Svantaggi

Sebbene il serverless computing abbia la sua buona serie di vantaggi, bisogna essere consapevoli dei suoi potenziali svantaggi prima di pensare di adottarlo.

Prestazioni

Il problema principale che gli utenti evidenziano con il serverless computing è il calo delle prestazioni. Anche se è guidato dagli eventi, ci vogliono alcune centinaia di millisecondi per generare una micro-instanza per soddisfare una richiesta.

Questo ritardo può rivelarsi significativo per applicazioni in cui il tempo è una variabile critica. Con l’aumento della complessità di un’applicazione, i componenti che risiedono in vari luoghi aggiungono ritardo. Questo ritardo aggiuntivo può rivelarsi dannoso per l’esperienza dell’utente.

(Lettura suggerita: Introduzione alla Creazione di Siti Web con Gatsby e WordPress)

Vincolati al Fornitore

Sebbene l’architettura serverless consenta di concentrarsi esclusivamente sul codice, il provider ha il controllo totale dell’infrastruttura. Di conseguenza, non è possibile cambiare provider se non si dispone di un server, perché la migrazione può essere difficile.

Debugging

I provider si occupano della distribuzione end-to-end delle applicazioni serverless. Pertanto, uno sviluppatore deve dipendere dal provider che gli fornisca i log appropriati per il debug. Anche il processo di debug di un’applicazione serverless è difficile.

Serverless PHP: Iniziare con Bref su Lambda

Fino ad ora abbiamo esplorato l’architettura serverless, ora vedremo cosa serve per il deploy di un’applicazione PHP attraverso un servizio serverless.

Come avrete già intuito, il deployment di un’applicazione senza server è fortemente specifica del provider. Pertanto, questo articolo cerca di guidare nelle implementazioni di un’applicazione PHP serverless su Amazon AWS. Bref, o brief in francese, è un pacchetto Composer che permette di implementare applicazioni PHP su AWS attraverso Lambda.

Bref è in continua evoluzione, quindi probabilmente dovreste controllare la matrice di maturità di Bref per valutare se è una buona idea portare la vostra applicazione su un’architettura serverless.

Pre-Requisiti per PHP Serverless con Bref

Per prima cosa, andate su Amazon AWS e create un account. Ne avrete bisogno per distribuire la vostra applicazione. Successivamente, è necessario installare il framework serverless per gestire la vostra distribuzione.

npm install -g serverless

Successivamente, generate la vostra coppia di chiavi pubblica-privata su AWS e configurate il framework serverless in locale.

serverless config credentials --provider aws --key  --secret

Quindi installate Bref attraverso Composer:

composer require bref/bref

Prima del deployment, avrete bisogno di installare le dipendenze di Composer:

composer install --prefer-dist --optimize-autoloader --no-dev

Creare un’Applicazione Hello World su Serverless PHP con Bref

Per creare una semplice applicazione hello world con Bref, scriveremo una funzione che viene attivata da un evento e restituisce la stringa “Hello World”.

Per prima cosa, è necessario includere lo script autoload.php di Bref e poi utilizzare la sua funzione lambda. Se desiderate accedere ai dati dal contesto, potete facoltativamente dichiarare una variabile di contesto.

require __DIR__.'/vendor/autoload.php';
lambda(function ($event) {
 return 'Hello world');
});

Quando la funzione è pronta, è necessario creare un file di configurazione serverless.yml. Ecco un file di configurazione di base tratto dalla guida di Bref.

service: app
provider:
 name: aws
 runtime: provided
plugins:
 - ./vendor/bref/bref
functions:
 hello:
 handler: index.php
 layers:
 - ${bref:layer.php-73}

Bref crea automaticamente questo file di configurazione quando si esegue questo comando.

vendor/bin/bref init

Ora che avete la vostra funzione e la configurazione, potete invocare la funzione per verificare che funzioni come previsto utilizzando il comando invoke del pacchetto serverless:

serverless invoke -f hello

Ecco una guida sulla distribuzione locale delle applicazioni serverless tramite riga di comando sam di AWS. Una volta che il progetto è pronto, è possibile distribuirlo utilizzando il comando deploy di serverless. Utilizzate l’opzione --verbose per avere i dettagli della procedura di distribuzione:

serverless deploy

Altre Opzioni di Deployment per PHP Serverless

Bref PHP su AWS Lambda è una scelta molto comune. Tuttavia, ci sono altre soluzioni per le vostre applicazioni PHP Serverless.

Vapor, lanciata da Laravel nel luglio 2019, è una piattaforma di distribuzione serverless per Laravel su AWS Lambda. Vapor converte la vostra applicazione Laravel in una singola funzione lambda. Mentre Azure serverless non supporta ufficialmente PHP, si può comunque fare una prova utilizzando questo esempio di deployment.

Riepilogo

Ecco gli elementi chiave che dovreste prendere da questa guida su PHP Serverless:

  • Prima di prendere in considerazione l’utilizzo di PHP Serverless per la vostra applicazione, siate pienamente consapevoli di cosa sia il serverless computing, quali sono i suoi vantaggi e i suoi svantaggi.
  • Ci sono tre fattori principali da considerare quando si porta la propria applicazione su un framework PHP serverless. Considerate la complessità dell’applicazione, la criticità temporale dei suoi componenti e la futura scalabilità.
  • PHP Serverless è ancora piuttosto nuovo sul mercato. Assicuratevi di eseguire un pilot con Bref su uno dei provider prima di impegnarvi del tutto.

Anche se il serverless sta diventando molto popolare, richiede anche una profonda comprensione della tecnologia per averne davvero un vantaggio.

Shaumik Daityari

Shaumik is a data analyst by day, and a comic book enthusiast by night (or maybe, he's Batman?) Shaumik has been writing tutorials and creating screencasts for over five years. When not working, he's busy automating mundane daily tasks through meticulously written scripts!