Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ /

Algoritmo de Seleção do Servidor

Nesta página

  • Ler preferência para conjuntos de réplicas
  • Preferência de leitura para clusters fragmentados

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 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. 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. 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.

Importante

A partir do MongoDB 8.0, as leituras distribuídas estão obsoletas. As queries que especificam a read preference nearest não usam mais leituras protegidas por padrão. Se você especificar explicitamente uma leitura com hedge, o MongoDB executará uma leitura com hedge e registrará um aviso.

mongos suporta leituras com cobertura para modos de preferência de leitura que não sejamprimary . 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 sejamprimary . A leitura adicional enviada para proteger a operação de leitura usa 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.

  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.

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

# . Se o primário não estiver disponível, o servidor
a seleção segue o processo para a preferência de leitura secondary.
  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.

  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.

Voltar

Leituras cobertas