Como configurar distribuir globalmente as leituras usando a API do Azure Cosmos DB para MongoDB
APLICA-SE AO: MongoDB
Este artigo mostra como distribuir globalmente operações de leitura usando configurações de Preferência de Leitura do MongoDB com a API do Azure Cosmos DB para MongoDB.
Pré-requisitos
Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
Como alternativa, você pode Experimentar o Azure Cosmos DB gratuitamente sem uma assinatura do Azure, sem ônus e sem compromisso. Ou você pode usar o Emulador do Azure Cosmos DB neste tutorial com uma cadeia de conexão de:
mongodb://localhost:C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==@localhost:10255/admin?ssl=true
Consulte esse 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 conectar-se a ela.
Clonar o aplicativo de exemplo
Abra uma janela de terminal do Git, como git bash, e cd
para um diretório de trabalho.
Execute os comandos a seguir para clonar o repositório de exemplo. Com base na sua plataforma de interesse, use um dos repositórios de exemplo a seguir:
- Aplicativo de exemplo .NET
- Aplicativo de exemplo NodeJS
- Aplicativo de exemplo Mongoose
- Aplicativo de exemplo Java
- Aplicativo de exemplo SpringBoot
git clone <sample repo url>
Executar o aplicativo
Dependendo da plataforma utilizada, instale os pacotes necessários e inicie o aplicativo. Para instalar dependências, siga o LEIAME incluído no repositório de aplicativo de exemplo. Por exemplo, no aplicativo de exemplo do NodeJS, use os comandos a seguir para instalar os pacotes necessários e iniciar o aplicativo.
cd mean
npm install
node index.js
O aplicativo tenta conectar-se a uma fonte do MongoDB e falha porque a cadeia de conexão é inválida. Siga as etapas no LEIAME para atualizar a cadeia de conexãourl
. Além disso, atualize readFromRegion
para uma região de leitura na 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.
Após seguir essas etapas, o aplicativo de exemplo executa e produzir 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!
Leia usando o modo Preferência de Leitura
O protocolo MongoDB fornece os seguintes modos de Preferência de Leitura a serem utilizados pelos clientes:
- PRIMARY
- PRIMARY_PREFERRED
- SECONDARY
- SECONDARY_PREFERRED
- NEAREST
Consulte a documentação detalhada Comportamento da 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, primário mapeia para a região de GRAVAÇÃO e o secundário mapeia para região de LEITURA.
Com base em cenários comuns, é usar as seguintes configurações a seguir:
- Se leituras de alta disponibilidade e baixa latência forem necessárias, utilize o modo de preferência de leitura NEAREST. 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 de GRAVAÇÃO, essas operações serão direcionadas a essa região.
- Se alta disponibilidade e distribuição geográfica de leituras forem necessárias (latência não é uma restrição), utilize o modo de preferência de leitura PREFERÊNCIA PRINCIPAL ou PREFERÊNCIA SECUNDÁRIA. Essa configuração direciona as operações de leitura para uma região de GRAVAÇÃO ou LEITURA 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 snippet de código 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, snippet de código abaixo mostra como configurar a Preferência de Leitura SECONDARY_PREFERRED 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 configurada passando readPreference
como um 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 o repos de aplicativo de exemplo correspondente para outras plataformas, como .NET e Java.
Leitura usando marcas
Além do modo de Preferência de Leitura, o protocolo MongoDB permite o uso de marcas para direcionar as operações de leitura. Na API do Azure Cosmos DB para MongoDB, a marca region
está incluída por padrão como parte da resposta isMaster
:
"tags": {
"region": "West US"
}
Portanto, o MongoClient pode usar a marca region
juntamente 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 das regiões podem ser encontrados no Portal do Azure à esquerda em Configurações->Replicar dados globalmente. Essa configuração é útil para alcançar 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 de tipo análise/sem produção, que são executados em segundo plano e não são serviços críticos de produção.
O snippet de código a seguir do aplicativo de exemplo mostra como configurar a Preferência de Leitura com marcas 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 o repos de aplicativo de exemplo correspondente para outras plataformas, como .NET e Java.
Neste artigo, você aprendeu a distribuir globalmente operações de leitura usando a Preferência de Leitura com API do Azure Cosmos DB para MongoDB.
Limpar recursos
Se você não continuar a usar esse aplicativo, exclua todos os recursos criados por este artigo no Portal do Azure com as seguintes etapas:
- No menu à esquerda no Portal do Azure, clique em Grupos de recursos e depois clique no nome do recurso criado.
- Em sua página de grupo de recursos, clique em Excluir, digite o nome do recurso para excluir na caixa de texto e depois clique em Excluir.