Partage via


Comment distribuer à l’échelle mondiale des lectures par l’intermédiaire de l’API Azure Cosmos DB pour MongoDB

S’APPLIQUE À : MongoDB

Cet article explique comment distribuer à l’échelle mondiale des opérations de lecture à l’aide des paramètres de préférence de lecture MongoDB avec l’API Azure Cosmos DB pour MongoDB.

Prérequis

Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.

Vous pouvez également essayer Azure Cosmos DB gratuitement sans abonnement Azure, libre de tout frais et engagement. Vous pouvez aussi utiliser l’émulateur Azure Cosmos DB pour ce tutoriel avec la chaîne de connexion suivante :

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

Consultez cet article de démarrage rapide afin d’obtenir des instructions sur l’utilisation du portail Azure pour configurer un compte Azure Cosmos DB avec la distribution mondiale et s’y connecter.

Clonage de l’exemple d’application

Ouvrez une fenêtre de terminal git, comme git bash, et accédez à un répertoire de travail à l’aide de la commande cd.

Exécutez les commandes suivantes pour cloner l’exemple de référentiel. Selon la plateforme qui vous intéresse, utilisez l’un des dépôts suivants :

  1. Exemple d’application .NET
  2. Exemple d’application NodeJS
  3. Exemple d’application Mongoose
  4. Exemple d’application Java
  5. Exemple d’application SpringBoot
git clone <sample repo url>

Exécuter l’application

En fonction de la plateforme utilisée, installez les packages nécessaires et démarrez l’application. Pour installer les dépendances, suivez les instructions du fichier LISEZMOI inclus dans le dépôt d’exemple d’application. Par exemple, dans l’exemple d’application NodeJS, utilisez les commandes suivantes pour installer les packages nécessaires et démarrer l’application.

cd mean
npm install
node index.js

L’application tente de se connecter à une source MongoDB, et échoue car la chaîne de connexion n’est pas valide. Suivez les étapes décrites dans le fichier LISEZMOI pour mettre à jour la chaîne de connexion url. Mettez aussi à jour readFromRegion avec une région de lecture dans votre compte Azure Cosmos DB. Les instructions ci-dessous sont tirées de l’exemple NodeJS :

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

Une fois ces étapes terminées, l’exemple d’application s’exécute et génère la sortie suivante :

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!

Lire à l’aide du mode de préférence de lecture

Le protocole MongoDB fournit les modes de préférence de lecture suivants utilisables par les clients :

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

Pour plus d’informations sur le comportement de chacun de ces modes de préférence de lecture, consultez la documentation détaillée sur le comportement de préférence de lecture MongoDB. Dans Azure Cosmos DB, primary mappe à la région d’écriture et secondary mappe à la région de lecture.

Sur la base des scénarios courants, nous recommandons d’utiliser les paramètres suivants :

  1. Si des lectures à faible latence et la haute disponibilité sont nécessaires, utilisez le mode de préférence de lecture NEAREST. Ce paramètre dirige les opérations de lecture vers la région disponible la plus proche. Notez que si la région la plus proche est la région d’écriture, ces opérations sont dirigées vers cette région.
  2. Si une haute disponibilité et une géoréplication des lectures sont nécessaires (la latence n’est pas une contrainte), utilisez le mode de préférence de lecture PRIMARY PREFERRED ou SECONDARY PREFERRED. Ce paramètre dirige les opérations de lecture vers une région de lecture ou d’écriture disponible. Si la région n’est pas disponible, les demandes sont dirigées vers la région disponible suivante, conformément au comportement de la préférence de lecture.

L’extrait de code suivant tiré de l’exemple d’application montre comment configurer la préférence de lecture NEAREST dans 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!");
  });

De même, l’extrait de code ci-dessous montre comment configurer la préférence de lecture SECONDARY_PREFERRED dans 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!");
  });

La préférence de lecture peut également être définie en passant readPreference comme paramètre dans les options d’URI de chaîne de connexion :

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

Pour d’autres plateformes telles que .NET et Java, consultez les dépôts des exemples d’application correspondants.

Lire à l’aide de balises

Outre le mode de préférence de lecture, le protocole MongoDB autorise l’utilisation de balises pour diriger les opérations de lecture. Dans l’API Azure Cosmos DB pour MongoDB, la balise region est incluse par défaut dans la réponse isMaster :

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

Ainsi, MongoClient peut utiliser la balise region en plus du nom de la région pour diriger les opérations de lecture vers des régions spécifiques. Pour les comptes Azure Cosmos DB, les noms des régions figurent dans le portail Azure à gauche sous Paramètres -> Répliquer les données globalement. Ce paramètre est utile pour bénéficier d’une isolation de lecture, cas dans lesquels une application cliente souhaite diriger les opérations de lecture uniquement vers une région spécifique. Ce paramètre est idéal pour les scénarios de type analytique/non-production, qui s’exécutent en arrière-plan et ne sont pas des services essentiels pour la production.

L’extrait de code suivant tiré de l’exemple d’application montre comment configurer la préférence de lecture avec des balises dans 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!");
  });

Pour d’autres plateformes telles que .NET et Java, consultez les dépôts des exemples d’application correspondants.

Dans cet article, vous avez découvert comment distribuer à l’échelle mondiale des opérations de lecture à l’aide de la préférence de lecture avec l’API Azure Cosmos DB pour MongoDB.

Nettoyer les ressources

Si vous ne prévoyez pas de continuer à utiliser cette application, supprimez toutes les ressources créées par cet article dans le portail Azure en effectuant les étapes suivantes :

  1. Dans le menu de gauche du portail Azure, cliquez sur Groupes de ressources, puis sur le nom de la ressource que vous avez créée.
  2. Sur la page de votre groupe de ressources, cliquez sur Supprimer, tapez le nom de la ressource à supprimer dans la zone de texte, puis cliquez sur Supprimer.

Étapes suivantes