Configurar controles de escalonamento personalizados para serviços

Por padrão, o Cloud Run otimiza para alto desempenho com uma meta de utilização de 60% para CPU e simultaneidade, e dimensiona automaticamente o número de instâncias para processar todas as solicitações recebidas. No entanto, em alguns casos de uso, talvez seja necessário configurar quais fatores de escalonamento usar, como apenas a CPU, e definir metas personalizadas para utilização.

O Cloud Run oferece controles de escalonamento para dar mais propriedade aos comportamentos de escalonamento do seu serviço, permitindo que você tome decisões fundamentadas sobre o escalonamento da sua carga de trabalho de acordo com seus requisitos. Você pode ativar o comportamento de escalonamento otimizado mantendo as metas de utilização padrão ou configurar as seguintes metas de utilização personalizadas:

  • Meta de uso para escalonamento baseado em CPU
  • Meta de utilização para escalonamento com base na simultaneidade

Com os controles de escalonamento, é possível otimizar custos e melhorar a previsibilidade dos seus serviços. Para mais informações sobre o comportamento padrão de escalonamento automático dos serviços do Cloud Run, consulte Sobre o escalonamento automático de instâncias nos serviços do Cloud Run.

Limites de configuração

Os seguintes limites se aplicam a metas de escalonamento automático personalizadas:

Fator de escalonamento Padrão % Porcentagem mínima configurável Porcentagem máxima configurável
CPU target utilization 60% 10% 95%
Concurrency target utilization 60% 10% 95%

Ativar o comportamento de escalonamento avançado

O escalonador automático do Cloud Run responde de perto aos destinos configurados, mesmo para serviços com um número baixo de instâncias. Considere ativar esse recurso para melhorar a previsibilidade do escalonamento, mesmo que você pretenda manter as metas de utilização padrão de 60% para CPU e simultaneidade.

Para ativar, use a CLI gcloud ou YAML ao implantar uma nova revisão.

Qualquer mudança na configuração leva à criação de uma nova revisão. As próximas revisões também recebem automaticamente essa configuração, a menos que você faça atualizações explícitas para alterá-la.

gcloud

Defina os valores de utilização da CPU de destino e utilização da simultaneidade de destino de uma determinada revisão executando o seguinte comando gcloud beta run services update:

gcloud beta run services update SERVICE --scaling-cpu-target=0.6 \
--scaling-concurrency-target=0.6

SERVICE pelo nome do serviço;

YAML

  1. Se você estiver criando um novo serviço, pule esta etapa. Se você estiver atualizando um serviço existente, faça o download da configuração YAML correspondente:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Adicione os atributos run.googleapis.com/scaling-cpu-target e run.googleapis.com/scaling-concurrency-target.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
        run.googleapis.com/launch-stage: BETA
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/scaling-cpu-target: '0.6'
            run.googleapis.com/scaling-concurrency-target: '0.6'

    SERVICE pelo nome do serviço;

  3. Crie ou atualize o serviço usando o seguinte comando:

    gcloud run services replace service.yaml

    Por padrão, o comando gcloud run services replace usa o arquivo service.yaml, se ele estiver presente.

Configurar metas personalizadas

Defina metas de utilização personalizadas para otimizar custos ou melhorar a performance das suas cargas de trabalho configurando metas específicas de utilização de CPU e simultaneidade nos limites de configuração.

Qualquer mudança na configuração leva à criação de uma nova revisão. As próximas revisões também recebem automaticamente essa configuração, a menos que você faça atualizações explícitas para alterá-la.

É possível configurar controles de escalonamento usando a CLI gcloud ou YAML ao implantar uma nova revisão.

gcloud

Atualize os valores de uso da CPU de destino e uso de simultaneidade de destino de uma determinada revisão executando o comando gcloud beta run services update.

  • Para atualizar a utilização da CPU de destino, execute o seguinte comando:

    gcloud beta run services update SERVICE --scaling-cpu-target=CPU_TARGET

    Substitua:

    • SERVICE: o nome do serviço.

    • CPU_TARGET: a meta de uso da CPU. Especifique um valor de 0,1 a 0,95. Só é possível configurar até dois dígitos após o ponto decimal.

  • Para atualizar a utilização da simultaneidade de destino, execute o seguinte comando:

    gcloud beta run services update SERVICE --scaling-concurrency-target=CONCURRENCY_TARGET

    Substitua:

    • SERVICE: o nome do serviço.

    • CONCURRENCY_TARGET: a meta de uso de simultaneidade. Especifique um valor de 0,1 a 0,95. Só é possível configurar até dois dígitos após o ponto decimal.

  • Para atualizar a CPU de destino e a utilização da simultaneidade, execute o seguinte comando:

    gcloud beta run services update SERVICE --scaling-cpu-target=CPU_TARGET \
    --scaling-concurrency-target=CONCURRENCY_TARGET

    Substitua:

    • SERVICE: o nome do serviço.
    • CPU_TARGET: a meta de uso da CPU. Especifique um valor de 0,1 a 0,95. Só é possível configurar até dois dígitos após o ponto decimal.
    • CONCURRENCY_TARGET: a meta de uso de simultaneidade. Especifique um valor de 0,1 a 0,95. Só é possível configurar até dois dígitos após o ponto decimal.

YAML

  1. Se você estiver criando um novo serviço, pule esta etapa. Se você estiver atualizando um serviço existente, faça o download da configuração YAML correspondente:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Para atualizar a meta de uso da CPU e da simultaneidade, adicione os atributos run.googleapis.com/scaling-cpu-target e run.googleapis.com/scaling-concurrency-target:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
        run.googleapis.com/launch-stage: BETA
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/scaling-cpu-target: 'CPU_TARGET'
            run.googleapis.com/scaling-concurrency-target: 'CONCURRENCY_TARGET'

    Substitua:

    • SERVICE: o nome do serviço.
    • CPU_TARGET: a meta de uso da CPU. Especifique um valor de 0,1 a 0,95. Só é possível configurar até dois dígitos após o ponto decimal.
    • CONCURRENCY_TARGET: a meta de uso de simultaneidade. Especifique um valor de 0,1 a 0,95. Só é possível configurar até dois dígitos após o ponto decimal.
  3. Crie ou atualize o serviço usando o seguinte comando:

    gcloud run services replace service.yaml

    Por padrão, o comando gcloud run services replace usa o arquivo service.yaml, se ele estiver presente.

Desativar controles de escalonamento

É possível desativar as metas de utilização da CPU ou de simultaneidade, mas não ambas. Um fator de escalonamento precisa estar sempre ativo. Para desativar os controles de escalonamento, restaure os valores de utilização padrão em vez de desativá-los. Quando você desativa um driver de escalonamento, o Cloud Run ignora essa métrica ao tomar decisões de escalonamento.

É possível desativar os controles de escalonamento usando a CLI gcloud ou YAML ao implantar uma nova revisão.

gcloud

É possível desativar a utilização da CPU de destino ou a utilização da simultaneidade de destino executando o comando gcloud beta run services update.

  • Para escalonar apenas por CPU, desative a meta de simultaneidade executando o seguinte comando:

    gcloud beta run services update SERVICE --scaling-concurrency-target=disabled

    SERVICE pelo nome do serviço;

  • Para escalonar apenas por simultaneidade, desative a meta de CPU executando o seguinte comando:

    gcloud beta run services update SERVICE --scaling-cpu-target=disabled

    SERVICE pelo nome do serviço;

YAML

  1. Se você estiver criando um novo serviço, pule esta etapa. Se você estiver atualizando um serviço existente, faça o download da configuração YAML correspondente:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Para escalonar apenas por CPU, desative a meta de simultaneidade definindo o atributo run.googleapis.com/scaling-concurrency-target como disabled:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
        run.googleapis.com/launch-stage: BETA
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/scaling-concurrency-target: disabled

    SERVICE pelo nome do serviço;

  3. Para escalonar apenas por simultaneidade, desative a meta de CPU definindo o atributo run.googleapis.com/scaling-cpu-target como disabled:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
        run.googleapis.com/launch-stage: BETA
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/scaling-cpu-target: disabled

    SERVICE pelo nome do serviço;

  4. Crie ou atualize o serviço usando o seguinte comando:

    gcloud run services replace service.yaml

    Por padrão, o comando gcloud run services replace usa o arquivo service.yaml, se ele estiver presente.

Restaurar para valores padrão

Ao restaurar os valores de utilização da CPU ou da simultaneidade de destino para o padrão, você desativa o recurso de controles de escalonamento. É possível restaurar os controles de escalonamento para o padrão usando a CLI gcloud ou YAML ao implantar uma nova revisão.

gcloud

Restaure a meta de uso da CPU e a meta de uso da simultaneidade para os valores padrão executando o comando gcloud beta run services update.

  • Para restaurar a meta de utilização da CPU para o valor padrão, execute o seguinte comando:

    gcloud beta run services update SERVICE --scaling-cpu-target=default

    SERVICE pelo nome do serviço;

  • Para restaurar a utilização da simultaneidade de destino para o valor padrão, execute o comando a seguir:

    gcloud beta run services update SERVICE --scaling-concurrency-target=default

    SERVICE pelo nome do serviço;

  • Para restaurar a meta de uso da CPU e a meta de simultaneidade aos valores padrão, execute o seguinte comando:

    gcloud beta run services update SERVICE --scaling-cpu-target=default \
    --scaling-concurrency-target=default

    SERVICE pelo nome do serviço;

YAML

  1. Se você estiver criando um novo serviço, pule esta etapa. Se você estiver atualizando um serviço existente, faça o download da configuração YAML correspondente:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Para restaurar a utilização de CPU e simultaneidade aos destinos padrão, remova os atributos run.googleapis.com/scaling-cpu-target e run.googleapis.com/scaling-concurrency-target do arquivo YAML:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
        run.googleapis.com/launch-stage: BETA
      name: SERVICE
    spec:
      template:
        metadata:
          # Remove the scaling target annotations to restore defaults
        ...

    SERVICE pelo nome do serviço;

  3. Crie ou atualize o serviço usando o seguinte comando:

    gcloud run services replace service.yaml

    Por padrão, o comando gcloud run services replace usa o arquivo service.yaml, se ele estiver presente.

Ver a configuração de escalonamento

É possível conferir a configuração de escalonamento usando a CLI gcloud ou YAML.

Console

  1. No console do Google Cloud , acesse a página Serviços do Cloud Run:

    Acessar o Cloud Run

  2. Clique no serviço para abrir o painel Detalhes do serviço.

  3. Clique na guia Revisões.

  4. No painel de detalhes à direita, confira a configuração Métricas de escalonamento automático listada na guia Contêineres.

gcloud

  1. Use o comando a seguir:

    gcloud run services describe SERVICE

    SERVICE pelo nome do serviço;

  2. Localize os valores das configurações Utilização da CPU de destino e Utilização da simultaneidade de destino na configuração retornada.

Práticas recomendadas

É possível otimizar os custos e evitar o escalonamento excessivo diminuindo o número de instâncias ou melhorar o desempenho escalonando de forma mais agressiva em resposta a drivers específicos. Para determinar as metas de utilização ideais para sua carga de trabalho, use as seguintes estratégias:

  • Antes de ajustar as metas, identifique qual métrica está acionando o escalonamento do serviço. Siga estas etapas para identificar a métrica de escalonamento:

    1. Acesse o Metrics Explorer no console do Google Cloud para analisar o gráfico de monitoramento do uso da CPU e da simultaneidade.

    2. Pesquise e selecione a métrica run.googleapis.com/scaling/recommended_instances e defina Agregação como Não agregado para ver a métrica agrupada por variável de escalonamento.

    O driver com o valor mais alto é o que controla a contagem de instâncias do seu serviço. Se você quiser que um motorista diferente tenha prioridade ou se quiser aumentar ou diminuir a escala de forma mais ou menos agressiva, ajuste a meta de utilização para esse motorista específico.

  • Ajuste as metas de forma incremental e aguarde alguns minutos entre os ajustes para observar o efeito na performance.

  • Use a divisão de tráfego para testar novas metas de escalonamento direcionando uma pequena porcentagem do tráfego para uma revisão separada antes de lançá-las para todo o serviço.

Sobre metas de baixa utilização

Diminuir a meta de utilização para o mínimo de 0,1 (10%) muda significativamente a forma como seu serviço é escalonado.

Os benefícios de definir uma meta de baixa utilização incluem:

  • Alta disponibilidade de serviço: seu serviço é escalonado muito antes, mantendo um grande buffer de capacidade ociosa para lidar com picos repentinos de tráfego sem afetar a latência.

  • Escalonamento mais rápido com baixa contagem de instâncias: os serviços são escalonados de maneira mais confiável antes de atingir gargalos de alta utilização.

As desvantagens de definir metas de utilização baixas incluem:

  • Possibilidade de aumento de custos: você executa mais instâncias do que o estritamente necessário para sua carga atual, o que resulta em um faturamento maior.
  • Decisões de escalonamento mais frequentes: em utilizações mais baixas, o Cloud Run tem uma tolerância menor e não espera tanto tempo antes de escalonar.

A seguir