Acerca de API Gateway (4): limitación actual
En términos sencillos, el control de flujo es una estrategia para controlar las solicitudes de los usuarios, que incluye principalmente: permisos, limitación actual y programación del tráfico.
Los permisos se analizaron en el artículo anterior. Este artículo hablará sobre la limitación actual y el próximo artículo hablará sobre la programación del tráfico.
La limitación actual se refiere a limitar la frecuencia (QPS/QPM) o el número de llamadas de los usuarios.
Desde la perspectiva de los usuarios u operadores, el efecto más intuitivo de las restricciones de tráfico es el cobro.
Las API externas de las principales plataformas abiertas generalmente tienen alguna cuota gratuita que se puede utilizar para fines personales. Una vez que desee realizar llamadas a gran escala, deberá pagar una cuota mayor (frecuencia, cantidad de veces) y se le cobrará de acuerdo con la cantidad o frecuencia de las llamadas. Una vez superado el límite, las llamadas quedarán restringidas.
De hecho, este es el mayor uso de la limitación actual, pero los usuarios o estudiantes de operación no son conscientes de ello, por lo que la mayoría de la gente no lo entiende bien.
Detrás de la puerta de enlace hay varios servicios y las interfaces de cada servicio están expuestas a través de la puerta de enlace para que los usuarios las llamen. En teoría, el tráfico de usuarios es impredecible y puede haber una ola en cualquier momento. Una vez que el tráfico pico excede la capacidad de carga del servicio, el servicio dejará de funcionar. Por ejemplo, una cierta ola de Weibo ocurre cuando ocurren grandes noticias. los últimos años.
Por lo tanto, la puerta de enlace debe garantizar que el tráfico pasado al servicio de fondo no exceda el límite superior que el servicio puede transportar. Este límite superior se negocia entre la puerta de enlace y cada servicio.
De simple a difícil, la limitación de corriente se puede dividir en limitación de corriente de una sola máquina, limitación de corriente de un solo clúster y limitación de corriente de un clúster completo.
Aquí no discutiremos algoritmos limitantes actuales específicos, como depósitos con fugas y depósitos de tokens, solo conceptos e ideas.
La idea de limitación de corriente de una sola máquina es muy simple, es decir, el valor límite de corriente de cada máquina x el número de máquinas = el valor límite de corriente total.
Por ejemplo, si el límite de QPS del usuario A es 100 y la puerta de enlace ha implementado 10 máquinas, entonces cada máquina se puede limitar a 10 QPS.
Hablemos primero de los beneficios. Este método es muy simple de implementar. Cada máquina puede calcular qps en la memoria local. Si se excede el umbral, se denegará el flujo.
Sin embargo, las deficiencias de la limitación de corriente de una sola máquina también son muy obvias, y se reflejan principalmente en dos puntos:
Cuando cambia el número de máquinas implementadas en la puerta de enlace, el valor límite actual de cada máquina debe basarse en el ajuste del número de máquina. En realidad, es común que la cantidad de máquinas cambie debido a la expansión, la contracción, el tiempo de inactividad de la máquina y otras razones.
? La premisa de la limitación del tráfico de una sola máquina es que el tráfico de usuarios transportado por cada puerta de enlace es promedio, pero de hecho, en ciertos momentos, el tráfico de usuarios no se distribuye de manera completamente uniforme en cada máquina.
Por ejemplo:
Hay 10 máquinas, cada una con un límite de qps de 10, y el qps real de 3 de ellas es 15. Debido a que se excede el límite, el tráfico de usuarios es rechazado. Los qps de cada una de las 7 unidades restantes son 7. De esta manera, los qps totales del usuario = 15 * 3 + 7 * 7 = 94. Los qps del usuario no excedieron el límite, pero se rechazó parte del tráfico, lo cual es muy problemático.
De hecho, el umbral del límite actual de un solo dispositivo también se establecerá un poco más alto para compensar el problema del tráfico desigual.
Debido a los problemas anteriores, la limitación de corriente de una sola máquina generalmente se usa como método de respaldo y la mayoría de las veces se usa la limitación de corriente del clúster.
Primero veamos un diagrama esquemático:
En comparación con la limitación de corriente de una sola máquina, el trabajo de conteo de la limitación de corriente del clúster se traslada al clúster de Redis, lo que resuelve las deficiencias de Limitación de corriente de una sola máquina.
Sin embargo, la limitación de corriente del clúster no es perfecta, porque se introduce redis. Luego, cuando la red entre la puerta de enlace y redis tiembla o el propio redis falla, la limitación de corriente del clúster será ineficaz. todavía tienes que confiar en el límite actual de una sola máquina para ahorrar dinero.
En otras palabras, la combinación de limitación de corriente del clúster + limitación de corriente de una sola máquina es una solución más confiable.
A continuación, pensemos en este tema: las puertas de enlace grandes generalmente se implementan en varias salas de computadoras y en varias regiones. Por supuesto, los servicios de back-end también se implementan en varias salas de computadoras y en varias regiones. servicios, la limitación de corriente del clúster es suficiente. Pero para los usuarios, todavía hay algunos problemas:
Por ejemplo, el límite superior de QPS comprado por los usuarios es 30. Nuestras puertas de enlace están implementadas en tres regiones del norte, centro y sur de China. estos 30 QPS?
El promedio definitivamente no es suficiente. El tráfico del usuario puede estar obviamente desequilibrado. Por ejemplo, el negocio del usuario se concentra principalmente en el norte de China, entonces la mayor parte del tráfico del usuario ingresará por la puerta de enlace del norte. la puerta de enlace limita el QPS a 10, los usuarios definitivamente vendrán a quejarse.
¿Está bien limitarlo a 30 en cada región? No, si el tráfico del usuario se distribuye de manera relativamente uniforme en varias regiones, entonces el usuario compró 30QPS, pero en realidad puede usar 90QPS, lo cual es una gran pérdida.
Según la idea de resolver el flujo desigual del límite de corriente de una sola máquina, ¿está bien construir un clúster de Redis público para contar?
No, limitado por la velocidad de propagación de la señal y el vasto territorio de China, definitivamente no es realista contar cada tráfico. Si rt es demasiado alto, el límite actual no tendrá sentido y el costo del ancho de banda aumentará. extremadamente caro, los requisitos de especificación para redis también serán muy altos. En definitiva, es muy caro pero no soluciona el problema.
Existe una solución inteligente: recuento de pasos del clúster local + verificación completa del clúster.
Sigue siendo el mismo ejemplo que antes:
Si el umbral límite actual es 90, las tres regiones contarán por separado. Cuando el valor de la región local llegue a 30, vaya al. otras dos regiones para obtener el valor actual de la otra región. Si excede el valor de conteo, le dice a las otras dos regiones que el valor de conteo ha excedido y comienza a rechazar el flujo. Si no excede, repita la acción anterior cada vez que el QPS local aumente en 10.
Esto puede reducir efectivamente la cantidad de interacciones con redis y, al mismo tiempo, lograr una verdadera limitación de la corriente del clúster en todas las regiones.
Por supuesto, este tipo de limitación de corriente de clúster para todas las regiones debe ser inexacta debido a la existencia de rt y intervalos de conteo de pasos, pero sigue siendo mucho mejor que la limitación de corriente de un solo clúster.
Cuando el tráfico de un usuario es particularmente grande, el recuento de Redis encontrará un problema típico de tecla de acceso rápido, lo que provocará una presión excesiva en un solo nodo del clúster de Redis. Hay dos formas de resolver este problema: dividir y muestreo.
Dividir significa agregar algunos sufijos a la clave del punto de acceso para convertirla en múltiples claves, de modo que se puedan enviar a nodos de Redis inalcanzables para compartir la presión de manera uniforme.
Por ejemplo, si la clave del punto de acceso es abcd, luego de dividirse, la clave se convierte en abcd1, abcd2, abcd3 y abcd4. Cuando utilice tecnología, simplemente agregue los sufijos 1, 2, 3 y 4 por turno.
El muestreo significa que para las claves del punto de acceso, en lugar de contar cada solicitud cuando llega, se realiza un muestreo, por ejemplo, contando cada 10 solicitudes, de modo que la presión sobre redis se reducirá a una décima parte.
Ahora que hemos terminado de hablar de programación de tráfico, jaja, hablemos de monitoreo en el próximo artículo. Por cierto, me gustaría recomendar la puerta de enlace doméstica que estoy usando actualmente: GOKU, de Eolinker. Creo que es más fácil de usar que KONG. Los estudiantes interesados pueden descubrirlo por sí mismos.
www.eolinker.com