Configurar gravações de várias regiões em seus aplicativos que usam o Azure Cosmos DB

APLICA-SE A: NoSQL

Em cenários de gravação de várias regiões, é possível obter um benefício de desempenho gravando apenas na região próxima à instância do aplicativo. O Azure Cosmos DB lida com a replicação para você nos bastidores.

Depois de habilitar sua conta para gravação de várias regiões, você deve fazer duas alterações em seu aplicativo no ConnectionPolicy. Em ConnectionPolicy, defina UseMultipleWriteLocations como true e passe o nome da região em que o aplicativo será implantado para ApplicationRegion. Essa ação preenche a propriedade PreferredLocations com base na proximidade geográfica do local passado. Se uma nova região for adicionada posteriormente à conta, o aplicativo não precisará ser atualizado ou reimplantado. Ele detecta automaticamente a região mais próxima e será automaticamente iniciado em caso de evento regional.

Observação

Contas do Azure Cosmos DB configuradas inicialmente com uma região de gravação única podem ser configuradas para várias regiões de gravação sem nenhum tempo de inatividade. Para saber mais, veja Configurar gravação de várias regiões.

Portal do Azure

Para usar gravações de várias regiões, habilite sua conta do Azure Cosmos DB para várias regiões usando o portal do Azure. Especifique em quais regiões seu aplicativo pode gravar.

Para habilitar gravações de várias regiões, use as seguintes etapas:

  1. Entre no portal do Azure.

  2. Navegue até sua conta do Azure Cosmos DB e, no menu, abra o painel Replicar dados globalmente.

  3. Na opção Gravações de várias regiões, escolha habilitar. Isso adiciona automaticamente as regiões existentes para ler e gravar regiões.

  4. É possível adicionar mais regiões selecionando os ícones no mapa ou selecionando o botão Adicionar região. Todas as regiões que você adicionar terão leitura e gravação habilitadas.

  5. Depois de atualizar a lista de regiões, selecione Salvar para aplicar as alterações.

    Captura de tela para habilitar gravações de várias regiões usando portal do Azure.

SDK v2 do .NET

Para habilitar gravações de várias regiões em seu aplicativo, defina UseMultipleWriteLocations como true. Além disso, defina SetCurrentLocation como a região na qual o aplicativo está sendo implantado e em que o Azure Cosmos DB está replicado:

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

SDK v3 do .NET

Para habilitar gravações de várias regiões no seu aplicativo, defina ApplicationRegion como a região na qual o aplicativo está sendo implantado e onde o Azure Cosmos DB está replicado:

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

Opcionalmente, você pode usar o CosmosClientBuilder e o WithApplicationRegion para obter o mesmo resultado:

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

SDK do Java v4

Para habilitar gravações de várias regiões no seu aplicativo, chame .multipleWriteRegionsEnabled(true) e .preferredRegions(preferredRegions) no construtor de clientes, em que preferredRegions é uma List das regiões para as quais os dados são replicados por ordem de preferência, tendo idealmente as regiões com a menor distância/melhor latência em primeiro lugar:

API assíncrona do SDK do Java V4 (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 do Java Assíncrono V2

O SDK do Java V2 usou o Maven com.microsoft.azure::azure-cosmosdb. Para habilitar gravações de várias regiões no seu aplicativo, defina policy.setUsingMultipleWriteLocations(true) e defina policy.setPreferredLocations como a List das regiões para as quais os dados são replicados por ordem de preferência — idealmente as regiões com a menor distância/melhor latência em primeiro lugar:

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 do Node.js, do JavaScript e do TypeScript

Para habilitar gravações de várias regiões em seu aplicativo, defina connectionPolicy.UseMultipleWriteLocations como true. Além disso, defina connectionPolicy.PreferredLocations como as regiões para as quais os dados são replicados por ordem de preferência — idealmente as regiões com a menor distância/melhor latência em primeiro lugar:

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 do Python

Para habilitar gravações de várias regiões em seu aplicativo, defina connection_policy.UseMultipleWriteLocations como true. Além disso, defina as connection_policy.PreferredLocations como as regiões para as quais os dados são replicados por ordem de preferência — idealmente as regiões com a menor distância/melhor latência em primeiro lugar.

connection_policy = documents.ConnectionPolicy()
connection_policy.UseMultipleWriteLocations = True
connection_policy.PreferredLocations = [region]

client = cosmos_client.CosmosClient(self.account_endpoint, {
                                    'masterKey': self.account_key}, connection_policy, documents.ConsistencyLevel.Session)

Próximas etapas