Este procedimiento describe cómo configurar la limitación de velocidad mediante el ingressConnectionEstablishmentRateLimiterEnabled
Parámetro en MongoDB. El limitador de velocidad ayuda a proteger su implementación de tormentas de conexiones que pueden afectar la estabilidad y el rendimiento del sistema.
Antes de comenzar
Antes de comenzar este procedimiento, asegúrese de cumplir los siguientes requisitos:
Tiene privilegios administrativos en su implementación de MongoDB
Comprende los patrones y requisitos de carga de conexión de su sistema
Conoces la configuración
connectTimeoutMSde tu controlador
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 según la siguiente ingressConnectionEstablishmentMaxQueueDepth 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
hello+authtienen éxito, en lugar de fallar debido a un error de tiempo de espera.
La averageTimeQueuedMicros métrica puede ayudar a ajustar, ya que equivale ingressConnectionEstablishmentMaxQueueDepth aproximadamente (maxQueueDepth / establishRatePerSec) * 1e6 a.
Importante
Al ajustar el tamaño de la cola, priorice una cola más larga en lugar de una más corta. Los controladores que vacían sus grupos de conexiones debido al cierre de las conexiones representan un mayor riesgo que las conexiones que permanecen en la cola demasiado tiempo y agotan 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 asegurarse de configurar correctamente su limitador de velocidad:
Si observa un número creciente de conexiones rechazadas, considere lo siguiente:
Aumenta si el clúster parece tener suficientes recursos de CPU para manejar esta
ingressConnectionEstablishmentRatePerSeccarga.Ajustando según la
ingressConnectionEstablishmentMaxQueueDepthfórmula.Revisando la configuración del grupo de conexiones del controlador.