Este procedimiento describe cómo configurar la limitación de tasa usando el ingressConnectionEstablishmentRateLimiterEnabled
parámetro en MongoDB. El limitador de velocidad ayuda a proteger su implementación contra tormentas de conexiones que pueden afectar la estabilidad y el rendimiento del sistema.
Antes de comenzar
Antes de iniciar este procedimiento, asegúrese de cumplir con los siguientes requisitos:
Tiene privilegios administrativos en tu implementación de MongoDB.
Comprendes los patrones de carga de conexión y los requisitos de tu sistema
Conoces la configuración
connectTimeoutMSde tu driver
Procedimiento
Habilitar el limitador de velocidad
Para comenzar a utilizar el limitador de velocidad, primero habilítelo configurando el ingressConnectionEstablishmentRateLimiterEnabled parámetro true en:
db.adminCommand( { setParameter: 1, ingressConnectionEstablishmentRateLimiterEnabled: true } )
Establecer la velocidad de establecimiento de la conexión
Establezca en la velocidad máxima que su clúster puede gestionar sin afectar negativamente el rendimiento. Este debe ser un número fijo que no varíe según la dinámica de otras cargas de ingressConnectionEstablishmentRatePerSec trabajo.
db.adminCommand( { setParameter: 1, ingressConnectionEstablishmentRatePerSec: 20 } )
Configurar la profundidad de la cola de conexión
Establezca ingressConnectionEstablishmentMaxQueueDepth de acuerdo con la siguiente fórmula:
maxQueueDepth < (establishmentRatePerSec / 1000) * (connectTimeoutMs - ((averageTimeToCompletedHelloMicros-averageTimeQueuedMicros)*1000))
Esta fórmula garantiza que:
Los nuevos intentos de conexión no permanecen en la cola más allá del momento en que el controlador los ha abandonado.
La mayoría de los intentos de
hello+authtienen éxito, en lugar de fallar debido a un error de tiempo de espera.
La métrica averageTimeQueuedMicros puede ayudar a ajustar ingressConnectionEstablishmentMaxQueueDepth, ya que equivale aproximadamente a (maxQueueDepth / establishRatePerSec) * 1e6.
Importante
Al ajustar el tamaño de la cola, prioriza un tamaño de cola más largo en lugar de un tamaño de cola más corto. Los drivers que borran sus pool de conexiones debido a conexiones cerradas representan un riesgo mayor que dejar las conexiones en la cola durante demasiado tiempo y expirar el tiempo de espera.
Configurar los ajustes del controlador
Si observa fallos de conexión, reduzca los maxPoolSize valores y del controlador. Si reduce estos valores, el controlador reutiliza las conexiones, en lugar de abrir más conexiones al servidor durante periodos de mayor latencia, lo que puede provocar tormentas de conexiones.maxConnecting
Nota
Si reduce maxPoolSize y maxConnecting, las consultas podrían pasar más tiempo en la capa del controlador esperando que se devuelva una conexión al grupo. Reducir estos valores ayuda a mantener la disponibilidad, a costa de una mayor latencia durante picos de carga.
Monitoreo y solución de problemas
Supervise las siguientes métricas para garantizar que configure correctamente su limitador de velocidad:
Si observas un aumento de conexiones rechazadas, considera:
Aumentar
ingressConnectionEstablishmentRatePerSecsi el clúster parece tener suficientes recursos de CPU para gestionar esta carga.Ajustando
ingressConnectionEstablishmentMaxQueueDepthsegún la fórmula.Revisando la configuración del grupo de conexiones del controlador.