Настройка операций записи в нескольких регионах в приложениях, использующих Azure Cosmos DB

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

После того как вы активируете свою учетную запись для нескольких регионов записи, необходимо внести два изменения в ваше приложение ConnectionPolicy. В ConnectionPolicy установите UseMultipleWriteLocations как true и передайте имя региона, в котором развернуто приложение, в ApplicationRegion. Это действие заполняет PreferredLocations свойство, основанное на географической близости к переданному местоположению. Если новый регион позже добавляется в учетную запись, приложение не должно быть обновлено или повторно развернуто. Он автоматически обнаруживает ближайший регион и наводится на него в случае регионального события.

Замечание

Изначально настроенные учетные записи Azure Cosmos DB с одним регионом записи можно настроить для нескольких регионов записи с нулевым временем простоя. Дополнительные сведения см. в разделе "Настройка нескольких регионов записи".

Azure portal

Чтобы использовать многорегиональные записи, включите учетную запись Azure Cosmos DB для нескольких регионов с помощью портала Azure. Укажите регионы, в которые приложение может записывать данные.

  1. Войдите на портал Azure.

  2. Перейдите к своей учетной записи Azure Cosmos DB. В меню откройте глобальную панель "Репликация данных ".

  3. В разделе Операции записи в нескольких регионах выберите Включить. Это позволит автоматически добавить существующие регионы в качестве регионов для чтения и записи.

  4. Вы можете добавить дополнительные регионы, выбрав значки на карте или нажав кнопку "Добавить регион ". Все добавленные регионы имеют возможность как чтения, так и записи.

  5. После обновления списка регионов нажмите кнопку "Сохранить ", чтобы применить изменения.

    Скриншот, показывающий, как включить мульти-региональную запись через портал Azure.

Пакет SDK версии 2 для .NET

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

ConnectionPolicy policy = new ConnectionPolicy
    {
        ConnectionMode = ConnectionMode.Direct,
        ConnectionProtocol = Protocol.Tcp,
        UseMultipleWriteLocations = true
    };
policy.SetCurrentLocation("West US 2");

пакет SDK .NET версии 3

Чтобы включить запись в нескольких регионах в приложении, задайте ApplicationRegion регион, в котором развертывается приложение и где реплицируется Azure Cosmos DB:

CosmosClient cosmosClient = new CosmosClient(
    "<connection-string-from-portal>", 
    new CosmosClientOptions()
    {
        ApplicationRegion = Regions.WestUS2,
    });

При необходимости можно использовать CosmosClientBuilder и WithApplicationRegion для достижения того же результата:

CosmosClientBuilder cosmosClientBuilder = new CosmosClientBuilder("<connection-string-from-portal>")
            .WithApplicationRegion(Regions.WestUS2);
CosmosClient client = cosmosClientBuilder.Build();

пакет SDK Java версии 4

Чтобы включить поддержку мульти-региональных записей в приложении, используйте .multipleWriteRegionsEnabled(true) и .preferredRegions(preferredRegions) в конструкторе клиента, где preferredRegions представляет собой List регионов, в которые данные реплицируются по предпочтению. В идеале регионы с коротким расстоянием или оптимальной задержкой перечислены сначала:

Async API пакета SDK для Java версии 4 (Maven com.azure::azure-cosmos):


ArrayList<String> preferredRegions = new ArrayList<String>();
preferredRegions.add(region);

CosmosAsyncClient client =
        new CosmosClientBuilder()
                .endpoint(HOST)
                .key(MASTER_KEY)
                .multipleWriteRegionsEnabled(true)
                .preferredRegions(preferredRegions)
                .buildAsyncClient();

Пакет SDK Async Java версии 2

Пакет SDK java версии 2 использует Maven com.microsoft.azure::azure-cosmosdb. Чтобы включить запись в нескольких регионах в приложении, задайте policy.setUsingMultipleWriteLocations(true) и задайте policy.setPreferredLocations для List регионов, в которые данные реплицируются по предпочтениям. В идеале регионы с коротким расстоянием или оптимальной задержкой перечислены сначала:

ConnectionPolicy policy = new ConnectionPolicy();
policy.setUsingMultipleWriteLocations(true);
policy.setPreferredLocations(Collections.singletonList(region));

AsyncDocumentClient client =
    new AsyncDocumentClient.Builder()
        .withMasterKeyOrResourceToken(this.accountKey)
        .withServiceEndpoint(this.accountEndpoint)
        .withConsistencyLevel(ConsistencyLevel.Eventual)
        .withConnectionPolicy(policy).build();

Пакеты SDK для Node.js, JavaScript и TypeScript

Чтобы включить операции записи в нескольких регионах в приложении, задайте для connectionPolicy.UseMultipleWriteLocations значение true. Кроме того, задайте connectionPolicy.PreferredLocations для регионов, в которые данные реплицируются, упорядочив их по предпочтениям. В идеале регионы с коротким расстоянием или оптимальной задержкой перечислены сначала:

const connectionPolicy: ConnectionPolicy = new ConnectionPolicy();
connectionPolicy.UseMultipleWriteLocations = true;
connectionPolicy.PreferredLocations = [region];

const client = new CosmosClient({
  endpoint: config.endpoint,
  auth: { masterKey: config.key },
  connectionPolicy,
  consistencyLevel: ConsistencyLevel.Eventual
});

пакет SDK Python

Чтобы включить запись в нескольких регионах в вашем приложении, установите значение multiple_write_locations на True в инициализации вашего клиента, а в клиенте задайте preferred_locations, указав регионы, в которые данные реплицируются в порядке предпочтения. В идеале регионы с коротким расстоянием или оптимальной задержкой перечислены сначала:

client = cosmos_client.CosmosClient(self.account_endpoint, self.account_key,
                                    multiple_write_locations=True, preferred_locations=[region])

Пакет SDK для GO

Чтобы включить мультирегион в приложении, используйте PreferredRegions в ClientOptions:

client, err := azcosmos.NewClient(endpoint, token, &azcosmos.ClientOptions{
	PreferredRegions: []string{"West US", "Central US"},
})

Дальнейшие действия