Поделиться через


Глобальное распределение операций чтения с помощью API Azure Cosmos DB для MongoDB

Область применения: MongoDB

В этой статье описывается, как глобально распространить операции чтения с применением параметров чтения MongoDB с помощью API Azure Cosmos DB для MongoDB.

Необходимые компоненты

Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.

Кроме того, бесплатную пробную версию Azure Cosmos DB можно использовать без подписки Azure, без оплаты и каких-либо обязательств. Или же можно использовать эмулятор Azure Cosmos DB из этого руководства с такой строкой подключения:

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

В этой статье краткого руководства приведены инструкции по настройке учетной записи Azure Cosmos DB с глобальным распределением и подключению к ней с помощью портал Azure.

Клонирование примера приложения

Откройте окно терминала Git, например Git Bash, и выполните команду cd, чтобы перейти в рабочий каталог.

Затем выполните следующие команды, чтобы клонировать репозиторий с примером. В зависимости от платформы, которую вы хотите использовать, выберите один из следующих примеров репозиториев:

  1. Пример приложения .NET
  2. Пример приложения NodeJS
  3. Пример приложения Mongoose.
  4. Пример приложения Java
  5. Пример приложения SpringBoot.
git clone <sample repo url>

Выполнение приложения

В зависимости от используемой платформы установите необходимые пакеты и запустите приложение. Чтобы установить зависимости, выполните инструкции в файле сведений, включенном в репозиторий с примерами приложений. Например, в примере приложения NodeJS выполните команды ниже, чтобы установить необходимые пакеты и запустить приложение.

cd mean
npm install
node index.js

Приложение попытается подключиться к источнику MongoDB, и это подключение завершится сбоем из-за недопустимой строки подключения. Выполните инструкции в файле сведений для обновления строки подключения url. Кроме того, укажите для параметра readFromRegion регион чтения в своей учетной записи Azure Cosmos DB. Следующие инструкции взяты из примера приложения NodeJS:

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

После выполнения этих шагов пример приложения запустится, и мы получим следующие выходные данные:

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!

Чтение с использованием режима параметров чтения

Протокол MongoDB предоставляет следующие режимы параметров чтения для клиентов.

  1. ОСНОВНОЙ
  2. PRIMARY_PREFERRED.
  3. SECONDARY
  4. SECONDARY_PREFERRED.
  5. NEAREST.

Подробные сведения о поведении всех режимов параметров чтения MongoDB см. в этой документации. В Azure Cosmos DB основной регион соответствует региону записи, а дополнительный — региону чтения.

На основе общих сценариев мы рекомендуем использовать следующие параметры:

  1. Если требуются операции с высокой доступностью и низкой задержкой , используйте режим предпочтений для чтения В БЛИЖАЙШЕЕ время. Этот параметр направляет операции чтения в ближайший доступный регион. Обратите внимание, что если ближайшим регионом является регион записи, то эти операции будут направлены в этот регион.
  2. Если требуются высокая доступность и геораспределение операций чтения (задержка не является ограничением), используйте режим параметров чтения PRIMARY PREFERRED или SECONDARY PREFERRED. Эта настройка направляет операции чтения в регион, доступный для записи или чтения, соответственно. Если регион недоступен, запросы направляются в следующий доступный регион в соответствии с поведением параметров чтения.

В следующем фрагменте кода, взятого из примера приложения, показано, как настроить режим параметров чтения "NEAREST" в 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!");
  });

Аналогичным образом в приведенном ниже фрагменте кода показано, как настроить режим параметров чтения "SECONDARY_PREFERRED" в 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!");
  });

Кроме того, этот режим можно задать, передав readPreference как параметр в универсальном коде ресурса (URI) строки подключения.

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

Используйте соответствующие репозитории с примерами приложений для других платформ, например .NET и Java.

Чтение с использованием тегов

Кроме режима параметров чтения, в протоколе MongoDB можно использовать теги для направления операций чтения. В API Azure Cosmos DB для MongoDB region тег по умолчанию включается в ответ isMaster :

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

Таким образом, MongoClient может использовать тег region с именем региона, чтобы направлять операции чтения в определенные регионы. Для учетных записей Azure Cosmos DB имена регионов можно найти в портал Azure слева в разделе "Параметры-реплика> данных" глобально. Этот параметр позволяет достичь изоляции операций чтения — в случаях, когда клиентскому приложению нужно направлять операции чтения только в определенный регион. Этот параметр идеально подходит для сценариев нерабочего или аналитического типа, которые работают в фоновом режиме и не задействуют критически важные рабочие службы.

В следующем фрагменте кода, взятого из примера приложения, показано, как настроить параметры чтения с тегами в 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!");
  });

Используйте соответствующие репозитории с примерами приложений для других платформ, например .NET и Java.

В этой статье вы узнали, как глобально распространить операции чтения с применением параметров чтения с помощью API Azure Cosmos DB для MongoDB.

Очистка ресурсов

Если вы не собираетесь использовать это приложение дальше, удалите все ресурсы, созданные в ходе работы с этой статьей, на портале Azure, выполнив следующие действия:

  1. В меню слева на портале Azure щелкните Группы ресурсов, а затем выберите имя созданного ресурса.
  2. На странице группы ресурсов щелкните Удалить, в текстовом поле введите имя ресурса для удаления и щелкните Удалить.

Следующие шаги