O recurso ConcurrencyLimitingPolicy do conjunto de agendamento de tráfego do ASM controla o número de requisições simultâneas enviadas a um serviço para evitar sobrecarga. A política rastreia as requisições em andamento e rejeita novas entradas quando a contagem excede um limiar especificado.
Pré-requisitos
Um cluster gerenciado do Container Service for Kubernetes (ACK) deve estar adicionado à sua instância do ASM, com versão V1.21.6.97 ou posterior. Para mais informações, consulte Adicionar um cluster a uma instância do ASM.
A injeção automática de proxy sidecar deve estar ativada para o namespace padrão no cluster ACK. Para mais informações, consulte Gerencie namespaces globais.
Conecte-se ao cluster ACK usando kubectl. Para mais informações, consulte Conectar-se a um cluster ACK usando kubectl.
O conjunto de agendamento de tráfego do ASM deve estar ativado. Para mais informações, consulte Ative o conjunto de agendamento de tráfego do ASM.
A aplicação HTTPBin deve estar implantada e acessível pelo serviço sleep por meio de um gateway. Para mais informações, consulte Implantar a aplicação HTTPBin.
Etapa 1: Crie uma política de limitação de concorrência usando campos ConcurrencyLimitingPolicy
Use kubectl para se conectar à instância do ASM. Para mais informações, consulte Acessar recursos do Istio com kubectl.
-
Crie um arquivo ConcurrencyLimitPolicy.yaml com o seguinte conteúdo:
apiVersion: istio.alibabacloud.com/v1 kind: ConcurrencyLimitingPolicy metadata: name: concurrencylimit namespace: istio-system spec: concurrency_limiter: max_concurrency: 1 parameters: max_inflight_duration: 60s selectors: - service: httpbin.default.svc.cluster.localA tabela a seguir descreve alguns dos campos. Para mais informações, consulte Referência de campos ConcurrencyLimitingPolicy.
Campo
Descrição
max_concurrency
Número máximo de requisições simultâneas. No exemplo, este campo está definido como 1, indicando que o serviço pode processar apenas uma requisição por vez.
max_inflight_duration
Tempo limite para processamento da requisição. Se o conjunto de agendamento de tráfego do ASM falhar ao registrar um evento de término (por exemplo, devido ao reinício de um pod), a requisição continuará contando para o limite de concorrência. Este campo marca como concluídas as requisições sem resposta além da duração especificada, evitando que registros obsoletos bloqueiem novas entradas. Defina este valor com base no tempo máximo de resposta esperado. Neste exemplo, o campo está definido como 60s.
selectors
Serviços aos quais a política de limitação de concorrência se aplica. Neste exemplo, a política tem como alvo o serviço httpbin.default.svc.cluster.local.
-
Execute o comando a seguir para ativar a política de limitação de concorrência:
kubectl apply -f ConcurrencyLimitingPolicy.yamlSaída esperada:
concurrencylimitingpolicy.istio.alibabacloud.com/concurrencylimit created
Etapa 2: Verifique se a política de limitação de concorrência entrou em vigor
-
Execute o comando a seguir para abrir o shell do serviço sleep:
kubectl exec -it deploy/sleep -- sh -
Execute os comandos a seguir para enviar uma requisição ao backend com duração de 30 segundos e, em seguida, envie uma segunda requisição dentro desse intervalo.
curl httpbin:8000/delay/30 -I & curl httpbin:8000 -ISaída esperada:
HTTP/1.1 429 Too Many Requests date: Fri, 26 Jul 2024 13:50:55 GMT server: envoy x-envoy-upstream-service-time: 1 transfer-encoding: chunked ~ $ HTTP/1.1 200 OK server: envoy date: Fri, 26 Jul 2024 13:51:05 GMT content-type: application/json content-length: 269 access-control-allow-origin: * access-control-allow-credentials: true x-envoy-upstream-service-time: 10006 [1]+ Done curl httpbin:8000/delay/30 -IA segunda requisição recebe um código de status HTTP 429, confirmando que a política de limitação de concorrência está em vigor.
Referências
Para monitorar o ConcurrencyLimitingPolicy no Grafana, certifique-se de que a instância do Prometheus para o Grafana esteja configurada com o conjunto de agendamento de tráfego do ASM.
Importe o JSON a seguir no Grafana para criar um painel do ConcurrencyLimitingPolicy.
A figura a seguir mostra o painel.
