Questa pagina descrive come utilizzare le metriche personalizzate con i bilanciatori del carico delle applicazioni. Le metriche personalizzate ti consentono di configurare il comportamento di distribuzione del traffico del bilanciatore del carico in base a metriche specifiche per i requisiti dell'applicazione o dell'infrastruttura, anziché alle metriche di utilizzo o basate su tariffe standard di Google Cloud. La definizione di metriche personalizzate per il bilanciatore del carico ti offre la flessibilità di instradare le richieste delle applicazioni alle istanze e agli endpoint di backend più ottimali per il tuo carico di lavoro.
Il bilanciatore del carico utilizza i valori delle metriche personalizzate per prendere le seguenti decisioni:
- Seleziona il gruppo di istanze di macchine virtuali (VM) di backend o il gruppo di endpoint di rete che deve ricevere il traffico
- Seleziona l'istanza VM o l'endpoint che deve ricevere il traffico
Ecco alcuni casi d'uso di esempio per le metriche personalizzate:
Massimizza l'utilizzo della tua capacità di calcolo globale prendendo decisioni di bilanciamento del carico in base a metriche personalizzate più pertinenti per la tua applicazione, anziché ai criteri predefiniti come l'affinità regionale o la latenza della rete.
Se le tue applicazioni presentano spesso latenze di elaborazione del backend nell'ordine di alcuni secondi, puoi utilizzare la tua capacità di calcolo globale in modo più efficiente bilanciando il carico delle richieste in base a metriche personalizzate anziché alla latenza della rete.
Massimizza l'efficienza di calcolo prendendo decisioni di bilanciamento del carico in base a combinazioni di metriche univoche per il tuo deployment. Ad esempio, immagina uno scenario in cui le tue richieste hanno tempi di elaborazione e requisiti di calcolo molto variabili. In questo scenario, il bilanciamento del carico basato esclusivamente sulla frequenza delle richieste al secondo comporta una distribuzione non uniforme del carico. In questo caso, ti consigliamo di definire una metrica personalizzata che bilanci il carico in base a una combinazione sia della frequenza delle richieste sia dell'utilizzo della CPU o della GPU per utilizzare in modo più efficiente il tuo parco risorse di calcolo.
Scalabilità automatica dei backend in base a metriche personalizzate più pertinenti ai requisiti dell'applicazione. Ad esempio, puoi definire un criterio di scalabilità automatica per eseguire la scalabilità automatica delle istanze di backend quando la metrica personalizzata configurata supera l'80%. Questo risultato viene ottenuto utilizzando le metriche di scalabilità automatica basate sul traffico (
autoscaling.googleapis.com|gclb-capacity-fullness
). Per ulteriori informazioni, consulta Scalabilità automatica in base al traffico del bilanciatore del carico.
Bilanciatori del carico e backend supportati
Le metriche personalizzate sono supportate per i seguenti bilanciatori del carico delle applicazioni:
- Bilanciatore del carico delle applicazioni esterno globale
- Bilanciatore del carico delle applicazioni esterno regionale
- Bilanciatore del carico delle applicazioni interno tra regioni
- Bilanciatore del carico delle applicazioni interno regionale
Le metriche personalizzate sono supportate con i seguenti tipi di backend:
- Gruppi di istanze gestite
- NEG a livello di zona (con endpoint
GCE_VM_IP_PORT
) - NEG connettività ibrida
Come funzionano le metriche personalizzate
Per consentire al bilanciatore del carico di prendere decisioni di distribuzione del traffico in base alle metriche personalizzate, devi prima determinare quali sono le metriche più pertinenti per la tua applicazione specifica. Una volta che sai quali metriche vuoi utilizzare, configura i backend in modo da iniziare a generare un flusso costante di queste metriche per il bilanciatore del carico. Google Cloud ti consente di generare report sulle metriche nell'header di ogni risposta HTTP inviata dai backend al bilanciatore del carico. Queste metriche sono incapsulate in un'intestazione di risposta HTTP personalizzata e devono rispettare lo standard Open Request Cost Aggregation (ORCA).
Le metriche possono essere configurate a due livelli:
- A livello di backend, per influenzare la selezione del backend (MIG o NEG)
- A livello di servizio di backend, per influenzare la selezione di istanze VM o endpoint
Le sezioni seguenti descrivono il funzionamento delle metriche personalizzate.
Determina quali metriche personalizzate influiscono sulle decisioni di bilanciamento del carico
Determinare quali metriche personalizzate influenzano le decisioni di bilanciamento del carico è molto soggettivo e dipende dalle esigenze delle tue applicazioni. Ad esempio, se le tue applicazioni hanno latenze di elaborazione del backend nell'ordine di secondi, ti consigliamo di bilanciare il carico delle richieste in base ad altre metriche personalizzate anziché alle latenze di rete standard.
Dopo aver stabilito quali metriche utilizzare, devi anche determinare la soglia di utilizzo massima per ogni metrica. Ad esempio, se vuoi utilizzare l'utilizzo della memoria come metrica, devi anche determinare la soglia massima di utilizzo della memoria per ogni backend.
Ad esempio, se configuri una metrica denominata example-custom-metric
con la sua
soglia di utilizzo massima impostata su 0,8, il bilanciatore del carico regola dinamicamente
la distribuzione del traffico tra i backend per mantenere la metrica example-custom-metric
registrata dal backend inferiore a 0,8, il più possibile.
Puoi utilizzare due tipi di metriche personalizzate:
Metriche riservate. Esistono cinque nomi di metriche riservate, che sono riservati perché corrispondono a campi predefiniti di primo livello nell'API ORCA.
orca.cpu_utilization
orca.mem_utilization
orca.application_utilization
orca.eps
orca.rps_fractional
Metriche con nome. Si tratta di metriche univoche per la tua applicazione che puoi specificare utilizzando il campo ORCA
named_metrics
nel seguente formato:orca.named_metrics.METRIC_NAME
Tutte le metriche personalizzate definite dall'utente vengono specificate utilizzando questa mappa
named_metrics
nel formato di coppie di nome e valore.
Metriche obbligatorie
Per consentire al bilanciatore del carico di utilizzare metriche personalizzate per la selezione del gruppo di istanze VM o del gruppo di endpoint di rete di backend, devi specificare una o più delle seguenti metriche di utilizzo nel report sul carico ORCA inviato al bilanciatore del carico.
orca.named_metrics
è una mappa di metriche definite dall'utente sotto forma di coppie nome/valore.
orca.cpu_utilization
orca.application_utilization
orca.mem_utilization
orca.named_metrics
Inoltre, per consentire al bilanciatore del carico di utilizzare metriche personalizzate per influenzare ulteriormente la selezione dell'istanza o dell'endpoint VM di backend, devi fornire tutte le seguenti metriche nel report sul carico ORCA inviato al bilanciatore del carico. Il bilanciatore del carico utilizza i pesi calcolati da queste metriche registrate per assegnare il carico ai singoli backend.
orca.rps_fractional
(richieste al secondo)orca.eps
(errori al secondo)- una metrica di utilizzo con il seguente ordine di precedenza:
orca.application_utilization
orca.cpu_utilization
- Metriche definite dall'utente nella mappa
orca.named_metrics
Note aggiuntive:
Esiste un limite di due metriche personalizzate per backend. Tuttavia, puoi eseguire test
dryRun
con un massimo di tre metriche personalizzate.Se vengono fornite due metriche, il bilanciatore del carico le tratta in modo indipendente. Ad esempio, se definisci due dimensioni:
custom-metric-util1
ecustom-metric-util2
, il bilanciatore del carico le tratta in modo indipendente. Se un backend è in esecuzione a un livello di utilizzo elevato in termini dicustom-metric-util1
, il bilanciatore del carico evita di inviare traffico a questo backend. In genere, il bilanciatore del carico cerca di mantenere in esecuzione tutti i backend con lo stesso livello di utilizzo. La pienezza viene calcolata comecurrentUtilization
/maxUtilization
. In questo caso, il bilanciatore del carico utilizza il valore più alto dei due valori di saturazione registrati dalle due metriche per prendere decisioni di bilanciamento del carico.Esiste un limite di due metriche personalizzate per servizio di backend. Tuttavia, puoi eseguire test
dryRun
con un massimo di tre metriche personalizzate. Questo limite non include le metricheorca.eps
eorca.rps_fractional
obbligatorie. Questo limite è indipendente anche dalle metriche configurate a livello di backend.Sia le metriche riservate sia quelle denominate possono essere utilizzate insieme. Ad esempio, in un singolo report sul caricamento possono essere fornite sia
orca.cpu_utilization = 0.5
sia una metrica personalizzata comeorca.named_metrics.queue_depth_util = 0.2
.I nomi delle metriche personalizzate non devono contenere informazioni regolamentate, sensibili, identificabili o altre informazioni riservate che non devono essere visualizzate da persone esterne alla tua organizzazione.
Codifiche disponibili per la specifica delle metriche personalizzate
JSON
Codifica JSON di esempio di un report sul caricamento:
endpoint-load-metrics-json: JSON {"cpu_utilization": 0.3, "mem_utilization": 0.8, "rps_fractional": 10.0, "eps": 1, "named_metrics": {"custom-metric-util": 0.4}}.
Protobuf binario
Per il codice compatibile con Protocol Buffers, si tratta di un protobuf OrcaLoadReport con codifica base64 e serializzazione binaria in
endpoint-load-metrics-bin
o inendpoint-load-metrics: BIN
.HTTP nativo
Coppie chiave-valore separate da virgole in
endpoint-load-metrics
. Questa è una representation text appiattita di OrcaLoadReport:endpoint-load-metrics: TEXT cpu_utilization=0.3, mem_utilization=0.8, rps_fractional=10.0, eps=1, named_metrics.custom_metric_util=0.4
gRPC
La specifica gRPC richiede che le metriche vengano fornite utilizzando i metadati finali con la chiave
endpoint-load-metrics-bin
.
Configurazione del backend per generare report sulle metriche personalizzate
Dopo aver stabilito le metriche che vuoi che vengano utilizzate dal bilanciatore del carico, configura i backend per compilare le metriche personalizzate richieste in un report sul carico ORCA e indica i relativi valori in ogni intestazione di risposta HTTP inviata al bilanciatore del carico.
Ad esempio, se hai scelto orca.cpu_utilization
come metrica personalizzata per un backend, questo deve segnalare l'utilizzo corrente della CPU al bilanciatore del carico in ogni pacchetto inviato. Per le istruzioni, consulta la sezione Generare report sulle metriche per il bilanciatore del carico in questa pagina.
Configurazione del bilanciatore del carico per supportare le metriche personalizzate
Per consentire al bilanciatore del carico di utilizzare i valori delle metriche personalizzate registrati dai backend per prendere decisioni sulla distribuzione del traffico, devi impostare la modalità di bilanciamento di ciascun backend su CUSTOM_METRICS
e il criterio di località del bilanciamento del carico del servizio di backend su WEIGHTED_ROUND_ROBIN
.
Modalità di bilanciamento
CUSTOM_METRICS
. Ogni backend di un servizio di backend deve essere configurato per utilizzare la modalità di bilanciamentoCUSTOM_METRICS
. Quando un backend è configurato con la modalità di bilanciamentoCUSTOM_METRICS
, il bilanciatore del carico indirizza il traffico ai backend in base alla soglia di utilizzo massima configurata per ogni metrica personalizzata.Ogni backend può specificare un insieme diverso di metriche da segnalare. Se sono configurate più metriche personalizzate per backend, il bilanciatore del carico tenta di distribuire il traffico in modo che tutte le metriche rimangano al di sotto dei limiti di utilizzo massimo configurati.
Il traffico viene bilanciato sui backend in base all'algoritmo di bilanciamento del carico scelto. Ad esempio, l'algoritmo
WATERFALL_BY_REGION
predefinito tenta di mantenere tutti i backend in esecuzione con la stessa intensità.WEIGHTED_ROUND_ROBIN
policy di bilanciamento del carico per le località. Il criterio di località del bilanciamento del carico del servizio di backend deve essere impostato suWEIGHTED_ROUND_ROBIN
. Con questa configurazione, il bilanciatore del carico utilizza anche le metriche personalizzate per selezionare l'istanza o l'endpoint ottimale all'interno del backend per gestire la richiesta.
Configurare le metriche personalizzate
Per consentire ai bilanciatori del carico delle applicazioni di utilizzare metriche personalizzate:
- Determina le metriche personalizzate che vuoi utilizzare.
- Configura i backend per generare report sulle metriche personalizzate per il bilanciatore del carico. Devi stabilire uno stream di dati che può essere inviato al bilanciatore del carico per essere utilizzato per il bilanciamento del carico. Queste metriche devono essere compilate e codificate in un report sul carico ORCA e poi registrate nel bilanciatore del carico utilizzando le intestazioni di risposta HTTP.
- Configura il bilanciatore del carico in modo che utilizzi i valori delle metriche personalizzate registrati dai backend.
Determina le metriche personalizzate
Questo passaggio è molto soggettivo in base alle esigenze delle tue applicazioni. Dopo aver stabilito quali metriche utilizzare, devi anche determinare la soglia di utilizzo massima per ogni metrica. Ad esempio, se vuoi utilizzare l'utilizzo della memoria come metrica, devi anche determinare la soglia massima di utilizzo della memoria per ogni backend.
Prima di procedere alla configurazione del bilanciatore del carico, assicurati di aver esaminato i tipi di metriche personalizzate a tua disposizione (riservate e con nome) e i requisiti per la selezione delle metriche, descritti nella sezione Come funzionano le metriche personalizzate di questa pagina.
Configura i backend per generare report sulle metriche per il bilanciatore del carico
Le metriche personalizzate vengono registrate nei bilanciatori del carico nell'ambito di ogni risposta HTTP dei backend dell'applicazione utilizzando lo standard ORCA. Questa sezione mostra come compilare le metriche personalizzate in un report sul carico ORCA e come riportarle in ogni intestazione di risposta HTTP inviata al bilanciatore del carico.
Ad esempio, se utilizzi la codifica di testo HTTP, l'intestazione deve registrare le metriche nel seguente formato.
endpoint-load-metrics: TEXT BACKEND_METRIC_NAME_1=BACKEND_METRIC_VALUE_1,BACKEND_METRIC_NAME_2=BACKEND_METRIC_VALUE_2
Indipendentemente dal formato di codifica utilizzato, assicurati di rimuovere il prefisso orca.
dal nome della metrica quando crei il report sul caricamento.
Ecco uno snippet di codice che mostra come aggiungere due metriche personalizzate (customUtilA
e customUtilB
) alle intestazioni HTTP. Questo snippet di codice mostra sia la codifica di testo HTTP nativa sia la codifica Base64. Tieni presente che questo esempio
hardcode i valori di customUtilA
e customUtilB
solo per semplicità.
Il bilanciatore del carico riceve i valori delle metriche che hai stabilito debbano influenzare il bilanciamento del carico.
...
type OrcaReportType int
const (
OrcaText OrcaReportType = iota
OrcaBin
)
type HttpHeader struct {
key string
value string
}
const (
customUtilA = 0.2
customUtilB = 0.4
)
func GetBinOrcaReport() HttpHeader {
report := &pb.OrcaLoadReport{
NamedMetrics: map[string]float64{"customUtilA": customUtilA, "customUtilB": customUtilB}}
out, err := proto.Marshal(report)
if err != nil {
log.Fatalf("failed to serialize the ORCA proto: %v", err)
}
return HttpHeader{"endpoint-load-metrics-bin", base64.StdEncoding.EncodeToString(out)}
}
func GetHttpOrcaReport() HttpHeader {
return HttpHeader{
"endpoint-load-metrics",
fmt.Sprintf("TEXT named_metrics.customUtilA=%.2f,named_metrics.customUtilB=%.2f",
customUtilA, customUtilB)}
}
func GetOrcaReport(t OrcaReportType) HttpHeader {
switch t {
case OrcaText:
return GetHttpOrcaReport()
case OrcaBin:
return GetBinOrcaReport()
default:
return HttpHeader{"", ""}
}
}
...
Configurare il bilanciatore del carico in modo che utilizzi metriche personalizzate
Affinché il bilanciatore del carico utilizzi queste metriche personalizzate durante la selezione di un backend, devi impostare la modalità di bilanciamento per ogni backend su CUSTOM_METRICS
.
Inoltre, se vuoi che le metriche personalizzate influenzino anche la selezione degli endpoint, imposta il criterio di località per il bilanciamento del carico su WEIGHTED_ROUND_ROBIN
.
I passaggi descritti in questa sezione presuppongono che tu abbia già eseguito il deployment di un bilanciatore del carico con backend NEG a livello di zona. Tuttavia, puoi utilizzare gli stessi parametri --custom-metrics
mostrati qui per aggiornare qualsiasi backend esistente utilizzando il comando gcloud compute backend-services update
.
Puoi impostare la modalità di bilanciamento di un backend su
CUSTOM_METRICS
quando lo aggiungi al servizio di backend. Utilizza il flag--custom-metrics
per specificare la metrica personalizzata e la soglia da utilizzare per le decisioni di bilanciamento del carico.gcloud beta compute backend-services add-backend BACKEND_SERVICE_NAME \ --network-endpoint-group=NEG_NAME \ --network-endpoint-group-zone=NEG_ZONE \ [--global | region=REGION] \ --balancing-mode=CUSTOM_METRICS \ --custom-metrics='name="BACKEND_METRIC_NAME_1",maxUtilization=MAX_UTILIZATION_FOR_METRIC_1' \ --custom-metrics='name="BACKEND_METRIC_NAME_2",maxUtilization=MAX_UTILIZATION_FOR_METRIC_2'
Sostituisci quanto segue:
BACKEND_SERVICE_NAME
: il nome del servizio di backendNEG_NAME
: il nome del NEG a livello di zona o ibridoNEG_ZONE
: la zona in cui è stato creato il NEGREGION
: per i bilanciatori del carico a livello di regione, la regione in cui è stato creato il bilanciatore del caricoBACKEND_METRIC_NAME
: i nomi delle metriche personalizzate utilizzati qui devono corrispondere a quelli riportati dal report ORCA del backendMAX_UTILIZATION_FOR_METRIC
: l'utilizzo massimo che gli algoritmi di bilanciamento del carico devono avere come target per ogni metrica
Ad esempio, se i tuoi backend generano due metriche personalizzate,
customUtilA
ecustomUtilB
(come mostrato nella sezione Configurare i backend per generare report sulle metriche per il bilanciatore del carico), utilizza il seguente comando per configurare il bilanciatore del carico in modo da utilizzare queste metriche:gcloud beta compute backend-services add-backend BACKEND_SERVICE_NAME \ --network-endpoint-group=NEG_NAME \ --network-endpoint-group-zone=NEG_ZONE \ [--global | region=REGION] \ --balancing-mode=CUSTOM_METRICS \ --custom-metrics='name="customUtilA",maxUtilization=0.8' \ --custom-metrics='name="customUtilB",maxUtilization=0.9'
In alternativa, puoi fornire un elenco di metriche personalizzate in un file JSON strutturato:
{ "name": "METRIC_NAME_1", "maxUtilization": MAX_UTILIZATION_FOR_METRIC_1, "dryRun": true } { "name": "METRIC_NAME_2", "maxUtilization": MAX_UTILIZATION_FOR_METRIC_2, "dryRun": false }
Quindi, allega il file delle metriche in formato JSON al backend come segue:
gcloud beta compute backend-services add-backend BACKEND_SERVICE_NAME \ --network-endpoint-group=NEG_NAME \ --network-endpoint-group-zone=NEG_ZONE \ [--global | region=REGION] \ --balancing-mode=CUSTOM_METRICS \ --custom-metrics-file='BACKEND_METRIC_FILE_NAME'
Se vuoi verificare se le metriche vengono registrate senza influire sul bilanciatore del carico, puoi impostare il flag
dryRun
sutrue
quando configuri la metrica come segue:gcloud beta compute backend-services add-backend BACKEND_SERVICE_NAME \ --network-endpoint-group=NEG_NAME \ --network-endpoint-group-zone=NEG_ZONE \ [--global | region=REGION] \ --balancing-mode=CUSTOM_METRICS \ --custom-metrics 'name="BACKEND_METRIC_NAME",maxUtilization=MAX_UTILIZATION_FOR_METRIC,dryRun=true'
Quando una metrica è configurata con
dryRun
impostato sutrue
, viene riportata in Monitoraggio, ma non viene effettivamente utilizzata dal bilanciatore del carico.Per annullare questa operazione, aggiorna il servizio di backend con il flag
dryRun
impostato sufalse
.gcloud beta compute backend-services update-backend BACKEND_SERVICE_NAME \ --network-endpoint-group=NEG_NAME \ --network-endpoint-group-zone=NEG_ZONE \ [--global | region=REGION] \ --balancing-mode=CUSTOM_METRICS \ --custom-metrics 'name="BACKEND_METRIC_NAME",maxUtilization=MAX_UTILIZATION_FOR_METRIC_,dryRun=false'
Se tutte le metriche personalizzate sono configurate con
dryRun
impostato sutrue
, l'impostazione della modalità di bilanciamento suCUSTOM_METRICS
o del criterio di località del bilanciamento del carico suWEIGHTED_ROUND_ROBIN
non ha alcun effetto sul bilanciatore del carico.Per configurare il bilanciatore del carico in modo che utilizzi le metriche personalizzate per influenzare la selezione degli endpoint, imposta il criterio di località del bilanciamento del carico del servizio di backend su
WEIGHTED_ROUND_ROBIN
.Ad esempio, se hai un servizio di backend già configurato con i backend appropriati, configura il criterio di località del bilanciamento del carico come segue:
gcloud beta compute backend-services update BACKEND_SERVICE_NAME \ [--global | region=REGION] \ --custom-metrics='name=BACKEND_SERVICE_METRIC_NAME,dryRun=false' \ --locality-lb-policy=WEIGHTED_ROUND_ROBIN
Come dimostrato in precedenza per le metriche a livello di backend, puoi anche fornire un elenco di metriche personalizzate in un file JSON strutturato a livello di servizio di backend. Utilizza il campo
--custom-metrics-file
per allegare il file delle metriche al servizio di backend.
Passaggi successivi
- Risolvere i problemi relativi ai bilanciatori del carico delle applicazioni esterni
- Risolvere i problemi relativi ai bilanciatori del carico delle applicazioni interni