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.

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.

Voltar

Leituras cobertas