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 tasa, primero habilítelo configurando el parámetro ingressConnectionEstablishmentRateLimiterEnabled en true:
db.adminCommand( { setParameter: 1, ingressConnectionEstablishmentRateLimiterEnabled: true } )
Establecer la tasa de establecimiento de la conexión
Configura ingressConnectionEstablishmentRatePerSec en la velocidad máxima que tu clúster pueda gestionar sin impactar negativamente el rendimiento. Esto debe ser un número fijo que no varíe en función de otras dinámicas de carga de trabajo.
db.adminCommand( { setParameter: 1, ingressConnectionEstablishmentRatePerSec: 20 } )
Configura la profundidad de la cola de conexiones
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.
Configura los ajustes del controlador
Si observa fallos de conexión, disminuya la maxPoolSize configuración y las maxConnecting configuración de su controlador. Si bajas estos valores, el driver reutiliza conexiones en vez de abrir más conexiones al servidor durante periodos de alta latencia, lo que puede causar problemas de tormenta de conexiones.
Nota
Si se reduce maxPoolSize y maxConnecting, es posible que las consultas pasen más tiempo en la capa del controlador esperando que se devuelva una conexión al pool. Reducir estos parámetros contribuye a mantener la disponibilidad a costo de un aumento en la latencia durante picos de carga.
Supervisión y resolució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 pool de conexiones del driver.