A limitação de taxa permite o controle preciso do tráfego para lidar com picos de tráfego, sobrecarga de serviços, esgotamento de recursos e ataques maliciosos. Isso protege a estabilidade dos serviços de backend, reduz custos e melhora a experiência do usuário.
Conceitos de limitação de taxa
A limitação de taxa restringe o número de requisições enviadas a um serviço em um determinado período, como 300 requisições por minuto ou 10 requisições por segundo. Isso impede que requisições excessivas de um IP de cliente específico ou de clientes globais sobrecarreguem o serviço.
Por exemplo, ao limitar o número de requisições enviadas a um serviço para 300 por minuto, a 301ª requisição é negada e o sistema retorna o código de status HTTP 429, o qual indica excesso de requisições.
Modos de limitação de taxa
Os proxies Envoy suportam dois modos de limitação de taxa: local e global. O modo local restringe a taxa de requisições de cada instância de serviço, enquanto o modo global usa um serviço gRPC global para impor limites em toda a instância do Service Mesh (ASM). Combine ambos os modos para aplicar diferentes níveis de controle.
|
Modo |
Descrição |
Referências |
|
Limitação de taxa local |
|
|
|
Limitação de taxa global ou distribuída |
|
Como a limitação de taxa local funciona
Um proxy Envoy usa o algoritmo de token bucket para implementar a limitação de taxa local. O sistema adiciona tokens a um bucket a uma taxa constante, e cada requisição recebida consome um token. Quando o bucket está vazio, o sistema nega as requisições subsequentes. Em geral, especifique os seguintes parâmetros:
O intervalo de preenchimento do bucket
A quantidade de tokens adicionados ao bucket em cada intervalo
Por padrão, um proxy Envoy retorna o código de status HTTP 429 ao negar uma requisição e define o cabeçalho x-envoy-ratelimited. Você pode personalizar o código de status HTTP e o cabeçalho de resposta.
Atente-se aos seguintes conceitos ao usar a limitação de taxa:
http_filter_enabled: indica a porcentagem de requisições em que o sistema verifica o limite de taxa local, mas não o impõe.
http_filter_enforcing: indica a porcentagem de requisições em que o sistema aplica ou impõe o limite de taxa local.
Defina os valores como porcentagens. Por exemplo, defina http_filter_enabled como 10% das requisições e http_filter_enforcing como 5%. Dessa forma, você testa o efeito da limitação de taxa antes de aplicá-la a todas as requisições.
Como a limitação de taxa global funciona
A limitação global controla as taxas de requisição em uma instância do ASM por meio do serviço de limitação de taxa do Envoy. Esse serviço processa o tráfego centralmente e impõe limites com base em regras e cotas predefinidas.
A configuração da limitação global envolve duas partes: o filtro rate_limits do Envoy e a configuração do serviço de limitação de taxa.
O filtro rate_limits contém uma lista de
actions. Um proxy Envoy tenta corresponder cada requisição a cada ação no filtro rate_limits, e o sistema gera um descritor para cada ação. Um descritor consiste em um conjunto de entradas que correspondem a uma ação. Cada entrada de descritor é um par chave-valor, como"descriptor-key-1": "descriptor-value-1"e"descriptor-key-2": "descriptor-value-2". Para mais informações, consulte config-http-filters-rate-limit.O sistema compara a configuração do serviço de limitação de taxa com a entrada de descritor gerada para cada requisição. Essa configuração especifica o limite de taxa para um conjunto específico de entradas de descritor. O serviço de limitação de taxa interage com o cache Redis para determinar se deve limitar as taxas das requisições e envia a decisão de limitação para o proxy Envoy.
Juntos, o filtro rate_limits e o serviço de limitação de taxa implementam a limitação global. O filtro gera um descritor com base na ação configurada e o envia para o serviço de limitação de taxa, que determina o limite aplicável e retorna uma resposta de limitação. Esse mecanismo oferece controle total sobre as taxas de requisição e protege os serviços de backend contra picos de tráfego.