Configurar controles de escalonamento personalizados para serviços

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

O Cloud Run oferece controles de escalonamento para que você tenha mais controle sobre os comportamentos de escalonamento do serviço, permitindo que você tome decisões informadas sobre o escalonamento da carga de trabalho de acordo com seus requisitos. É possível ativar o comportamento de escalonamento aprimorado mantendo as metas de utilização padrão ou configurar as seguintes metas de utilização personalizadas:

  • Meta de utilização para escalonamento baseado em CPU
  • Meta de utilização para escalonamento baseado em simultaneidade

Com os controles de escalonamento, é possível otimizar os custos e melhorar a previsibilidade dos serviços. Para mais informações sobre o comportamento de escalonamento automático padrão 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 limites a seguir se aplicam a metas de escalonamento personalizadas:

Driver de escalonamento Padrão % Mínimo configurável % Máximo configurável %
CPU target utilization 60% 10% 95%
Concurrency target utilization 60% 10% 95%

Ativar o comportamento de escalonamento aprimorado

O escalonador automático do Cloud Run responde de perto às metas configuradas, 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 o 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 de 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

Substitua 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'

    Substitua SERVICE pelo nome do serviço.

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

    gcloud run services replace service.yaml

Configurar metas personalizadas

Defina metas de utilização personalizadas para otimizar os custos ou melhorar o desempenho para suas cargas de trabalho configurando metas específicas de utilização de CPU e simultaneidade dentro dos 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 o YAML ao implantar uma nova revisão.

gcloud

Atualize os valores de utilização da CPU de destino e 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 utilização 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 utilização da 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 utilização 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 utilização da 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 CPU de destino e a utilização 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 utilização 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 utilização da 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

Desativar controles de escalonamento

É possível desativar as metas de utilização da CPU ou da simultaneidade, mas não ambas. Um driver de escalonamento sempre precisa estar 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 controles de escalonamento usando a CLI gcloud ou o YAML quando você 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 pela CPU, desative a meta de simultaneidade executando o seguinte comando:

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

    Substitua SERVICE pelo nome do serviço.

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

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

    Substitua 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 pela 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

    Substitua SERVICE pelo nome do serviço.

  3. Para escalonar apenas pela 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

    Substitua SERVICE pelo nome do serviço.

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

    gcloud run services replace service.yaml

Restaurar para valores padrão

Ao restaurar os valores de utilização da CPU de destino 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 o YAML ao implantar uma nova revisão.

gcloud

Restaure a utilização da CPU de destino e a utilização da simultaneidade de destino para os padrões executando o comando gcloud beta run services update.

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

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

    Substitua SERVICE pelo nome do serviço.

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

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

    Substitua SERVICE pelo nome do serviço.

  • Para restaurar a utilização da CPU de destino e a simultaneidade de destino para os valores padrão, execute o seguinte comando:

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

    Substitua 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 da CPU e da simultaneidade para as metas 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
        ...

    Substitua SERVICE pelo nome do serviço.

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

    gcloud run services replace service.yaml

Conferir a configuração de escalonamento

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

Console

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

    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

    Substitua SERVICE pelo nome do serviço.

  2. Localize o valor 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 noconsole para analisar o gráfico de monitoramento da utilização da CPU e da simultaneidade. Google Cloud

    2. Pesquise e selecione a métrica run.googleapis.com/scaling/recommended_instances e defina Agregação como Não agregada para conferir a métrica agrupada por driver de escalonamento.

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

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

  • 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 implementá-las em 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 o serviço é escalonado.

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

  • Alta disponibilidade de serviço: o serviço é escalonado muito mais cedo, mantendo um grande buffer de capacidade inativa para lidar com picos repentinos de tráfego sem atingir a latência.

  • Escalonamento mais rápido em contagens de instâncias baixas: os serviços são escalonados de forma mais confiável antes de atingir gargalos de alta utilização.

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

  • Possibilidade de aumento de custos: você executa mais instâncias do que o estritamente necessário para sua carga atual, o que leva a 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