Condividi tramite


Come distribuire a livello globale le letture tramite l'API di Azure Cosmos DB per MongoDB

SI APPLICA A: MongoDB

Questo articolo illustra come distribuire a livello globale le operazioni di lettura usando le impostazioni relative alle preferenze di lettura di MongoDB con l'API di Azure Cosmos DB per MongoDB.

Prerequisiti

Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.

In alternativa, è possibile provare gratuitamente Microsoft Azure Cosmos DB senza una sottoscrizione di Azure e senza impegno Oppure usare l'emulatore Azure Cosmos DB per questa esercitazione, con la stringa di connessione seguente:

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

Fare riferimento a questo articolo Avvio rapido per istruzioni su come usare il portale di Azure per configurare un account Azure Cosmos DB con distribuzione globale e quindi connettersi.

Clonare l'applicazione di esempio

Aprire una finestra del terminale Git, ad esempio Git Bash, ed eseguire il comando cd per passare a una directory di lavoro.

Eseguire i comandi seguenti per clonare il repository di esempio. In base alla piattaforma rilevante, usare uno dei repository di esempio seguenti:

  1. Applicazione di esempio .NET
  2. Applicazione di esempio NodeJS
  3. Applicazione di esempio Mongoose
  4. Applicazione di esempio Java
  5. Applicazione di esempio SpringBoot
git clone <sample repo url>

Eseguire l'applicazione

In base alla piattaforma in uso, installare i pacchetti necessari e avviare l'applicazione. Per installare le dipendenze, seguire le istruzioni nel file README incluso nel repository dell'applicazione di esempio. Ad esempio, nell'applicazione di esempio NodeJS eseguire i comandi seguenti per installare i pacchetti necessari e avviare l'applicazione.

cd mean
npm install
node index.js

L'applicazione prova a connettersi a un'origine MongoDB e l'operazione ha esito negativo perché la stringa di connessione non è valida. Seguire i passaggi nel file README per aggiornare la stringa di connessione url. Inoltre, aggiornare readFromRegion a un'area di lettura nell'account Azure Cosmos DB. Le istruzioni seguenti sono tratte dall'esempio NodeJS:

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

Dopo aver completato questi passaggi, l'applicazione di esempio viene eseguita e produce l'output seguente:

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!

Leggere usando le modalità relative alle preferenze di lettura

Il protocollo MongoDB offre le modalità seguenti relative alle preferenze di lettura, per l'uso da parte dei client:

  1. PRIMARY
  2. PRIMARY_PREFERRED
  3. SECONDARY
  4. SECONDARY_PREFERRED
  5. NEAREST

Vedere la documentazione sul preferenze di lettura di MongoDB per informazioni dettagliate sul comportamento delle singole modalità delle preferenze di lettura. In Azure Cosmos DB, la modalità primary esegue il mapping all'area di scrittura e la modalità secondary esegue il mapping all'area di lettura.

In base agli scenari comuni, è consigliabile usare le impostazioni seguenti:

  1. Se sono necessarie letture a disponibilità elevata e bassa latenza, usare la modalità di preferenza di lettura PIÙ VICINA . Questa impostazione indirizza le operazioni di lettura all'area disponibile più vicina. Si noti che se l'area più vicina è l'area di scrittura, queste operazioni vengono indirizzate a tale area.
  2. Se sono necessarie disponibilità elevata e distribuzione geografica delle letture (senza vincoli di latenza), usare quindi la modalità PRIMARY PREFERRED o SECONDARY PREFERENZA. Questa impostazione indirizza le operazioni di lettura all'area di lettura o scrittura disponibile rispettivamente più vicina. Se l'area non è disponibile, le richieste vengono indirizzate all'area disponibile successiva in base al comportamento delle preferenze di lettura.

Il frammento di codice seguente tratto dall'applicazione di esempio mostra come configurare le preferenze di lettura NEAREST in 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!");
  });

Analogamente, il frammento di codice seguente mostra come configurare le preferenze di lettura SECONDARY_PREFERRED in 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!");
  });

Le preferenze di lettura possono essere impostate anche passando readPreference come parametro nelle opzioni URI della stringa di connessione:

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();
});

Fare riferimento al repository dell'applicazione di esempio corrispondente per altre piattaforme, ad esempio .NET e Java.

Leggere usando i tag

Oltre alle modalità relative alle preferenze di lettura, il protocollo MongoDB consente l'uso di tag per indirizzare le operazioni di lettura. Nell'API di Azure Cosmos DB per MongoDB, il tag region è incluso per impostazione predefinita come parte della risposta isMaster:

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

Di conseguenza, MongoClient può usare il tag region insieme al nome dell'area per indirizzare le operazioni di lettura ad aree specifiche. Per gli account Azure Cosmos DB, è possibile trovare i nomi delle aree nel portale di Azure a sinistra in Impostazioni -> Replica i dati a livello globale. Questa impostazione è utile per ottenere l'isolamento di lettura, nei casi in cui l'applicazione client vuole indirizzare le operazioni di lettura solo a una determinata area. Questa impostazione è ideale per scenari non di produzione/di analisi, che vengono eseguiti in background e non sono servizi di produzione critici.

Il frammento di codice seguente tratto dall'applicazione di esempio mostra come configurare le preferenze di lettura mediante i tag in 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!");
  });

Fare riferimento al repository dell'applicazione di esempio corrispondente per altre piattaforme, ad esempio .NET e Java.

In questo articolo si è appreso come distribuire a livello globale le operazioni di lettura usando le preferenze di lettura con l'API di Azure Cosmos DB per MongoDB.

Pulire le risorse

Se non si intende continuare a usare l'app, eliminare tutte le risorse create tramite questo articolo nel portale di Azure eseguendo questi passaggi:

  1. Scegliere Gruppi di risorse dal menu a sinistra del portale di Azure e quindi fare clic sul nome della risorsa creata.
  2. Nella pagina del gruppo di risorse fare clic su Elimina, digitare il nome della risorsa da eliminare nella casella di testo e quindi fare clic su Elimina.

Passaggi successivi