Ottimizzazione del networking (2ª generazione)
La semplicità di Cloud Functions consente di sviluppare rapidamente il codice ed eseguirlo in un ambiente serverless. Su scala moderata, il costo dell'esecuzione delle funzioni è basso e l'ottimizzazione del codice potrebbe non sembrare una priorità elevata. Con l'aumento del deployment, tuttavia, l'ottimizzazione del codice diventa sempre più importante.
Questo documento descrive come ottimizzare il networking per le tue funzioni. Ecco alcuni vantaggi dell'ottimizzazione del networking:
- Riduci il tempo di CPU impiegato per stabilire nuove connessioni in uscita a ogni chiamata di funzione.
- Riduci la probabilità di esaurire le connessioni o le quotas DNS.
Mantenimento di connessioni permanenti
Questa sezione fornisce esempi di come mantenere le connessioni permanenti in una funzione. In caso contrario, le quote di connessione potrebbero esaurirsi rapidamente.
In questa sezione vengono trattati i seguenti scenari:
- HTTP/S
- API di Google
Richieste HTTP/S
Lo snippet di codice ottimizzato di seguito mostra come mantenere connessioni permanenti invece di creare una nuova connessione a ogni chiamata di funzione:
Node.js
Python
Go
PHP
Ti consigliamo di utilizzare Guzzle PHP HTTP Framework per inviare richieste HTTP, poiché gestisce le connessioni permanenti automaticamente.
Accesso alle API di Google
L'esempio riportato di seguito utilizza Cloud Pub/Sub, ma questo approccio funziona anche per altre librerie client, ad esempio Cloud Natural Language o Cloud Spanner. Tieni presente che i miglioramenti delle prestazioni possono dipendere dall'implementazione corrente di particolari librerie client.
La creazione di un oggetto client Pub/Sub genera una connessione e due query DNS per chiamata. Per evitare connessioni e query DNS non necessarie, crea l'oggetto client Pub/Sub in ambito globale, come mostrato nell'esempio riportato di seguito:
Node.js
Python
Go
Test di carico della funzione
Per misurare il numero di connessioni eseguite in media dalla funzione, è sufficiente eseguirne il deployment come funzione HTTP e utilizzare un framework di test delle prestazioni per richiamarla con un determinato QPS. Una possibilità è Artillery, che puoi richiamare con una singola riga:
$ artillery quick -d 300 -r 30 URL
Questo comando recupera l'URL specificato a 30 QPS per 300 secondi.
Dopo aver eseguito il test, controlla l'utilizzo della quota di connessione nella pagina delle quote dell'API Cloud Functions nella console Cloud. Se l'utilizzo è costantemente intorno ai 30 (o multipli), stai stabilendo una (o più) connessioni in ogni chiamata. Dopo aver ottimizzato il codice, dovresti vedere alcune (10-30) connessioni effettuate solo all'inizio del test.
Puoi anche confrontare il costo della CPU prima e dopo l'ottimizzazione nel grafico delle quote della CPU nella stessa pagina.