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 standard di utilizzo o basate sulla frequenza. Google CloudLa definizione di metriche personalizzate per il bilanciatore del carico ti offre la flessibilità di instradare le richieste dell'applicazione alle istanze e agli endpoint di backend più ottimali per il tuo workload.
Per GKE, puoi anche utilizzare metriche personalizzate provenienti dal servizio o dall'applicazione che stai eseguendo. Per maggiori dettagli, vedi Esporre metriche personalizzate.
Il bilanciatore del carico utilizza i valori delle metriche personalizzate per prendere le seguenti decisioni:
- Seleziona il gruppo di istanze di macchine virtuali (VM) o il gruppo di endpoint di rete di backend 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 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 di rete.
Se le tue applicazioni hanno spesso latenze di elaborazione del backend dell'ordine di secondi, puoi utilizzare la capacità di calcolo globale in modo più efficiente bilanciando le richieste in base a metriche personalizzate anziché alla latenza di rete.
Massimizza l'efficienza di calcolo prendendo decisioni di bilanciamento del carico in base a combinazioni di metriche uniche per la tua implementazione. Ad esempio, considera 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 di richieste al secondo comporta una distribuzione del carico non uniforme. In questo caso, potresti voler 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 la tua flotta di calcolo.
Scalare automaticamente i backend in base a metriche personalizzate più pertinenti ai requisiti della tua applicazione. Ad esempio, puoi definire un criterio di scalabilità automatica per scalare automaticamente le istanze di backend quando la metrica personalizzata configurata supera l'80%. Ciò si ottiene utilizzando metriche di scalabilità automatica basate sul traffico (
autoscaling.googleapis.com|gclb-capacity-fullness
). Per ulteriori informazioni, vedi Scalabilità automatica basata sul 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 di connettività ibrida
Come funzionano le metriche personalizzate
Per consentire al bilanciatore del carico di prendere decisioni di distribuzione del traffico in base a metriche personalizzate, devi prima determinare quali sono le metriche più pertinenti per la tua applicazione specifica. Una volta individuate le metriche che vuoi utilizzare, configura i backend in modo che inizino a inviare un flusso costante di queste metriche al bilanciatore del carico. Google Cloud consente di segnalare le metriche come parte dell'intestazione di ogni risposta HTTP inviata dai backend al bilanciatore del carico. Queste metriche sono incapsulate in un'intestazione di risposta HTTP personalizzata e devono seguire lo standard Open Request Cost Aggregation (ORCA).
Le metriche possono essere configurate a due livelli:
- A livello di servizio di backend, per influenzare la selezione del backend (MIG o NEG)
- A livello di backend, per influenzare la selezione di istanze VM o endpoint
Le sezioni seguenti descrivono il funzionamento delle metriche personalizzate.
Determinare quali metriche personalizzate influenzano le decisioni di bilanciamento del carico
Determinare quali metriche personalizzate influenzano le decisioni di bilanciamento del carico è altamente soggettivo e dipende dalle esigenze delle tue applicazioni. Ad esempio, se le tue applicazioni hanno latenze di elaborazione backend dell'ordine di secondi, potresti voler bilanciare il carico delle richieste in base ad altre metriche personalizzate anziché alle latenze di rete standard.
Dopo aver determinato le metriche da utilizzare, devi anche stabilire la soglia di utilizzo massima per ciascuna 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 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
segnalata dal backend inferiore a 0,8, per quanto possibile.
Esistono due tipi di metriche personalizzate che puoi utilizzare:
Metriche riservate. Esistono cinque nomi di metriche 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
Le metriche
mem_utilization
,cpu_utilization
eapplication_utilization
prevedono valori compresi nell'intervallo0.0 - 1.00
, ma possono superare1.00
per scenari in cui l'utilizzo delle risorse supera il budget.Metriche denominate. Queste sono metriche specifiche della tua applicazione che specifichi 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 nome-valore.Le metriche denominate definite per la modalità di bilanciamento
CUSTOM_METRICS
devono includere valori nell'intervallo0 - 100
. Le metriche denominate definite per il criterio di bilanciamento del carico per le localitàWEIGHTED_ROUND_ROBIN
non hanno un intervallo previsto.
Metriche obbligatorie
Per consentire al bilanciatore del carico di utilizzare metriche personalizzate per la selezione del gruppo di istanze VM di backend o del gruppo di endpoint di rete, devi specificare una o più delle seguenti metriche di utilizzo nel report di carico ORCA inviato al bilanciatore del carico.
orca.named_metrics
è una mappa delle 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 VM o dell'endpoint di backend, devi fornire tutte le seguenti metriche nel report di carico ORCA inviato al bilanciatore del carico. Il bilanciatore del carico utilizza i pesi calcolati da queste metriche segnalate 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
Limiti e requisiti
Esiste un limite di due metriche personalizzate per backend. Tuttavia, puoi eseguire
dryRun
test 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 viene eseguito 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 tenta di mantenere tutti i backend in esecuzione con un livello di utilizzo simile. La pienezza viene calcolata comecurrentUtilization
/maxUtilization
. In questo caso, il bilanciatore del carico utilizza il valore di pienezza più alto tra i due riportati 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 metriche obbligatorieorca.eps
eorca.rps_fractional
. Questo limite è indipendente anche dalle metriche configurate a livello di backend.Le metriche riservate e quelle denominate possono essere utilizzate insieme. Ad esempio, sia
orca.cpu_utilization = 0.5
sia una metrica personalizzata comeorca.named_metrics.queue_depth_util = 0.2
possono essere fornite in un unico report di caricamento.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 della metrica personalizzata
JSON
Codifica JSON di esempio di un report sul carico:
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}}.
Binary Protobuf
Per il codice compatibile con Protocol Buffers, si tratta di un protobuf OrcaLoadReport serializzato in formato binario con codifica base64 in
endpoint-load-metrics-bin
o inendpoint-load-metrics: BIN
.HTTP nativo
Coppie chiave-valore separate da virgole in
endpoint-load-metrics
. Questa è una rappresentazione testuale semplificata 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 determinato le metriche che vuoi che utilizzi il bilanciatore del carico, configura i backend per compilare le metriche personalizzate richieste in un report di carico ORCA e segnala i relativi valori in ogni intestazione della 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 attuale della CPU al bilanciatore
del carico in ogni risposta inviata al bilanciatore del carico. Per istruzioni, vedi la sezione
Metriche dei report al 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 riportati dai backend per prendere decisioni sulla distribuzione del traffico, devi impostare la modalità di bilanciamento di ogni 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
. Ciascuno dei tuoi backend in 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 per ogni backend sono configurate più metriche personalizzate, il bilanciatore del carico tenta di distribuire il traffico in modo che tutte le metriche rimangano al di sotto dei limiti massimi di utilizzo configurati.
Il traffico viene bilanciato tra i backend in base all'algoritmo di bilanciamento del carico che scegli. Ad esempio, l'algoritmo
WATERFALL_BY_REGION
predefinito tenta di mantenere tutti i backend in esecuzione con la stessa pienezza.Policy di bilanciamento del carico per le località
WEIGHTED_ROUND_ROBIN
. La policy di località di bilanciamento del carico del servizio di backend deve essere impostata 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 segnalare metriche personalizzate al bilanciatore del carico. Devi stabilire un flusso di dati che possa essere inviato al bilanciatore del carico per essere utilizzato per il bilanciamento del carico. Queste metriche devono essere compilate e codificate in un report di carico ORCA e poi inviate al bilanciatore del carico utilizzando le intestazioni della risposta HTTP.
- Configura il bilanciatore del carico in modo che utilizzi i valori metrica personalizzata riportati dai backend.
Determinare le metriche personalizzate
Questo passaggio è molto soggettivo e dipende dalle esigenze delle tue applicazioni. Dopo aver determinato le metriche da utilizzare, devi anche stabilire la soglia di utilizzo massima per ciascuna 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 bilanciamento del carico, assicurati di aver esaminato i tipi di metriche personalizzate a tua disposizione (riservate e denominate) e i requisiti per la selezione delle metriche, descritti nella sezione Come funzionano le metriche personalizzate di questa pagina.
Configura i backend per segnalare le metriche al bilanciatore del carico
Le metriche personalizzate vengono segnalate ai bilanciatori del carico come parte di ogni risposta HTTP dai backend dell'applicazione utilizzando lo standard ORCA.
Quando utilizzi Google Kubernetes Engine, hai anche la possibilità di utilizzare metriche personalizzate per i bilanciatori del carico.
Questa sezione mostra come compilare le metriche personalizzate in un report di carico ORCA e come riportarle in ogni intestazione di risposta HTTP inviata al bilanciatore del carico.
Ad esempio, se utilizzi la codifica del testo HTTP, l'intestazione deve segnalare 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 di 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 del testo HTTP nativa sia la codifica Base64. Tieni presente che questo esempio
codifica i valori per customUtilA
e customUtilB
solo per semplicità.
Il bilanciatore del carico riceve i valori delle metriche che hai
determinato che influenzano 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{"", ""}
}
}
...
Configura 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 influiscano anche sulla selezione degli endpoint, imposta il criterio di località di 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 di zona. Tuttavia, puoi utilizzare gli stessi
flag --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. Utilizzi il flag--custom-metrics
per specificare la metrica personalizzata e la soglia da utilizzare per le decisioni di bilanciamento del carico.gcloud 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 ibrido o a livello di zonaNEG_ZONE
: la zona in cui è stato creato il NEGREGION
: per i bilanciatori del carico regionali, la regione in cui è stato creato il bilanciatore del caricoBACKEND_METRIC_NAME
: i nomi delle metrica personalizzata utilizzati qui devono corrispondere a quelli riportati nel 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 segnalano due metriche personalizzate,
customUtilA
ecustomUtilB
(come illustrato nella sezione Configurare i backend per segnalare le metriche al bilanciatore del carico), utilizza il seguente comando per configurare il bilanciatore del carico in modo che utilizzi queste metriche:gcloud 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 nel seguente modo:
gcloud 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 segnalate senza influire sul bilanciatore del carico, puoi impostare il flag
dryRun
sutrue
durante la configurazione della metrica come segue:gcloud 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
, la metrica viene segnalata a Monitoring, ma non viene effettivamente utilizzata dal bilanciamento del carico.Per invertire questa operazione, aggiorna il servizio di backend con il flag
dryRun
impostato sufalse
.gcloud 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 bilanciamento del carico per le località 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 nel seguente modo:
gcloud 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 mostrato 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