Partilhar via


Como distribuir leituras globalmente usando a API do Azure Cosmos DB para MongoDB

APLICA-SE A: MongoDB

Este artigo mostra como distribuir globalmente operações de leitura com as configurações de Preferência de Leitura do MongoDB usando a API do Azure Cosmos DB para MongoDB.

Pré-requisitos

Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.

Em alternativa, pode Experimentar o Azure Cosmos DB gratuitamente sem uma subscrição do Azure, sem encargos e compromissos. Ou você pode usar o Emulador do Azure Cosmos DB para este tutorial com uma cadeia de conexão de:

mongodb://localhost:C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==@localhost:10255/admin?ssl=true

Consulte este artigo de início rápido para obter instruções sobre como usar o portal do Azure para configurar uma conta do Azure Cosmos DB com distribuição global e, em seguida, conectar-se a ela.

Clonar a aplicação de exemplo

Abra uma janela de terminal do git, tal como git bash, e cd para um diretório de trabalho.

Execute os seguintes comandos para clonar o repositório de exemplo. Com base na sua plataforma de interesse, use um dos seguintes repositórios de exemplo:

  1. Aplicativo de exemplo .NET
  2. Aplicativo de exemplo NodeJS
  3. Aplicação de exemplo Mongoose
  4. Aplicação de exemplo Java
  5. Aplicativo de exemplo SpringBoot
git clone <sample repo url>

Executar a aplicação

Dependendo da plataforma utilizada, instale os pacotes necessários e inicie a aplicação. Para instalar dependências, siga o LEIA-ME incluído no repositório de aplicativos de exemplo. Por exemplo, no aplicativo de exemplo NodeJS, use os seguintes comandos para instalar os pacotes necessários e iniciar o aplicativo.

cd mean
npm install
node index.js

O aplicativo tenta se conectar a uma fonte MongoDB e falha porque a cadeia de conexão é inválida. Siga as etapas no LEIA-ME para atualizar a cadeia de conexão url. Além disso, atualize o readFromRegion para uma região de leitura em sua conta do Azure Cosmos DB. As instruções a seguir são do exemplo NodeJS:

* Next, substitute the `url`, `readFromRegion` in App.Config with your Azure Cosmos DB account's values. 

Depois de seguir essas etapas, o aplicativo de exemplo é executado e produz a seguinte saída:

connected!
readDefaultfunc query completed!
readFromNearestfunc query completed!
readFromRegionfunc query completed!
readDefaultfunc query completed!
readFromNearestfunc query completed!
readFromRegionfunc query completed!
readDefaultfunc query completed!
readFromSecondaryfunc query completed!

Ler usando o modo de Preferência de Leitura

O protocolo MongoDB fornece os seguintes modos de preferência de leitura para os clientes usarem:

  1. PRIMÁRIO
  2. PRIMARY_PREFERRED
  3. SECUNDÁRIO
  4. SECONDARY_PREFERRED
  5. MAIS PRÓXIMO

Consulte a documentação detalhada do comportamento de preferência de leitura do MongoDB para obter detalhes sobre o comportamento de cada um desses modos de preferência de leitura. No Azure Cosmos DB, mapas primários para a região WRITE e secundários para a região READ.

Com base em cenários comuns, recomendamos o uso das seguintes configurações:

  1. Se forem necessárias leituras de alta disponibilidade e baixa latência, use o modo de preferência de leitura MAIS PRÓXIMO . Essa configuração direciona as operações de leitura para a região disponível mais próxima. Observe que, se a região mais próxima for a região WRITE, essas operações serão direcionadas para essa região.
  2. Se for necessária alta disponibilidade e distribuição geográfica de leituras (latência não é uma restrição), use o modo de preferência de leitura PRIMARY PREFERRED ou SECONDARY PREFERRED . Essa configuração direciona as operações de leitura para uma região WRITE ou READ disponível, respectivamente. Se a região não estiver disponível, as solicitações serão direcionadas para a próxima região disponível de acordo com o comportamento de preferência de leitura.

O trecho a seguir do aplicativo de exemplo mostra como configurar a preferência de leitura NEAREST no NodeJS:

  var query = {};
  var readcoll = client.db('regionDB').collection('regionTest', {readPreference: ReadPreference.NEAREST});
  readcoll.find(query).toArray(function(err, data) {
    assert.equal(null, err);
    console.log("readFromNearestfunc query completed!");
  });

Da mesma forma, o trecho abaixo mostra como configurar o SECONDARY_PREFERRED Preferência de Leitura no NodeJS:

  var query = {};
  var readcoll = client.db('regionDB').collection('regionTest', {readPreference: ReadPreference.SECONDARY_PREFERRED});
  readcoll.find(query).toArray(function(err, data) {
    assert.equal(null, err);
    console.log("readFromSecondaryPreferredfunc query completed!");
  });

A Preferência de Leitura também pode ser definida passando readPreference como parâmetro nas opções de URI da cadeia de conexão:

const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');

// Connection URL
const url = 'mongodb://localhost:27017?ssl=true&replicaSet=globaldb&readPreference=nearest';

// Database Name
const dbName = 'myproject';

// Use connect method to connect to the Server
MongoClient.connect(url, function(err, client) {
  console.log("Connected correctly to server");

  const db = client.db(dbName);

  client.close();
});

Consulte os repositórios de aplicativos de exemplo correspondentes para outras plataformas, como .NET e Java.

Ler usando tags

Além do modo de Preferência de Leitura, o protocolo MongoDB permite o uso de tags para direcionar operações de leitura. Na API do Azure Cosmos DB para MongoDB, a region tag é incluída por padrão como parte da isMaster resposta:

"tags": {
         "region": "West US"
      }

Assim, MongoClient pode usar a region tag junto com o nome da região para direcionar operações de leitura para regiões específicas. Para contas do Azure Cosmos DB, os nomes de região podem ser encontrados no portal do Azure à esquerda, em Dados de Réplica> de Configurações globalmente. Essa configuração é útil para obter isolamento de leitura - casos em que o aplicativo cliente deseja direcionar operações de leitura apenas para uma região específica. Essa configuração é ideal para cenários do tipo não-produção/análise, que são executados em segundo plano e não são serviços críticos de produção.

O trecho a seguir do aplicativo de exemplo mostra como configurar a Preferência de Leitura com tags no NodeJS:

 var query = {};
  var readcoll = client.db('regionDB').collection('regionTest',{readPreference: new ReadPreference(ReadPreference.SECONDARY_PREFERRED, {"region": "West US"})});
  readcoll.find(query).toArray(function(err, data) {
    assert.equal(null, err);
    console.log("readFromRegionfunc query completed!");
  });

Consulte os repositórios de aplicativos de exemplo correspondentes para outras plataformas, como .NET e Java.

Neste artigo, você aprendeu como distribuir globalmente operações de leitura usando a Preferência de Leitura com a API do Azure Cosmos DB para MongoDB.

Clean up resources (Limpar recursos)

Se não pretender continuar a utilizar esta aplicação, elimine todos os recursos criados por este artigo no portal do Azure com os seguintes passos:

  1. No menu do lado esquerdo do portal do Azure, clique em Grupos de recursos e, em seguida, clique no nome de recurso que criou.
  2. Na página do grupo de recursos, clique em Eliminar, escreva o nome do recurso a eliminar na caixa de texto e, em seguida, clique em Eliminar.

Próximos passos