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:
- Aplicativo de exemplo .NET
- Aplicativo de exemplo NodeJS
- Aplicação de exemplo Mongoose
- Aplicação de exemplo Java
- 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:
- PRIMÁRIO
- PRIMARY_PREFERRED
- SECUNDÁRIO
- SECONDARY_PREFERRED
- 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:
- 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.
- 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:
- No menu do lado esquerdo do portal do Azure, clique em Grupos de recursos e, em seguida, clique no nome de recurso que criou.
- 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.