Esta página descreve como usar métricas personalizadas com os seus equilibradores de carga de aplicações. As métricas personalizadas permitem-lhe configurar o comportamento de distribuição de tráfego do seu equilibrador de carga com base em métricas específicas dos requisitos da sua aplicação ou infraestrutura, em vez das métricas de utilização padrão ou baseadas em taxas. Google CloudA definição de métricas personalizadas para o seu equilibrador de carga dá-lhe a flexibilidade de encaminhar pedidos de aplicações para as instâncias e os pontos finais de back-end mais adequados para a sua carga de trabalho.
Para o GKE, também pode usar métricas personalizadas provenientes do serviço ou da aplicação que está a executar. Para ver detalhes, consulte o artigo Exponha métricas personalizadas.
O balanceador de carga usa os valores das métricas personalizadas para tomar as seguintes decisões:
- Selecione o grupo de instâncias de máquinas virtuais (VMs) ou o grupo de pontos finais de rede de back-end que vai receber tráfego.
- Selecione a instância de VM ou o ponto final que vai receber tráfego.
Seguem-se alguns exemplos de utilização de métricas personalizadas:
Maximize a utilização da sua capacidade de computação global tomando decisões de equilíbrio de carga com base em métricas personalizadas mais relevantes para a sua aplicação, em vez dos critérios predefinidos, como a afinidade regional ou a latência da rede.
Caso as suas aplicações tenham frequentemente latências de processamento de back-end na ordem dos segundos, pode usar a sua capacidade de computação global de forma mais eficiente equilibrando os pedidos de carga com base em métricas personalizadas, em vez da latência da rede.
Maximize a eficiência de computação tomando decisões de equilíbrio de carga com base em combinações de métricas exclusivas da sua implementação. Por exemplo, considere um cenário em que os seus pedidos têm tempos de processamento e requisitos de computação altamente variáveis. Neste cenário, o equilíbrio de carga baseado apenas na taxa de pedidos por segundo resulta numa distribuição de carga desigual. Nesse caso, é recomendável definir uma métrica personalizada que equilibre a carga com base numa combinação da taxa de pedidos e da utilização da CPU ou da GPU para usar a sua frota de computação da forma mais eficiente.
Crie uma escala automática de back-ends com base em métricas personalizadas mais relevantes para os requisitos da sua aplicação. Por exemplo, pode definir uma política de escalabilidade automática para escalar automaticamente as instâncias de back-end quando a métrica personalizada configurada exceder 80%. Isto é conseguido através da utilização de métricas de escala automática baseadas no tráfego (
autoscaling.googleapis.com|gclb-capacity-fullness
). Para mais informações, consulte o artigo Escala automática baseada no tráfego do equilibrador de carga.
Balanceadores de carga e back-ends suportados
As métricas personalizadas são suportadas para os seguintes equilibradores de carga de aplicações:
- Balanceador de carga de aplicações externo global
- Balanceador de carga de aplicações externo regional
- Balanceador de carga de aplicações interno entre regiões
- Balanceador de carga de aplicações interno regional
As métricas personalizadas são suportadas com os seguintes tipos de back-end:
- Grupos de instâncias geridas
- NEGs zonais (com
GCE_VM_IP_PORT
pontos finais) - NEGs de conetividade híbrida
Como funcionam as métricas personalizadas
Para permitir que o equilibrador de carga tome decisões de distribuição de tráfego com base em métricas personalizadas, tem de determinar primeiro quais são as métricas mais relevantes para a sua aplicação específica. Quando souber que métricas quer usar, configure os seus back-ends para começarem a comunicar um fluxo constante destas métricas ao equilibrador de carga. Google Cloud permite-lhe comunicar métricas como parte do cabeçalho de cada resposta HTTP enviada dos back-ends para o equilibrador de carga. Estas métricas estão encapsuladas num cabeçalho de resposta HTTP personalizado e têm de seguir a norma de agregação de custos de pedidos abertos (ORCA).
As métricas podem ser configuradas em dois níveis:
- Ao nível do serviço de back-end, para influenciar a seleção de back-end (MIG ou NEG)
- Ao nível do back-end, para influenciar a seleção de instâncias de VM ou pontos finais
As secções seguintes descrevem como funcionam as métricas personalizadas.
Determine que métricas personalizadas influenciam as decisões de equilíbrio de carga
Determinar que métricas personalizadas influenciam as decisões de equilíbrio de carga é altamente subjetivo e baseia-se nas necessidades das suas aplicações. Por exemplo, se as suas aplicações tiverem latências de processamento de back-end na ordem dos segundos, é recomendável equilibrar a carga dos pedidos com base noutras métricas personalizadas, em vez das latências de rede padrão.
Depois de determinar as métricas que quer usar, também tem de determinar o limite máximo de utilização para cada métrica. Por exemplo, se quiser usar a utilização de memória como uma métrica, também tem de determinar o limite máximo de utilização de memória para cada back-end.
Por exemplo, se configurar uma métrica denominada example-custom-metric
, com o respetivo limite de utilização máximo definido como 0,8, o balanceador de carga ajusta dinamicamente a distribuição de tráfego entre os back-ends para manter a métrica example-custom-metric
comunicada pelo back-end inferior a 0,8, tanto quanto possível.
Existem dois tipos de métricas personalizadas que pode usar:
Métricas reservadas. Existem cinco nomes de métricas reservados. Estes nomes estão reservados porque correspondem a campos predefinidos de nível superior na API ORCA.
orca.cpu_utilization
orca.mem_utilization
orca.application_utilization
orca.eps
orca.rps_fractional
As métricas
mem_utilization
,cpu_utilization
eapplication_utilization
esperam valores no intervalo de0.0 - 1.00
, mas podem exceder1.00
em cenários em que a utilização de recursos excede o orçamento.Métricas com nome. Estas são métricas exclusivas da sua aplicação que especifica através do campo ORCA
named_metrics
no seguinte formato:orca.named_metrics.METRIC_NAME
Todas as métricas personalizadas definidas pelo utilizador são especificadas através deste
named_metrics
mapa no formato de pares de nome e valor.As métricas com nome definidas para o modo de equilíbrio
CUSTOM_METRICS
têm de incluir valores no intervalo0 - 100
. As métricas com nome definidas para a política de localidade de equilíbrio de cargaWEIGHTED_ROUND_ROBIN
não têm um intervalo esperado.
Métricas obrigatórias
Para permitir que o balanceador de carga use métricas personalizadas para a seleção do grupo de instâncias de VM ou do grupo de pontos finais de rede de back-end, tem de especificar uma ou mais das seguintes métricas de utilização no relatório de carga da ORCA enviado para o balanceador de carga.
orca.named_metrics
é um mapa de métricas definidas pelo utilizador no formato de pares de nome/valor.
orca.cpu_utilization
orca.application_utilization
orca.mem_utilization
orca.named_metrics
Além disso, para permitir que o balanceador de carga use métricas personalizadas para influenciar ainda mais a seleção da instância ou do ponto final da VM de back-end, tem de fornecer todas as seguintes métricas no relatório de carga da ORCA enviado para o balanceador de carga. O balanceador de carga usa ponderações calculadas a partir destas métricas comunicadas para atribuir carga a back-ends individuais.
orca.rps_fractional
(pedidos por segundo)orca.eps
(erros por segundo)- Uma métrica de utilização com a seguinte ordem de precedência:
orca.application_utilization
orca.cpu_utilization
- Métricas definidas pelo utilizador no
orca.named_metrics
mapa
Limites e requisitos
Existe um limite de duas métricas personalizadas por back-end. No entanto, pode fazer testes
dryRun
com um máximo de três métricas personalizadas.Se forem fornecidas duas métricas, o balanceador de carga trata-as de forma independente. Por exemplo, se definir duas dimensões:
custom-metric-util1
ecustom-metric-util2
, o balanceador de carga trata-as de forma independente. Se um back-end estiver a ser executado a um nível de utilização elevado em termos decustom-metric-util1
, o balanceador de carga evita enviar tráfego para este back-end. Geralmente, o balanceador de carga tenta manter todos os back-ends em execução com aproximadamente a mesma capacidade. A ocupação é calculada da seguinte forma:currentUtilization
/maxUtilization
. Neste caso, o equilibrador de carga usa o valor de preenchimento mais elevado comunicado pelas duas métricas para tomar decisões de equilíbrio de carga.Existe um limite de duas métricas personalizadas por serviço de back-end. No entanto, pode fazer
dryRun
testes com um máximo de três métricas personalizadas. Este limite não inclui as métricasorca.eps
eorca.rps_fractional
obrigatórias. Este limite também é independente das métricas configuradas ao nível do back-end.As métricas reservadas e as métricas com nome podem ser usadas em conjunto. Por exemplo, pode fornecer
orca.cpu_utilization = 0.5
e uma métrica personalizada, comoorca.named_metrics.queue_depth_util = 0.2
, num único relatório de carregamento.Os nomes das métricas personalizadas não podem conter informações regulamentadas, sensíveis, identificáveis nem outras informações confidenciais que não devem ser vistas por pessoas externas à sua organização.
Codificações disponíveis para a especificação de métricas personalizadas
JSON
Exemplo de codificação JSON de um relatório de carregamento:
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
Para código compatível com buffers de protocolo, trata-se de um protobuf OrcaLoadReport codificado em base64 serializado binário em
endpoint-load-metrics-bin
ou emendpoint-load-metrics: BIN
.HTTP nativo
Pares de chave-valor separados por vírgulas em
endpoint-load-metrics
. Esta é uma representação de texto simplificada do 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
A especificação gRPC requer que as métricas sejam fornecidas através de metadados finais com a chave
endpoint-load-metrics-bin
.
Configuração de back-end para comunicar métricas personalizadas
Depois de determinar as métricas que quer que o balanceador de carga use, configure os seus back-ends para compilar as métricas personalizadas necessárias num relatório de carga ORCA e comunicar os respetivos valores em cada cabeçalho de resposta HTTP enviado para o balanceador de carga.
Por exemplo, se escolheu orca.cpu_utilization
como uma métrica personalizada para um back-end, esse back-end tem de comunicar a utilização atual da CPU ao equilibrador de carga em cada resposta enviada ao equilibrador de carga. Para ver instruções, consulte a secção
Comunique métricas ao equilibrador de carga nesta página.
Configuração do balanceador de carga para suportar métricas personalizadas
Para permitir que o balanceador de carga use os valores das métricas personalizadas comunicados pelos back-ends para tomar decisões de distribuição de tráfego, tem de definir o modo de balanceamento de cada back-end como CUSTOM_METRICS
e definir a política de localidade do balanceamento de carga do serviço de back-end como WEIGHTED_ROUND_ROBIN
.
CUSTOM_METRICS
modo de equilíbrio. Cada um dos seus back-ends num serviço de back-end tem de ser configurado para usar o modo de equilíbrio de cargaCUSTOM_METRICS
. Quando um back-end está configurado com o modo de equilíbrio de cargaCUSTOM_METRICS
, o equilibrador de carga direciona o tráfego para os back-ends de acordo com o limite de utilização máximo configurado para cada métrica personalizada.Cada back-end pode especificar um conjunto diferente de métricas para comunicar. Se forem configuradas várias métricas personalizadas por back-end, o balanceador de carga tenta distribuir o tráfego de forma que todas as métricas permaneçam abaixo dos limites de utilização máximos configurados.
O tráfego é balanceado de carga entre os back-ends com base no algoritmo de balanceamento de carga que escolher. Por exemplo, o algoritmo predefinido
WATERFALL_BY_REGION
tenta manter todos os back-ends em execução com a mesma capacidade.WEIGHTED_ROUND_ROBIN
política de localidade de balanceamento de carga. A política de localidade de equilíbrio de carga do serviço de back-end tem de estar definida comoWEIGHTED_ROUND_ROBIN
. Com esta configuração, o balanceador de carga também usa as métricas personalizadas para selecionar a instância ou o ponto final ideal no back-end para publicar o pedido.
Configure métricas personalizadas
Para permitir que os equilibradores de carga de aplicações usem métricas personalizadas, faça o seguinte:
- Determine as métricas personalizadas que quer usar.
- Configure os back-ends para comunicar métricas personalizadas ao equilibrador de carga. Tem de estabelecer uma stream de dados que possa ser enviada para o balanceador de carga para ser usada para o balanceamento de carga. Estas métricas têm de ser compiladas e codificadas num relatório de carregamento da ORCA e, em seguida, comunicadas ao equilibrador de carga através de cabeçalhos de resposta HTTP.
- Configure o balanceador de carga para usar os valores de métricas personalizadas comunicados pelos servidores de back-end.
Determine as métricas personalizadas
Este passo é altamente subjetivo com base nas necessidades das suas aplicações. Depois de determinar as métricas que quer usar, também tem de determinar o limite máximo de utilização para cada métrica. Por exemplo, se quiser usar a utilização de memória como uma métrica, também tem de determinar o limite máximo de utilização de memória para cada back-end.
Antes de avançar para a configuração do balanceador de carga, certifique-se de que reviu os tipos de métricas personalizadas disponíveis (reservadas e com nome) e os requisitos para a seleção de métricas, que são descritos na secção Como funcionam as métricas personalizadas nesta página.
Configure os back-ends para comunicarem métricas ao balanceador de carga
As métricas personalizadas são comunicadas aos balanceadores de carga como parte de cada resposta HTTP dos backends da sua aplicação através da norma ORCA.
Quando usa o Google Kubernetes Engine, também tem a opção de usar métricas personalizadas para balanceadores de carga.
Esta secção mostra como compilar as métricas personalizadas num relatório de carregamento do ORCA e comunicar estas métricas em cada cabeçalho de resposta HTTP enviado para o equilibrador de carga.
Por exemplo, se estiver a usar a codificação de texto HTTP, o cabeçalho tem de comunicar as métricas no seguinte formato.
endpoint-load-metrics: TEXT BACKEND_METRIC_NAME_1=BACKEND_METRIC_VALUE_1,BACKEND_METRIC_NAME_2=BACKEND_METRIC_VALUE_2
Independentemente do formato de codificação usado, certifique-se de que remove o prefixo orca.
do nome da métrica quando criar o relatório de carregamento.
Segue-se um fragmento de código que mostra como anexar duas métricas personalizadas (customUtilA
e customUtilB
) aos seus cabeçalhos HTTP. Este fragmento do código mostra a codificação de texto HTTP nativa e a codificação base64. Tenha em atenção que este exemplo codifica os valores de customUtilA
e customUtilB
apenas para simplificar.
O equilibrador de carga recebe os valores das métricas que determinou que vão influenciar o equilíbrio de carga.
...
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{"", ""}
}
}
...
Configure o equilibrador de carga para usar métricas personalizadas
Para que o equilibrador de carga use estas métricas personalizadas ao selecionar um back-end, tem de definir o modo de equilíbrio para cada back-end como CUSTOM_METRICS
.
Além disso, se quiser que as métricas personalizadas também influenciem a seleção de pontos finais, defina a política de localidade de equilíbrio de carga como WEIGHTED_ROUND_ROBIN
.
Os passos descritos nesta secção pressupõem que já implementou um equilibrador de carga com back-ends NEG zonais. No entanto, pode usar as mesmas flags --custom-metrics
demonstradas aqui para atualizar qualquer back-end existente usando o comando gcloud compute backend-services update
.
Pode definir o modo de balanceamento de um back-end como
CUSTOM_METRICS
quando adiciona o back-end ao serviço de back-end. Use a flag--custom-metrics
para especificar a sua métrica personalizada e o limite a usar para decisões de equilíbrio de carga.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'
Substitua o seguinte:
BACKEND_SERVICE_NAME
: o nome do serviço de back-endNEG_NAME
: o nome do NEG zonal ou híbridoNEG_ZONE
: a zona onde o NEG foi criadoREGION
: para balanceadores de carga regionais, a região onde o balanceador de carga foi criadoBACKEND_METRIC_NAME
: os nomes das métricas personalizadas usados aqui têm de corresponder aos nomes das métricas personalizadas comunicados pelo relatório ORCA do back-endMAX_UTILIZATION_FOR_METRIC
: a utilização máxima que os algoritmos de equilíbrio de carga têm de segmentar para cada métrica
Por exemplo, se os seus back-ends estiverem a comunicar duas métricas personalizadas,
customUtilA
ecustomUtilB
(conforme demonstrado na secção Configure back-ends to report metrics to the load balancer), use o seguinte comando para configurar o seu equilibrador de carga para usar estas métricas: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'
Em alternativa, pode fornecer uma lista de métricas personalizadas num ficheiro JSON estruturado:
{ "name": "METRIC_NAME_1", "maxUtilization": MAX_UTILIZATION_FOR_METRIC_1, "dryRun": true } { "name": "METRIC_NAME_2", "maxUtilization": MAX_UTILIZATION_FOR_METRIC_2, "dryRun": false }
Em seguida, anexe o ficheiro de métricas no formato JSON ao back-end da seguinte forma:
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 quiser testar se as métricas estão a ser comunicadas sem afetar realmente o equilibrador de carga, pode definir a flag
dryRun
comotrue
ao configurar a métrica da seguinte forma: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 uma métrica está configurada com
dryRun
definido comotrue
, a métrica é comunicada à monitorização, mas não é realmente usada pelo balanceador de carga.Para reverter esta situação, atualize o serviço de back-end com a flag
dryRun
definida comofalse
.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 todas as suas métricas personalizadas estiverem configuradas com
dryRun
definido comotrue
, definir o modo de balanceamento comoCUSTOM_METRICS
ou a política de localidade de balanceamento de carga comoWEIGHTED_ROUND_ROBIN
não tem efeito no balanceador de carga.Para configurar o balanceador de carga para usar as métricas personalizadas para influenciar a seleção de pontos finais, defina a política de localidade de balanceamento de carga do serviço de back-end como
WEIGHTED_ROUND_ROBIN
.Por exemplo, se tiver um serviço de back-end já configurado com os back-ends adequados, configure a política de localidade de equilíbrio de carga da seguinte forma:
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
Conforme demonstrado anteriormente para as métricas ao nível do back-end, também pode fornecer uma lista de métricas personalizadas num ficheiro JSON estruturado ao nível do serviço de back-end. Use o campo
--custom-metrics-file
para anexar o ficheiro de métricas ao serviço de back-end.
O que se segue?
- Resolva problemas com equilibradores de carga de aplicações externos
- Resolva problemas com equilibradores de carga de aplicações internos