Ottimizzazione del networking (2ª generazione)
La semplicità di Cloud Functions consente di sviluppare rapidamente il codice ed eseguirlo in completamente serverless. Su scala moderata, il costo di esecuzione delle funzioni è basso, e l'ottimizzazione del codice potrebbe non sembrare una priorità elevata. Quando il deployment fa lo scale up, ma l'ottimizzazione del codice diventa sempre più importante.
Questo documento descrive come ottimizzare il networking per le tue funzioni. Alcuni di i vantaggi dell'ottimizzazione del networking sono i seguenti:
- Riduci il tempo di CPU impiegato per stabilire nuove connessioni in uscita a ogni di funzione.
- Riduci la probabilità di esaurire la connessione o il DNS quote di spazio di archiviazione.
Mantenimento di connessioni persistenti
Questa sezione fornisce esempi di come mantenere le connessioni permanenti in un personalizzata. 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 gestire le connessioni permanenti anziché creare una nuova connessione a ogni chiamata di funzione:
Node.js
Python
Vai
PHP
Ti consigliamo di utilizzare Guzzle PHP HTTP Framework di inviare richieste HTTP, poiché gestisce le connessioni 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 oppure Cloud Spanner. Tieni presente che il rendimento miglioramenti possono dipendere dall'implementazione corrente di un particolare client librerie.
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 il metodo Oggetto client Pub/Sub in ambito globale, come mostrato nell'esempio riportato di seguito:
Node.js
Python
Vai
Reimpostazione della connessione in uscita
I flussi di connessioni dalla funzione a VPC e a internet possono essere terminati occasionalmente e sostituiti al riavvio dell'infrastruttura sottostante o aggiornato. Se la tua applicazione riutilizza connessioni di lunga durata, ti consigliamo di configurare l'applicazione per ristabilire le connessioni evitare il riutilizzo di una connessione inattiva.
Test di carico della funzione
Per misurare il numero di connessioni eseguite in media dalla funzione, è sufficiente eseguire il deployment come funzione HTTP e utilizzare un framework di test delle prestazioni per richiamarla alcune QPS. Puoi scegliere Artillery, che può richiamare con una sola 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 sulla Pagina delle quote dell'API Cloud Functions nella console Cloud. Se l'utilizzo è costantemente intorno ai 30 (o i suoi multipli), stabilisce una (o più) connessioni in ogni chiamata. Dopo ottimizzare il codice, dovresti notare alcune (10-30) connessioni solo all'inizio del test.
Puoi anche confrontare il costo della CPU prima e dopo l'ottimizzazione grafico della quota di spazio di archiviazione sulla stessa pagina.