Este procedimento descreve como configurar o limite de taxa utilizando o parâmetro ingressConnectionEstablishmentRateLimiterEnabled
no MongoDB. O limitador de taxa ajuda a proteger seu sistema contra tempestades de conexão que podem impacto a estabilidade e o desempenho do sistema.
Antes de começar
Antes de iniciar este procedimento, certifique-se de atender aos seguintes requisitos:
Você tem privilégios administrativos em seu sistema do MongoDB
Você entende os padrões e requisitos de carga de conexão do seu sistema
Você conhece a configuração
connectTimeoutMS
do seu motorista
Procedimento
Habilite o limitador de taxa
Para começar a usar o limitador de taxa, primeiro habilite-o configurando o parâmetro ingressConnectionEstablishmentRateLimiterEnabled
para true
:
db.adminCommand( { setParameter: 1, ingressConnectionEstablishmentRateLimiterEnabled: true } )
Definir a taxa de estabelecimento da conexão
Defina ingressConnectionEstablishmentRatePerSec
para a taxa máxima que seu cluster pode manipular sem afetar negativamente a taxa de transferência. Deve ser um número fixo que não varia com base em outras dinâmicas de volume de trabalho.
db.adminCommand( { setParameter: 1, ingressConnectionEstablishmentRatePerSec: 20 } )
Configurar a profundidade da fila de conexões
Defina ingressConnectionEstablishmentMaxQueueDepth
de acordo com a seguinte fórmula:
maxQueueDepth < (establishmentRatePerSec / 1000) * (connectTimeoutMs - ((averageTimeToCompletedHelloMicros-averageTimeQueuedMicros)*1000))
Esta fórmula garante que:
Novas tentativas de conexão não permanecem na fila após o momento em que o driver as abandona.
A maioria das tentativas de
hello+auth
é bem-sucedida, em vez de falhar devido a um erro de tempo limite.
A métrica averageTimeQueuedMicros
pode ajudar a ajustar ingressConnectionEstablishmentMaxQueueDepth
, pois ela é igual a aproximadamente (maxQueueDepth / establishRatePerSec) * 1e6
.
Importante
Ao ajustar o tamanho da fila, priorize um tamanho de fila mais longo, em vez de um tamanho de fila mais curto. Os drivers que limpam seus pools de conexões devido ao fechamento de conexões são um risco maior do que as conexões que permanecem na fila por muito tempo e atingem o tempo limite.
Definir configurações do driver
Se você observar falhas de conexão, diminua as configurações maxPoolSize
e maxConnecting
do driver. Se você diminuir essas configurações, o driver reutilizará conexões, em vez de abrir mais conexões para o servidor durante períodos de maior latência, o que pode causar tempestades de conexão.
Observação
Se você diminuir maxPoolSize
e maxConnecting
, as queries poderão passar mais tempo na camada do driver aguardando que uma conexão seja retornada ao pool. Diminuir essas configurações ajuda a manter a disponibilidade ao custo de maior latência durante picos de carga.
Monitoramento e solução de problemas
Monitore as seguintes métricas para garantir que você configure corretamente seu limitador de taxa:
Se você observar um número crescente de conexões rejeitadas, considere:
Aumente
ingressConnectionEstablishmentRatePerSec
se o cluster parecer ter recursos suficientes de CPU para lidar com essa carga.Ajustando
ingressConnectionEstablishmentMaxQueueDepth
com base na fórmula.Revise as configurações do pool de conexões do driver.