Globale Verteilung von Lesevorgängen mit der Azure Cosmos DB-API für MongoDB
GILT FÜR: MongoDB
Dieser Artikel zeigt, wie Lesevorgänge mit MongoDB Read Preference-Einstellungen mit der Azure Cosmos DB-API für MongoDB global verteilt werden können.
Voraussetzungen
Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
Alternativ können Sie Azure Cosmos DB ohne Azure-Abonnement testen – kostenlos und ohne Verpflichtung. Oder Sie verwenden für dieses Tutorial den Azure Cosmos DB-Emulator mit der folgenden Verbindungszeichenfolge:
mongodb://localhost:C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==@localhost:10255/admin?ssl=true
In diesem Schnellstart-Artikel finden Sie Anweisungen zur Verwendung des Azure-Portals zum Einrichten eines Azure Cosmos DB-Kontos mit globaler Verteilung und zum anschließendem Herstellen einer Verbindung.
Klonen der Beispielanwendung
Öffnen Sie ein Git-Terminalfenster, z.B. ein Git Bash, und cd
in einem Arbeitsverzeichnis.
Führen Sie die folgenden Befehle aus, um das Beispielrepository zu klonen. Basierend auf der Plattform, die Sie interessiert, verwenden Sie eines der folgenden Beispielrepositorys:
- .NET-Beispielanwendung
- NodeJS-Beispielanwendung
- Mongoose-Beispielanwendung
- Java-Beispielanwendung
- SpringBoot-Beispielanwendung
git clone <sample repo url>
Ausführen der Anwendung
Installieren Sie je nach verwendeter Plattform die erforderlichen Pakete, und starten Sie die Anwendung. Um Abhängigkeiten zu installieren, befolgen Sie die Anleitungen in der Infodatei, die im Beispielanwendungsrepository enthalten ist. Verwenden Sie beispielsweise in der NodeJS-Beispielanwendung die folgenden Befehle, um die erforderlichen Pakete zu installieren und die Anwendung zu starten.
cd mean
npm install
node index.js
Die Anwendung versucht, eine Verbindung mit einer MongoDB-Quelle herzustellen und schlägt fehl, weil die Verbindungszeichenfolge ungültig ist. Führen Sie die Schritte in der Infodatei aus, um die url
der Verbindungszeichenfolge zu aktualisieren. Aktualisieren Sie außerdem die Angabe readFromRegion
in eine Leseregion in Ihrem Azure Cosmos DB-Konto. Die folgenden Anweisungen stammen aus dem NodeJS-Beispiel:
* Next, substitute the `url`, `readFromRegion` in App.Config with your Azure Cosmos DB account's values.
Nachdem Sie diese Schritte ausgeführt haben, wird die Beispielanwendung ausgeführt und generiert die folgende Ausgabe:
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!
Lesen mit dem Read Preference-Modus
Das MongoDB-Protokoll stellt die folgenden Read Preference-Modi für Clients zur Verfügung:
- PRIMARY
- PRIMARY_PREFERRED
- SECONDARY
- SECONDARY_PREFERRED
- NEAREST
Weitere Informationen zum Verhalten der einzelnen Lesepräferenzeinstellungen finden Sie in der ausführlichen Dokumentation Verhalten von MongoDB Read Preference. In Azure Cosmos DB wird „primary“ der WRITE-Region und „secondary“ der READ-Region zugeordnet.
Basierend auf allgemeine Szenarien empfiehlt sich die Verwendung der folgenden Einstellungen:
- Wenn Hochverfügbarkeit und Lesevorgänge mit geringer Latenz erforderlich sind, verwenden Sie den Lesepräferenzmodus NEAREST. Mit dieser Einstellung werden die Lesevorgänge an die nächste verfügbare Region weitergeleitet. Beachten Sie Folgendes: Wenn die nächstgelegene Region die WRITE-Region ist, werden diese Vorgänge an diese Region weitergeleitet.
- Wenn Hochverfügbarkeit und Geoverteilung von Lesevorgängen erforderlich sind (Latenz ist keine Einschränkung), verwenden Sie den Lesepräferenzmodus PRIMARY PREFERRED oder SECONDARY PREFERRED. Mit dieser Einstellung werden die Lesevorgänge jeweils an eine verfügbare WRITE- oder READ-Region weitergeleitet. Wenn die Region nicht verfügbar ist, werden Anforderungen gemäß dem Lesevoreinstellungsverhalten an die nächste verfügbare Region weitergeleitet.
Der folgende Codeausschnitt aus der Beispielanwendung veranschaulicht, wie die Lesepräferenz NEAREST in NodeJS konfiguriert wird:
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!");
});
In ähnlicher Weise zeigt der folgende Codeausschnitt, wie die Lesepräferenz SECONDARY_PREFERRED in NodeJS konfiguriert wird:
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!");
});
Die Lesepräferenz kann auch durch Übergabe von readPreference
als Parameter in den URI-Optionen der Verbindungszeichenfolge festgelegt werden:
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();
});
Verwenden Sie die entsprechenden Beispielanwendungsrepositorys für andere Plattformen, z.B. für .NET und Java.
Lesevorgänge mithilfe von Tags
Zusätzlich zum Read Preference-Modus ermöglicht das MongoDB-Protokoll die Verwendung von Tags zum Weiterleiten von Lesevorgängen. In der API für MongoDB von Azure Cosmos DB ist das region
-Tag standardmäßig als Teil der isMaster
-Antwort enthalten:
"tags": {
"region": "West US"
}
Daher kann MongoClient das region
-Tag zusammen mit dem Regionsnamen verwenden, um Lesevorgänge an bestimmte Regionen weiterzuleiten. Für Azure Cosmos DB-Konten finden Sie die Regionsnamen im Azure-Portal auf der linken Seite unter Einstellungen -> Daten global replizieren. Diese Einstellung ist nützlich, um Leseisolierung zu erreichen: Fälle, in denen die Clientanwendung Lesevorgänge nur an eine bestimmte Region weiterleiten möchte. Diese Einstellung ist ideal für Szenarien vom Typ Nicht-Produktion/Analyse geeignet, die im Hintergrund ausgeführt werden und keine produktionsrelevanten Dienste sind.
Der folgende Codeausschnitt aus der Beispielanwendung veranschaulicht, wie die Lesepräferenz mit Tags in NodeJS konfiguriert wird:
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!");
});
Verwenden Sie die entsprechenden Beispielanwendungsrepositorys für andere Plattformen, z.B. für .NET und Java.
In diesem Artikel haben Sie erfahren, wie Lesevorgänge mit MongoDB Read Preference-Einstellungen mit der Azure Cosmos DB-API für MongoDB global verteilt werden können.
Bereinigen von Ressourcen
Wenn Sie diese App nicht weiterhin verwenden, löschen Sie im Azure-Portal sämtliche Ressourcen, die mit diesem Artikel erstellt wurden. Führen Sie dazu folgende Schritte aus:
- Klicken Sie im Azure-Portal im Menü auf der linken Seite auf Ressourcengruppen, und klicken Sie auf den Namen der erstellten Ressource.
- Klicken Sie auf der Seite mit Ihrer Ressourcengruppe auf Löschen, geben Sie im Textfeld den Namen der zu löschenden Ressource ein, und klicken Sie dann auf Löschen.