¿Cómo funciona la limitación de corriente distribuida?
Hemos analizado brevemente la tecnología de la arquitectura de programación distribuida muchas veces en artículos anteriores. Hoy echaremos un vistazo a los principios de funcionamiento de la limitación de corriente distribuida de la puerta de enlace API.
La puerta de enlace API limita el flujo de una determinada API, grupo de API, APPID, IP, etc. para acceder a las aplicaciones. Estas condiciones de limitación de corriente generarán una clave para la limitación de corriente, y esta clave se utilizará para limitar la corriente en la limitación de corriente posterior.
Los algoritmos de limitación de tráfico generalmente se implementan en puertas de enlace API utilizando el algoritmo de depósito de tokens.
Debe tenerse en cuenta que debido a la gran sobrecarga de la red, la limitación de corriente distribuida tiene una brecha entre su soporte para TPS y la limitación de corriente local. Por lo tanto, en los casos en que los requisitos de TPS sean altos, se recomienda su uso. procesamiento de limitación de corriente local.
Analicemos qué esquema de bloqueo distribuido de Redis debemos usar:
Dado que las transacciones de Redis deben realizarse con un TPS alto para obtener el efecto de bloqueo, se generará una gran cantidad de solicitudes de acceso no válidas. ser generado. , por lo que no se recomienda usarlo en este escenario.
El esquema de bloqueo SETNX/EX crea problemas de tiempo de vencimiento y replicación asincrónica de datos maestros a datos esclavos. Crea más inestabilidad que la solución lua.
Recomiendo usar la solución lua para implementar el bloqueo distribuido, porque son ejecuciones de un solo proceso y de un solo subproceso, por lo que el TPS de las dos soluciones no es muy diferente, y porque solo ejecuta el script lua, incluso la ejecución pura de lua puede lograr un TPS más alto. Por supuesto, la replicación asíncrona principal sigue siendo un problema, pero no causará problemas ya que los datos solo tendrán problemas con una ejecución del script lua y la siguiente ejecución estará bien.
Se utilizó la biblioteca Jedis al implementar el programa. He verificado algunos problemas en el nivel de implementación del curso Changping Java, que también pueden ser preguntas de los lectores.