Use o recurso de aquecimento do ASM ao escalar horizontalmente sua aplicação, implantar uma nova versão ou prever um pico de tráfego. Esse recurso aumenta gradualmente o tráfego de requisições para novas instâncias dentro de uma janela de tempo personalizada. O processo garante uma transição suave e reduz o risco de interrupções de serviço, tempos limite de requisição e perda de dados causados por aumentos repentinos de tráfego. Além disso, ajuda a manter o desempenho estável e a alta disponibilidade durante o dimensionamento e as atualizações da aplicação.
Pré-requisitos
Você criou uma instância do ASM Enterprise Edition ou ASM Ultimate Edition da versão 1.14.3 ou posterior. Para mais informações, consulte Criar uma instância do ASM.
Você se conectou a um cluster do Container Service for Kubernetes (ACK) usando kubectl. Para mais informações, consulte Obter o arquivo kubeconfig de um cluster e usar kubectl para conectar-se ao cluster.
Você criou um gateway de entrada do ASM. Para mais informações, consulte Criar um serviço de gateway de entrada.
Você implantou a aplicação de exemplo Bookinfo. Este tópico usa o serviço Reviews como exemplo. Para mais informações, consulte Implantar uma aplicação em um cluster associado a uma instância do ASM.
Informações de fundo
Sem o recurso de aquecimento, novos pods recebem imediatamente sua parcela total de tráfego, sem aumento gradual. Isso pode ser problemático para serviços que exigem um período de aquecimento para atingir o desempenho ideal, como aplicações baseadas em JVM que precisam realizar compilação Just-In-Time (JIT) ou preencher caches grandes. Essa carga repentina pode causar tempos limite de requisição, perda de dados e degradação da experiência do usuário. O recurso de aquecimento resolve esse problema introduzindo tráfego gradualmente nas novas instâncias, permitindo que elas se preparem para atender requisições com capacidade total.
Recurso de aquecimento
O recurso de aquecimento, também conhecido como início lento ou aumento progressivo de tráfego, permite configurar um período de tempo para um serviço. Quando uma instância de serviço é iniciada, o cliente envia uma fração da carga de requisições para essa instância e aumenta gradualmente a taxa de requisições durante a duração configurada. Ao final do período de aquecimento, a instância passa a receber sua parcela total de tráfego.
No modo de início lento, novos pods são protegidos contra sobrecarga por picos repentinos de requisições. Isso permite que as novas instâncias realizem o aquecimento durante um período de rampa antes de receberem sua cota integral de tráfego.
Esse recurso é útil para aplicações que dependem de cache e necessitam de um período de preparação para responder às requisições com desempenho otimizado. No ASM, basta configurar a seção trafficPolicy/loadBalancer da DestinationRule correspondente ao serviço. Observe os seguintes parâmetros:
loadBalancer: especifica as configurações do balanceador de carga. Este recurso suporta apenas os balanceadores ROUND_ROBIN e LEAST_REQUEST.
warmupDurationSecs: define a duração do aquecimento para o serviço. Se configurado, um endpoint de serviço recém-criado permanece no modo de aquecimento por essa duração, contada a partir do momento de sua criação. Durante essa janela, o Istio aumenta gradualmente o tráfego para o endpoint, em vez de enviar imediatamente uma parcela proporcional de tráfego.
O recurso de aquecimento exige que o número de réplicas da aplicação na zona de disponibilidade atual não seja zero. Por exemplo:
Se o cluster do plano de dados tiver apenas uma zona de disponibilidade, Zona A, e houver atualmente uma réplica nessa zona, o recurso de aquecimento entrará em vigor quando uma segunda réplica for iniciada.
Caso o cluster do plano de dados possua duas zonas de disponibilidade, Zona A e Zona B, e a única réplica existente esteja na Zona A, iniciar uma segunda réplica na Zona B não acionará o recurso de aquecimento. Isso pode ocorrer porque alguns agendadores distribuem réplicas entre zonas de disponibilidade por padrão. Nesse cenário, o recurso de aquecimento entrará em vigor quando uma terceira réplica for iniciada.
A seguir, um exemplo de DestinationRule no formato YAML:
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: mocka
spec:
host: mocka
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
warmupDurationSecs: 100s
Etapa 1: Configurar roteamento e acessar o gateway
Para demonstração, escale as réplicas do Deployment reviews-v3 para 0.
-
Defina os recursos de entrada.
-
Crie um arquivo chamado bookinfo-gateway.yaml com o seguinte conteúdo.
-
Execute o comando a seguir para implantar o gateway e o serviço virtual.
kubectl apply -f bookinfo-gateway.yaml
-
-
Crie a DestinationRule para o serviço Reviews.
-
Crie um arquivo chamado reviews.yaml com o seguinte conteúdo.
-
Execute o comando a seguir para implantar a DestinationRule.
kubectl apply -f reviews.yaml
-
-
Ative a topologia de malha e acesse continuamente o endereço do gateway de entrada.
Este tópico utiliza o comando
heypara enviar requisições de teste de carga por 10s. Para obter informações sobre como baixar e instalar ohey, consulte hey. Para mais detalhes sobre como ativar e visualizar a topologia de malha, veja Visualizar a topologia de malha de uma aplicação.hey -z 10s -q 100 -c 4 http://${INGRESS_GATEWAY_ADDRESS}/reviews/0A figura a seguir mostra um exemplo de topologia de chamadas:

Etapa 2: Observar a inicialização do pod
Faça login no console do ASM.
No painel de navegação à esquerda, escolha .
Na página Mesh Management, localize a instância do ASM que deseja configurar. Clique no nome da instância do ASM ou clique em Manage na coluna Actions.
-
No painel de navegação à esquerda, escolha .
Para instâncias do ASM anteriores à versão 1.17.2.35: Na página Monitoring metrics, clique na aba Monitoring instrument, depois clique na aba Cloud ASM Istio Service e selecione o serviço Reviews.
Para instâncias do ASM da versão 1.17.2.35 e posteriores: Na página Monitoring metrics, clique na aba Cloud ASM Istio Work load, selecione o workload
reviews-v3e defina Reporter comosource.
-
Envie requisições de teste de carga e observe os dados de monitoramento.
Com o recurso de aquecimento desativado, escale as réplicas do Deployment
reviews-v3de 0 para 1.-
Execute o comando a seguir para enviar requisições de teste de carga ao gateway de entrada.
Este exemplo envia requisições de teste de carga por 120s.
hey -z 120s -q 100 -c 4 http://${INGRESS_GATEWAY_ADDRESS}/reviews/0 -
Observe os dados no painel de monitoramento do Prometheus.
Leva cerca de 45 segundos para que o pod
reviews-v3receba uma parcela equilibrada de requisições. O tempo real pode variar dependendo do seu ambiente de teste de carga.
Escale as réplicas do Deployment
reviews-v3de volta para 0.
Etapa 3: Ativar o recurso de aquecimento
-
Atualize o arquivo reviews.yaml com o seguinte conteúdo.
Adicione o campo
warmupDurationSecse defina-o como120s, o que estabelece a duração do aquecimento em 120 segundos.apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: reviews spec: host: reviews trafficPolicy: loadBalancer: simple: ROUND_ROBIN warmupDurationSecs: 120s -
Execute o comando a seguir para aplicar a atualização.
kubectl apply -f reviews.yaml
Etapa 4: Verificar o efeito do aquecimento
Após ativar o recurso de aquecimento, escale as réplicas do Deployment
reviews-v3de 0 para 1.-
Execute o comando a seguir para enviar requisições de teste de carga ao gateway de entrada.
Este exemplo envia requisições de teste de carga por 150s.
hey -z 150s -q 100 -c 4 http://${INGRESS_GATEWAY_ADDRESS}/reviews/0 -
Na aba Cloud ASM Istio Service, observe os dados no painel de monitoramento do Prometheus.
Leva cerca de 120 segundos para que o pod
reviews-v3receba uma parcela equilibrada de requisições. O tempo real pode variar dependendo do seu ambiente de teste de carga.
A curva pode parecer escalonada porque as métricas são coletadas em intervalos. Na realidade, o tráfego para o pod reviews-v3aumenta suavemente. Se você ativar a coleta de logs do sidecar, poderá pesquisar os logs desse sidecar no Simple Log Service (SLS) para visualizar o volume de logs nos últimos 5 minutos.
Conforme esperado com o recurso de aquecimento, uma nova instância recebe inicialmente uma fração do tráfego, que então aumenta suavemente durante a duração configurada até atingir sua parcela total.Depois que o recurso de aquecimento é ativado, leva cerca de 2 minutos e 30 segundos para que o tráfego seja distribuído uniformemente entre as versões v1, v2 e v3. Na visualização Service Graph do Kiali, o istio-ingressgateway distribui o tráfego quase igualmente entre as versões v1, v2 e v3 do serviço Reviews, com 33,3%, 33,3% e 33,4%, respectivamente. As versões v2 e v3 então chamam o serviço ratings v1, o que indica que o tráfego está equilibrado após a conclusão do aquecimento.
Documentos relacionados
Configure limitação local ou global para manter o tráfego dentro de um limiar gerenciável, garantindo a disponibilidade do serviço e o desempenho estável. Para mais informações, consulte Configurar limitação local no centro de gerenciamento de tráfego e Usar ASMGlobalRateLimiter para configurar limitação global para tráfego de entrada de uma aplicação.
O ASMAdaptiveConcurrency fornece controle de concorrência adaptativo ajustando dinamicamente o número permitido de requisições simultâneas com base em dados de requisições amostradas. Quando o número de requisições simultâneas excede a capacidade do serviço, as requisições são rejeitadas para proteger o serviço. Para mais informações, consulte Usar ASMAdaptiveConcurrency para controle de concorrência adaptativo.
Configure um pool de conexões para implementar disjuntores (circuit breaking), protegendo seu sistema contra danos adicionais em caso de falha ou sobrecarga. Para mais informações, consulte Configurar um pool de conexões para disjuntor.