La limitación de tráfico permite un control preciso para manejar picos de tráfico, sobrecargas de servicio, agotamiento de recursos y ataques maliciosos. Esta función protege la estabilidad de los servicios de backend, reduce costos y mejora la experiencia del usuario.
Conceptos de la limitación de tráfico
La limitación de tráfico restringe la cantidad de solicitudes enviadas a un servicio durante un periodo determinado, por ejemplo, 300 solicitudes por minuto o 10 solicitudes por segundo. Esto evita que un servicio se sobrecargue debido a un exceso de solicitudes provenientes de una dirección IP de cliente específica o de clientes globales.
Por ejemplo, si limita a 300 el número de solicitudes enviadas a un servicio por minuto, la solicitud número 301 se rechaza. Al mismo tiempo, se devuelve el código de estado HTTP 429, que indica un exceso de solicitudes.
Modos de limitación de tráfico
Los proxy de Envoy admiten dos modos de limitación de tráfico: local y global. La limitación local restringe la tasa de solicitudes de cada instancia de servicio. La limitación global utiliza un servicio gRPC global para aplicar límites de tasa en toda la instancia de Service Mesh (ASM). Puede combinar ambos modos para aplicar distintos niveles de limitación.
|
Modo |
Descripción |
Referencias |
|
Limitación local |
|
|
|
Limitación global o distribuida |
|
Funcionamiento de la limitación local
Un proxy de Envoy utiliza el algoritmo de bucket de tokens para implementar la limitación local. Los token se agregan a un bucket a una velocidad constante y cada solicitud entrante consume uno. Cuando el bucket se vacía, las solicitudes posteriores se rechazan. Por lo general, debe especificar los parámetros a continuación:
El intervalo con el que se llena el bucket
La cantidad de token que se agregan al bucket en cada intervalo
De forma predeterminada, un proxy de Envoy devuelve el código de estado HTTP 429 cuando se rechaza una solicitud y se establece el encabezado x-envoy-ratelimited. Puede personalizar el código de estado HTTP y el encabezado de respuesta.
Tenga en cuenta los conceptos a continuación cuando utilice la función de limitación de tráfico:
http_filter_enabled: indica el porcentaje de solicitudes para las cuales se comprueba el límite de tasa local, pero no se aplica.
http_filter_enforcing: indica el porcentaje de solicitudes sobre las cuales se aplica o se hace cumplir el límite de tasa local.
Establezca estos valores como porcentajes. Por ejemplo, puede establecer http_filter_enabled en el 10 % de las solicitudes y http_filter_enforcing en el 5 %. De esta manera, podrá probar el efecto de la limitación antes de aplicarla a todas las solicitudes.
Funcionamiento de la limitación global
La limitación global controla las tasas de solicitudes en toda una instancia de ASM mediante el servicio de límite de tasa de Envoy. Este servicio procesa el tráfico de forma centralizada y aplica los límites según reglas y cuotas predefinidas.
Configurar la limitación global implica dos partes: el filtro rate_limits de Envoy y la configuración del servicio de límite de tasa.
El filtro rate_limits contiene una lista de
actions. Un proxy de Envoy intenta hacer coincidir cada solicitud con cada acción del filtro rate_limits y genera un descriptor por cada una. Un descriptor consta de un conjunto de entradas de descriptor que corresponden a una acción. Cada entrada de descriptor es un par clave-valor, como"descriptor-key-1": "descriptor-value-1"y"descriptor-key-2": "descriptor-value-2". Para obtener más información, consulte config-http-filters-rate-limit.La configuración del servicio de límite de tasa se compara con la entrada de descriptor generada para cada solicitud. Dicha configuración especifica el límite de tasa para un conjunto particular de entradas de descriptor. El servicio interactúa con la caché de Redis para determinar si debe limitar las tasas de las solicitudes y envía la decisión de limitación al proxy de Envoy.
En conjunto, el filtro rate_limits y el servicio de límite de tasa implementan la limitación global. El filtro genera un descriptor basado en la acción configurada y lo envía al servicio de límite de tasa, el cual determina el límite aplicable y devuelve una respuesta de limitación. Este mecanismo le otorga control total sobre las tasas de solicitudes y protege los servicios de backend contra los picos de tráfico.