Share via


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

APLICA-SE A: MongoDB

Este artigo mostra como distribuir globalmente as operações de leitura com as definições de Preferência de Leitura do MongoDB com 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. Em alternativa, pode utilizar o Emulador do Azure Cosmos DB para este tutorial com uma cadeia de ligação de:

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

Veja este artigo de Início Rápido para obter instruções sobre como utilizar o portal do Azure para configurar uma conta do Azure Cosmos DB com distribuição global e, em seguida, ligue-se à mesma.

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, utilize um dos seguintes repositórios de exemplo:

  1. Aplicação de exemplo .NET
  2. Aplicação de exemplo nodeJS
  3. Aplicação de exemplo do Mongoose
  4. Aplicação de exemplo Java
  5. Aplicação de exemplo do 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 README incluído no repositório da aplicação de exemplo. Por exemplo, na aplicação de exemplo NodeJS, utilize os seguintes comandos para instalar os pacotes necessários e iniciar a aplicação.

cd mean
npm install
node index.js

A aplicação tenta ligar-se a uma origem mongoDB e falha porque a cadeia de ligação é inválida. Siga os passos no README para atualizar a cadeia de urlligação . Além disso, atualize para readFromRegion uma região de leitura na sua conta do Azure Cosmos DB. As seguintes instruções são do exemplo NodeJS:

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

Depois de seguir estes passos, a aplicação de exemplo é executada e produz o seguinte resultado:

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 com o modo de Preferência de Leitura

O protocolo MongoDB fornece os seguintes modos de Preferência de Leitura para os clientes utilizarem:

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

Veja a documentação detalhada sobre o comportamento da Preferência de Leitura do MongoDB para obter detalhes sobre o comportamento de cada um destes modos de preferência de leitura. No Azure Cosmos DB, os mapas primários para a região WRITE e mapas secundários para a região DE LEITURA.

Com base em cenários comuns, recomendamos que utilize as seguintes definições:

  1. Se forem necessárias leituras de elevada disponibilidade e baixa latência , utilize o modo de preferência de leitura MAIS PRÓXIMO . Esta definição direciona as operações de leitura para a região disponível mais próxima. Tenha em atenção que, se a região mais próxima for a região WRITE, estas operações são direcionadas para essa região.
  2. Se for necessária elevada disponibilidade e distribuição geográfica de leituras (a latência não é uma restrição), utilize o modo de preferência de leitura PREFERENCIAL PRIMÁRIA ou SECUNDÁRIA PREFERENCIAL . Esta definição direciona as operações de leitura para uma região DE ESCRITA ou LEITURA disponível, respetivamente. Se a região não estiver disponível, os pedidos são direcionados para a próxima região disponível de acordo com o comportamento de preferência de leitura.

O fragmento seguinte da aplicação de exemplo mostra como configurar a Preferência de Leitura MAIS PRÓXIMA 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 fragmento 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 ao transmitir readPreference como um parâmetro nas opções de URI da cadeia de ligaçã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();
});

Veja os repositórios de aplicações de exemplo correspondentes para outras plataformas, como .NET e Java.

Ler com etiquetas

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

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

Assim, o MongoClient pode utilizar a region etiqueta juntamente com o nome da região para direcionar as operações de leitura para regiões específicas. Para contas do Azure Cosmos DB, os nomes das regiões podem ser encontrados em portal do Azure à esquerda em Definições-Réplica de> dados globalmente. Esta definição é útil para alcançar o isolamento de leitura – casos em que a aplicação cliente quer direcionar as operações de leitura apenas para uma região específica. Esta definição é ideal para cenários de tipo de 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 fragmento seguinte da aplicação de exemplo mostra como configurar a Preferência de Leitura com etiquetas 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!");
  });

Veja os repositórios de aplicações de exemplo correspondentes para outras plataformas, como .NET e Java.

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

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

Passos seguintes