Ottimizzazioni del bilanciamento del carico avanzate

Questa pagina descrive come utilizzare un criterio di bilanciamento del carico del servizio per supportare ottimizzazioni avanzate di costi, latenza e resilienza per i seguenti bilanciatori del carico:

  • Bilanciatore del carico delle applicazioni esterno globale
  • Bilanciatore del carico delle applicazioni interno tra regioni
  • Bilanciatore del carico di rete proxy esterno globale
  • Bilanciatore del carico di rete proxy interno tra regioni

Cloud Service Mesh supporta anche le ottimizzazioni del bilanciamento del carico avanzate. Per maggiori dettagli, consulta la Panoramica del bilanciamento del carico avanzato nella documentazione di Cloud Service Mesh.

Un criterio di bilanciamento del carico del servizio (serviceLbPolicy) è una risorsa associata al servizio di backend del bilanciatore del carico. Un criterio di bilanciamento del carico del servizio consente di personalizzare parametri che influenzano la distribuzione del traffico all'interno dei backend associati a un servizio di backend:

  • Personalizza l'algoritmo di bilanciamento del carico utilizzato per determinare la modalità di traffico del traffico. distribuiti all'interno di una particolare regione o zona.
  • Abilita lo svuotamento automatico della capacità in modo che il bilanciatore del carico possa svuotarsi rapidamente da backend in stato non integro.
  • Imposta una soglia di failover per determinare quando un backend è considerato non integro. Questo consente il failover del traffico verso un backend diverso per evitare uno stato non integro di backend.

Inoltre, puoi designare backend specifici come backend preferiti. Questi backend devono essere utilizzati al massimo della loro capacità prima che le richieste vengano inviate ai backend rimanenti.

Il seguente diagramma mostra in che modo Cloud Load Balancing valuta il routing, il carico di Google Cloud e la distribuzione del traffico.

In che modo Cloud Load Balancing prende le decisioni relative al routing e alla distribuzione del traffico.
In che modo Cloud Load Balancing prende decisioni di routing e distribuzione del traffico.

Prima di iniziare

Prima di esaminare i contenuti di questa pagina, esamina attentamente la Richiesta di distribuzione del carico descritto nella panoramica del bilanciatore del carico delle applicazioni esterno . Per bilanciatori del carico che sono sempre di livello Premium, algoritmi descritti in questa pagina supportano lo sversamento tra regioni se una la regione di prima scelta è già piena.

Backend supportati

I criteri di bilanciamento del carico del servizio e i backend preferiti possono essere configurati solo su bilanciatori del carico che utilizzano i backend supportati come indicato nella tabella seguente.

Backend Supportata?
Gruppi di istanze
  • Non gestita
  • Gestita a livello di zona
MIG a livello di area geografica
NEG a livello di zona (endpoint GCE_VM_IP_PORT)
NEG ibrido (NON_GCP_PRIVATE_IP_PORT endpoint)
NEG serverless
NEG Internet
NEG Private Service Connect

Algoritmi di bilanciamento del carico

Questa sezione descrive gli algoritmi di bilanciamento del carico che puoi configurare in un e il criterio di bilanciamento del carico del servizio. Se non configuri un algoritmo o non configura affatto un criterio di bilanciamento del carico del servizio, il bilanciatore del carico utilizza WATERFALL_BY_REGION per impostazione predefinita.

A cascata per regione

WATERFALL_BY_REGION è l'algoritmo di bilanciamento del carico predefinito. Con questo algoritmo, in aggregato, tutti i frontend di Google (GFEs) di una regione tentano di completare i backend in proporzione alle loro capacità target configurate (modificate dai relativi fattori di scalabilità della capacità).

Ogni singolo GFE di secondo livello preferisce selezionare istanze di backend o endpoint in una zona il più vicina possibile (definita dall'opzione al GFE di secondo livello. Perché WATERFALL_BY_REGION riduce al minimo la latenza tra zone, con frequenze di richieste ridotte, ogni GFE di secondo livello può di inviare richieste ai backend nella zona preferita del GFE di secondo livello.

Spray a regione

L'algoritmo SPRAY_TO_REGION modifica il comportamento individuale di ogni GFE di secondo livello nella misura in cui ogni GFE di secondo livello non ha preferenze per la selezione di istanze o endpoint di backend che si trovano in una zona il più vicino possibile al GFE di secondo livello. Con SPRAY_TO_REGION, ogni GFE di secondo livello invia richieste a tutte le istanze o gli endpoint di backend, in tutte le zone della regione, senza preferire un tempo di percorrenza più breve tra il GFE di secondo livello e le istanze o gli endpoint di backend.

Come WATERFALL_BY_REGION, in forma aggregata, tutti i GFE di secondo livello della regione e riempie i backend in proporzione alle capacità target configurate (modificate dei relativi scaler di capacità).

Mentre SPRAY_TO_REGION fornisce una distribuzione più uniforme tra i backend in tutto zone di una regione, soprattutto con tassi di richiesta bassi, questa distribuzione uniforme comporta le seguenti considerazioni:

  • Quando i backend smettono di funzionare (ma continuano a superare i controlli di integrità), i GFE di secondo livello sono interessati, sebbene l'impatto individuale sia meno grave.
  • Poiché ogni GFE di secondo livello non ha preferenze per una zona rispetto a un'altra, i GFE di secondo livello creano più traffico tra zone. In base al numero di richieste in fase di elaborazione, ogni GFE di secondo livello potrebbe creare e le connessioni ai backend.

A cascata per zona

L'algoritmo WATERFALL_BY_ZONE modifica il comportamento singolo di ogni GFE di secondo strato, nella misura in cui ogni GFE di secondo livello ha un la preferenza per selezionare le istanze di backend o gli endpoint che si trovano più vicina possibile al GFE di secondo livello. Con WATERFALL_BY_ZONE, ogni GFE di secondo livello soltanto invia richieste a istanze o endpoint di backend in altre zone della regione quando il GFE di secondo livello ha riempito (o ha riempito in modo proporzionale) le istanze o gli endpoint di backend nella sua zona più favorita.

Come WATERFALL_BY_REGION, in aggregato, tutti i GFE di secondo livello nella regione compilano i backend in proporzione alle loro capacità target configurate (modificate dai loro scalari di capacità).

L'algoritmo WATERFALL_BY_ZONE riduce al minimo la latenza con quanto segue considerazioni:

  • WATERFALL_BY_ZONE non minimizza intrinsecamente le connessioni tra zone. L'algoritmo è guidato solo dalla latenza.
  • WATERFALL_BY_ZONE non garantisce che ogni GFE di secondo livello sempre riempie la sua zona preferita prima di riempire altre zone. Gli eventi di manutenzione possono causano temporaneamente l'invio di tutto il traffico da un GFE di secondo livello al backend istanze o endpoint in un'altra zona.
  • WATERFALL_BY_ZONE può comportare una distribuzione meno uniforme delle richieste tra a tutte le istanze di backend o gli endpoint all'interno della regione nel suo insieme. Ad esempio: istanze di backend o endpoint nella zona più preferita del GFE di secondo livello potrebbe essere riempito alla capacità massima mentre i backend in altre zone non sono riempiti e la capacità di archiviazione.

Confrontare gli algoritmi di bilanciamento del carico

La seguente tabella confronta i diversi algoritmi di bilanciamento del carico.

Comportamento A cascata per regione Spray a regione A cascata per zona
Utilizzo uniforme della capacità all'interno di un'unica regione No
Utilizzo uniforme della capacità in più regioni No No No
Suddivisione uniforme del traffico dal bilanciatore del carico No No
Distribuzione del traffico tra zone Sì. Il traffico viene distribuito in modo uniforme tra le zone di una regione, ottimizzando al contempo la latenza della rete. Potrebbe essere inviato il traffico tra zone, se necessario. Sì. Il traffico viene inviato prima alla zona più vicina finché non raggiunge la capacità massima. Quindi va alla zona più vicina successiva.
Sensibilità ai picchi di traffico in una zona locale Media; dipende dalla quantità di traffico già spostata per bilanciare il traffico tra le zone. Più basso; gli picchi di una singola zona vengono distribuiti in tutte le zone della regione. Più elevato; è probabile che gli picchi in una singola zona vengano gestiti interamente dalla stessa zona finché il bilanciatore del carico non è in grado di reagire.

Scarico automatico della capacità

Quando un backend non è integro, in genere vuoi escluderlo dal bilanciamento del carico il più rapidamente possibile. L'esclusione dei backend non integri ottimizza la latenza complessiva inviando il traffico solo ai backend integri.

Quando attivi la funzionalità di svuotamento automatico della capacità, il bilanciatore del carico scala automaticamente la capacità di un backend a zero quando meno del 25 percento delle istanze o degli endpoint del backend supera i controlli di integrità. In questo modo, il backend non integro viene rimosso dal pool di bilanciamento del carico globale. Questa azione è funzionalmente equivalente all'impostazione di backendService.capacityScaler su 0 per un backend quando vuoi evitare di indirizzare il traffico a quel backend.

Se il 35% (10% al di sopra della soglia) di un precedente svuotamento automatico le istanze o gli endpoint del backend superano i controlli di integrità per 60 secondi, non viene svuotato automaticamente e viene aggiunto di nuovo al pool di bilanciamento del carico. In questo modo, il backend è effettivamente integro e non passa da uno stato di svuotamento a uno stato di svuotamento.

Anche con lo svuotamento automatico della capacità abilitato, il bilanciatore del carico non scarica più del 50% dei backend collegati a un servizio di backend, indipendentemente dallo stato di integrità del backend. Mantenendo collegato il 50% dei backend, si riduce il rischio di sovraccaricare i backend integri.

Un caso d'uso del ritiro automatico della capacità è utilizzarlo per ridurre al minimo il rischio di sovraccaricare i backend preferiti. Ad esempio, se un backend è contrassegnato come preferito, ma la maggior parte delle sue istanze o dei suoi endpoint è in stato non integro, lo svuotamento automatico della capacità rimuove il backend dal pool di bilanciamento del carico. Anziché sovraccaricare le istanze o gli endpoint rimanenti in buono stato nel backend preferito, lo svuotamento automatico della capacità trasferisce il traffico ad altri backend.

Puoi attivare lo svuotamento automatico della capacità come parte del criterio di bilanciamento del carico del servizio. Per maggiori dettagli, vedi Configurare un criterio di bilanciamento del carico del servizio.

La capacità automatica non è supportata con i backend che non utilizzano una modalità di bilanciamento. Sono inclusi come NEG internet, NEG serverless e NEG PSC.

Soglia di failover

Il bilanciatore del carico determina la distribuzione del traffico tra i backend su più livelli. In stato stazionario, invia il traffico ai backend selezionati in base a uno degli algoritmi di bilanciamento del carico descritti in precedenza. Questi backend, chiamati backend principali, sono considerati ottimali in termini di latenza e capacità.

Il bilanciatore del carico tiene traccia anche di altri backend che possono essere utilizzati se i backend principali non sono integri e non sono in grado di gestire il traffico. Questi sono chiamati backend di failover. Questi backend in genere si trovano nelle vicinanze con capacità rimanente.

Se le istanze o gli endpoint nel backend principale non sono più disponibili, il bilanciamento del carico non trasferisce immediatamente il traffico ad altri backend. Il bilanciatore del carico, invece, sposta prima il traffico su altre istanze o endpoint integri nello stesso backend per contribuire a stabilizzare il carico del traffico. Se troppi endpoint in un backend primario non sono operativi e gli endpoint rimanenti nello stesso backend non sono in grado di gestire il traffico aggiuntivo, il bilanciatore del carico utilizza la soglia di failover per determinare quando iniziare a inviare traffico a un backend di failover. Il bilanciatore del carico tollera lo stato non corretto nel backend principale fino alla soglia di failover. In seguito, il traffico viene spostato dal backend principale.

La soglia di failover è un valore compreso tra 1 e 99, espressa come percentuale in un backend che deve essere integro. Se la percentuale di endpoint integri scende al di sotto della soglia di failover, il bilanciatore del carico tenta di inviare il traffico a un backend di failover. Per impostazione predefinita, la soglia di failover è 70.

Se la soglia di failover è impostata su un valore troppo elevato, possono verificarsi fuoriuscite di traffico non necessarie a causa di variazioni temporanee dello stato. Se la soglia di failover è impostata su un valore troppo basso, continua a inviare traffico ai backend primari anche se ci sono molti endpoint in stato non integro.

Le decisioni di failover sono localizzate. Ogni Google Front End (GFE) locale si comporta indipendentemente l'una dall'altra. È tua responsabilità garantire che i tuoi i backend di failover possono gestire il traffico aggiuntivo.

Il traffico di failover può causare backend sovraccarichi. Anche se un backend non è in stato attivo, il bilanciatore del carico potrebbe comunque inviarvi traffico. Per escludere i backend non funzionanti dal pool di backend disponibili, attiva la funzionalità di scarico automatico della capacità.

Backend preferiti

I backend preferiti sono quelli di cui vuoi utilizzare completamente la capacità prima sversando il traffico ad altri backend. Qualsiasi traffico oltre il valore la capacità dei backend preferiti viene instradata ai backend non preferiti di backend. L'algoritmo di bilanciamento del carico distribuisce quindi il traffico tra i backend non preferiti di un servizio di backend.

Puoi configurare il bilanciatore del carico in modo che preferisca e utilizzi completamente uno o più backend collegati a un servizio di backend prima di inoltrare le richieste successive ai backend rimanenti.

Considera le seguenti limitazioni quando utilizzi i backend preferiti:

  • I backend configurati come preferiti potrebbero essere più lontani dai client e comportare una latenza media più elevata per le richieste dei client. Questo accade anche se esistono altri backend più vicini che potrebbero aver servito i client con una latenza inferiore.
  • Alcuni algoritmi di bilanciamento del carico (WATERFALL_BY_REGION, SPRAY_TO_REGION, e WATERFALL_BY_ZONE) non si applicano ai backend configurati come preferiti di backend.

Per scoprire come impostare i backend preferiti, consulta l'articolo Impostare i backend preferiti di backend.

Configura un criterio di bilanciamento del carico del servizio

La risorsa criterio di bilanciamento del carico del servizio consente di configurare i seguenti campi:

  • Algoritmo di bilanciamento del carico
  • Svuotamento automatico della capacità
  • Soglia di failover

Per impostare un backend preferito, consulta la sezione Impostare i backend preferiti.

Crea un criterio

Per creare e configurare un criterio di bilanciamento del carico del servizio, completa i seguenti passaggi:

  1. Creare una risorsa del criterio di bilanciamento del carico del servizio. Puoi farlo utilizzando un file YAML o direttamente utilizzando i parametri gcloud.

    • Con un file YAML. Specifica i criteri di bilanciamento del carico del servizio in un file YAML. Ecco un file YAML di esempio che mostra come configurare un algoritmo di bilanciamento del carico, attivare lo svuotamento automatico della capacità e impostare una soglia di failover personalizzata:

      name: projects/PROJECT_ID/locations/global/serviceLbPolicies/SERVICE_LB_POLICY_NAME
      autoCapacityDrain:
          enable: True
      failoverConfig:
          failoverHealthThreshold: FAILOVER_THRESHOLD_VALUE
      loadBalancingAlgorithm: LOAD_BALANCING_ALGORITHM
      

      Sostituisci quanto segue:

      • PROJECT_ID: l'ID progetto.
      • SERVICE_LB_POLICY_NAME: il nome del servizio e il criterio di bilanciamento del carico.
      • FAILOVER_THRESHOLD_VALUE: il valore della soglia di failover. Deve essere un numero compreso tra 1 e 99.
      • LOAD_BALANCING_ALGORITHM: l'algoritmo di bilanciamento del carico da utilizzare. Può essere SPRAY_TO_REGION, WATERFALL_BY_REGION o WATERFALL_BY_ZONE.

      Dopo aver creato il file YAML, importa il file in un nuovo servizio e il criterio di bilanciamento del carico.

      gcloud network-services service-lb-policies import SERVICE_LB_POLICY_NAME \
       --source=PATH_TO_POLICY_FILE \
       --location=global
      
    • Senza un file YAML. In alternativa, puoi configurare le funzionalità dei criteri di bilanciamento del carico del servizio senza utilizzare un file YAML.

      Per impostare l'algoritmo di bilanciamento del carico e attivare lo svuotamento automatico, utilizza i seguenti parametri:

      gcloud network-services service-lb-policies create SERVICE_LB_POLICY_NAME \
       --load-balancing-algorithm=LOAD_BALANCING_ALGORITHM \
       --auto-capacity-drain \
       --failover-health-threshold=FAILOVER_THRESHOLD_VALUE \
       --location=global
      

      Sostituisci quanto segue:

      • SERVICE_LB_POLICY_NAME: il nome del criterio di bilanciamento del carico del servizio.
      • LOAD_BALANCING_ALGORITHM: l'algoritmo di bilanciamento del carico da utilizzare. Può essere SPRAY_TO_REGION, WATERFALL_BY_REGION o WATERFALL_BY_ZONE.
      • FAILOVER_THRESHOLD_VALUE: il valore della soglia di failover. Deve essere un numero compreso tra 1 e 99.
  2. Aggiorna un servizio di backend in modo che il relativo campo --service-lb-policy faccia riferimento alla risorsa del criterio di bilanciamento del carico del servizio appena creata. R il servizio di backend può essere associato a un solo bilanciamento del carico del servizio risorsa del criterio.

    gcloud compute backend-services update BACKEND_SERVICE_NAME \
      --service-lb-policy=SERVICE_LB_POLICY_NAME \
      --global
    

    Puoi associare un criterio di bilanciamento del carico del servizio a un servizio di backend durante la creazione del servizio di backend.

    gcloud compute backend-services create BACKEND_SERVICE_NAME \
        --protocol=PROTOCOL \
        --port-name=NAMED_PORT_NAME \
        --health-checks=HEALTH_CHECK_NAME \
        --load-balancing-scheme=LOAD_BALANCING_SCHEME \
        --service-lb-policy=SERVICE_LB_POLICY_NAME \
        --global
    

Rimuovere una norma

Per rimuovere un criterio di bilanciamento del carico del servizio da un servizio di backend, utilizza il seguente comando:

gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --no-service-lb-policy \
    --global

Impostare i backend preferiti

Puoi configurare i backend preferiti utilizzando Google Cloud CLI o l'API.

gcloud

Aggiungi un backend preferito

Per impostare un backend preferito, utilizza il comando gcloud compute backend-services add-backend per impostare il flag --preference quando aggiungi il backend al servizio di backend.

gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
    ...
    --preference=PREFERENCE \
    --global

Sostituisci PREFERENCE con il livello di preferenza che vuoi e assegnare al backend. Può essere PREFERRED o DEFAULT.

Il resto del comando dipende dal tipo di backend in uso (gruppo di istanze o NEG). Per tutti i parametri obbligatori, consulta Comando gcloud compute backend-services add-backend.

Aggiorna la preferenza di un backend

Per aggiornare il parametro --preference di un backend, utilizza il comando gcloud compute backend-services update-backend.

gcloud compute backend-services update-backend BACKEND_SERVICE_NAME \
    ...
    --preference=PREFERENCE \
    --global

Il resto del comando dipende dal tipo di backend utilizzato (gruppo di istanze o NEG). Il comando di esempio seguente aggiorna un la preferenza del gruppo di istanza di backend e la imposta su PREFERRED:

gcloud compute backend-services update-backend BACKEND_SERVICE_NAME \
    --instance-group=INSTANCE_GROUP_NAME \
    --instance-group-zone=INSTANCE_GROUP_ZONE \
    --preference=PREFERRED \
    --global

API

Per impostare un backend preferito, imposta il flag preference su ogni backend utilizzando la risorsa backendServices globale.

Ecco un esempio che mostra come configurare la preferenza di backend:

  name: projects/PROJECT_ID/locations/global/backendServices/BACKEND_SERVICE_NAME
  ...
  - backends
      name: BACKEND_1_NAME
      preference: PREFERRED
      ...
  - backends
      name: BACKEND_2_NAME
      preference: DEFAULT
      ...

Sostituisci quanto segue:

  • PROJECT_ID: l'ID progetto
  • BACKEND_SERVICE_NAME: il nome del servizio di backend
  • BACKEND_1_NAME: il nome del preferito backend
  • BACKEND_2_NAME: il nome del backend predefinito

Risoluzione dei problemi

I pattern di distribuzione del traffico possono cambiare quando colleghi un nuovo criterio di bilanciamento del carico del servizio a un servizio di backend.

Per eseguire il debug dei problemi di traffico, utilizza il monitoraggio di Cloud per esaminare il flusso di traffico tra il bilanciatore del carico e il backend. Anche i log e le metriche di Cloud Load Balancing possono aiutarti a comprendere il comportamento del bilanciamento del carico.

Questa sezione riassume alcuni scenari comuni che potresti notare nella e una configurazione esposta al traffico.

Il traffico proveniente da un'unica sorgente viene inviato a troppi backend distinti

Questo è il comportamento previsto dell'algoritmo SPRAY_TO_REGION. Tuttavia, potresti riscontrare problemi causati da una distribuzione più ampia del traffico. Per Ad esempio, le percentuali di successo della cache potrebbero diminuire perché i backend rilevano il traffico proveniente da un una più ampia selezione di clienti. In questo caso, valuta la possibilità di utilizzare altri algoritmi come WATERFALL_BY_REGION.

Il traffico non viene inviato a backend con molti endpoint in stato non integro

Questo è il comportamento previsto quando autoCapacityDrain è attivato. Backend con molti endpoint in stato non integro vengono svuotati e rimossi dal carico di bilanciamento del carico. Se non vuoi che questo comportamento si verifichi, puoi disattivare lo svuotamento automatico della capacità. Tuttavia, questo significa che il traffico può essere inviato ai backend con di endpoint in stato non integro e le richieste possono non andare a buon fine.

Il traffico viene inviato a backend più lontani prima di quelli più vicini

Questo è il comportamento previsto se i backend preferiti sono più lontani rispetto ai backend predefiniti. Se non vuoi questo comportamento, aggiorna di conseguenza le impostazioni di preferenza per ogni backend.

Il traffico non viene inviato ad alcuni backend quando vengono utilizzati i backend preferiti

Questo è il comportamento previsto quando i tuoi backend preferiti non hanno ancora raggiunto e la capacità di archiviazione. I backend preferiti vengono assegnati per primi in base al tempo di round trip a questi backend.

Se vuoi che il traffico venga inviato ad altri backend, puoi:

  • Aggiorna le impostazioni delle preferenze per gli altri backend.
  • Imposta una capacità target inferiore per i backend che preferisci. Il target la capacità viene configurata utilizzando max-rate o max-utilization a seconda del bilanciamento del servizio di backend .

Il traffico viene inviato a un backend remoto durante le modifiche temporanee dello stato

Questo è il comportamento previsto quando la soglia di failover è impostata su un valore valore. Se vuoi che il traffico continui verso i backend primari quando ci sono cambiamenti di integrità temporanei, imposta questo campo su un valore più basso.

Gli endpoint in stato integro sono sovraccarichi quando altri endpoint non sono integri

Questo è il comportamento previsto quando la soglia di failover è impostata su un valore basso valore. Quando gli endpoint non sono integri, il traffico destinato a questi endpoint viene distribuito tra gli endpoint rimanenti nello stesso backend. Se vuoi che il comportamento di failover venga attivato prima, imposta questo campo su un valore più alto.

Limitazioni

  • Ogni servizio di backend può essere associato a una sola risorsa del criterio di bilanciamento del carico del servizio.