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:
- Aplicação de exemplo .NET
- Aplicação de exemplo nodeJS
- Aplicação de exemplo do Mongoose
- Aplicação de exemplo Java
- 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 url
ligaçã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:
- PRIMÁRIA
- PRIMARY_PREFERRED
- SECUNDÁRIO
- SECONDARY_PREFERRED
- 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:
- 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.
- 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:
- 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.
Passos seguintes
- Import MongoDB data into Azure Cosmos DB (Importar dados do MongoDB para o Azure Cosmos DB)
- Configurar uma base de dados distribuída globalmente com a API do Azure Cosmos DB para MongoDB
- Desenvolver localmente com o Emulador do Azure Cosmos DB