ANNOUNCEMENT: Voyage AI joins MongoDB to power more accurate and trustworthy AI applications on Atlas.
Learn more
Menu Docs

Algoritmo de Seleção do Servidor

Os drivers do MongoDB usam um algoritmo de seleção de servidor para escolher qual membro do conjunto de réplicas usar ou, quando conectados a várias instâncias mongos, qual instância mongos usar.

A seleção do servidor ocorre uma vez por operação.

As informações nesta página se aplicam a sistemas hospedados nos seguintes ambientes:

  • MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem

  • MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB

  • MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB

Observação

Transações distribuídas que contêm operações de leitura devem usar a read preference primary. Todas as operações em uma determinada transação devem ser roteadas para o mesmo membro.

A seleção do servidor ocorre uma vez por operação e é regida pelas configurações de preferência de leitura e localThresholdMS para determinar a elegibilidade do membro para leituras. A preferência de leitura é reavaliada para cada operação.

Modo de preferência de leitura
Processo de seleção

primary (Padrão)

  1. O driver seleciona o principal.

  1. O driver monta uma lista de membros secundários elegíveis. maxStalenessSeconds e conjuntos de tags especificados na preferência de leitura podem restringir ainda mais a elegibilidade dos membros.

  2. Se a lista de membros qualificados não estiver vazia, o driver determinará qual membro qualificado é o "mais próximo" (ou seja, o membro com o menor tempo médio ida e volta da rede) e calculará um tempo de latência adicionando o tempo médio de ida e volta do servidor "mais próximo" e do localThresholdMS. O driver utiliza o tempo de latência para reduzir a lista de membros elegíveis aos membros que se enquadram nesse tempo.

  3. Dessa lista de membros elegíveis enquadrados no tempo de latência, o driver escolhe aleatoriamente um membro elegível.

  1. O driver monta uma lista de membros qualificados (primários e secundários). maxStalenessSeconds e conjuntos de tags especificados na preferência de leitura podem limitar ainda mais a elegibilidade dos membros.

  2. Se a lista de membros elegíveis não estiver vazia, o driver determinará qual membro elegível é o "mais próximo" (ou seja, o membro com o menor tempo médio de ida e volta da rede) e calculará uma janela de latência adicionando o tempo médio de ida e volta desse servidor "mais próximo" e o localThresholdMS [1]. O driver utiliza esta janela de latência para analisar a lista de membros elegíveis para os membros que se enquadram nesta janela.

  3. A partir desta lista de membros qualificados que se enquadram na janela de latência, o driver escolhe aleatoriamente um membro qualificado.

  1. Se o primário estiver disponível, o driver selecionará o primário.

  2. Se o primário não estiver disponível, a seleção do servidor seguirá o processo para que a preferência de leitura secondary selecione um membro secundário qualificado.

  1. Após o processo de seleção do servidor para a preferência de leitura secondary, se uma lista de membros secundários elegíveis não estiver vazia, o driver escolherá um membro secundário qualificado.

  2. Caso contrário, se a lista estiver vazia, o driver seleciona o principal.

Se houver mais de uma instância mongos na lista de sementes de conexão, o driver determinará qual mongos é a "mais próxima" (ou seja, o membro com o menor tempo médio de viagem de ida e volta da rede) e calculará a janela de latência adicionando o tempo médio de viagem de ida e volta dessa instância "mais próxima" mongos e a localThresholdMS. O driver fará o balanceamento de carga aleatoriamente entre as mongos instâncias que se enquadram na janela de latência.

Para clusters fragmentados que têm shards de conjunto de réplicas, o mongos aplica a preferência de leitura ao ler a partir dos shards. A seleção do servidor é regida pela preferência de leitura e pelas configurações replication.localPingThresholdMs. A preferência de leitura é reavaliada para cada operação.

mongos suporta leituras distribuídas para modos de preferências de leitura nãoprimary . Ou seja, mongos pode enviar uma leitura adicional para outro membro, se disponível, para proteger a operação de leitura se estiver usando preferências de leitura que não sejam deprimary. A leitura adicional enviada para proteger a operação de leitura utiliza o valor maxTimeMS de maxTimeMSForHedgedReads.

As leituras distribuídas são suportadas para as seguintes operações:

Para usar leituras com hedge:

Modo de preferência de leitura
Processo de seleção

primary (Padrão)

  1. O mongos seleciona o principal.

  1. O mongos monta uma lista de membros secundários elegíveis. maxStalenessSeconds e conjuntos de tags especificados na preferência de leitura podem restringir ainda mais a elegibilidade dos membros.

  2. Se a lista de membros elegíveis não estiver vazia, o determina qual membro elegível é o " mais próximo " (ou seja, o membro com a menor média de tempo de ida e volta mongos replication.localPingThresholdMs da rede) e --localThreshold calcula uma janela de latência adicionando o tempo médio de ida e volta desse servidor " " mais próximo e o (ou (opção de linha de comando). O mongos usa essa janela de latência para reduzir a lista de membros elegíveis aos membros que se enquadram nessa janela.

  3. A partir desta lista de membros elegíveis que se enquadram na janela de latência, o mongos escolhe aleatoriamente um membro elegível. Se estiver usando leituras protegidas, mongos selecionará um segundo membro qualificado, se disponível.

  1. O mongos reúne uma lista de membros elegíveis (primários e secundários). maxStalenessSeconds e conjuntos de tags especificados na preferência de leitura podem limitar ainda mais a elegibilidade dos membros.

  2. Se a lista de membros elegíveis não estiver vazia, o mongos determina qual membro elegível é o "mais próximo" (ou seja, o membro com o menor tempo médio de ida e volta da rede) e calcula uma janela de latência adicionando o tempo médio de ida e volta desse servidor "mais próximo" e a opção de linha de comando replication.localPingThresholdMs (ou --localThreshold ) [1]. O mongos usa essa janela de latência para reduzir a lista de membros elegíveis aos membros que se enquadram nessa janela.

  3. A partir desta lista de membros elegíveis que se enquadram na janela de latência, o mongos escolhe aleatoriamente um membro elegível. Se estiver usando leituras protegidas, mongos selecionará um segundo membro qualificado, se disponível.

  1. Se a primária estiver disponível, o mongos selecionará a primária.

  2. Se a primária não estiver disponível ou se mongos estiver usando leituras com cobertura, a seleção do servidor seguirá o processo para a preferência de leitura secondary. Para leituras cobertas,

    • Se o primário estiver disponível, o mongos selecionará um único secundário qualificado, se disponível.

    • Se o primário não estiver disponível, mongos selecionará dois secundários qualificados, se disponíveis.

  1. Após o processo de seleção do servidor para a preferência de leitura secondary, se uma lista de membros secundários elegíveis não estiver vazia, o mongos escolherá um secundário qualificado. Se estiver usando leituras com cobertura, mongos seleciona outra secundária, se disponível.

  2. Se a lista de membros secundários elegíveis estiver vazia ou se mongos estiver usando leituras com cobertura e apenas um secundário elegível estiver disponível, mongos selecionará o primário.

[1](1, 2) O valor limite padrão é de 15 milissegundos.