Configuración de escrituras en varias regiones en las aplicaciones que usan Azure Cosmos DB

SE APLICA A: NoSQL

En escenarios de escritura en varias regiones, puede obtener una ventaja de rendimiento escribiendo solo en la región cercana a la instancia de la aplicación. Azure Cosmos DB controla la replicación automáticamente en segundo plano.

Después de habilitar la cuenta para varias regiones de escritura, debe realizar dos cambios en la aplicación en el ConnectionPolicy. Dentro de ConnectionPolicy, establezca UseMultipleWriteLocations en true y pase el nombre de la región donde la aplicación se implementa a ApplicationRegion. Esta acción rellena la propiedad PreferredLocations según la proximidad geográfica de la ubicación pasada. Si una nueva región se agrega más adelante a la cuenta, la aplicación no tiene que actualizarse ni volver a implementarse. Detecta automáticamente la región más cercana y los hogares automáticos en ella en caso de que se produzca un evento regional.

Nota

Las cuentas de Azure Cosmos DB configuradas inicialmente con una sola región de escritura pueden configurarse para varias regiones de escritura con cero tiempo de inactividad. Para más información, consulte, Configuración de varias regiones de escritura.

Azure portal

Para usar escrituras en varias regiones, habilite la cuenta de Azure Cosmos DB para varias regiones mediante el Azure Portal. Especifique en qué regiones puede escribir la aplicación.

Siga estos pasos para habilitar las escrituras en varias regiones:

  1. Inicie sesión en el Portal de Azure.

  2. Vaya a la cuenta de Azure Cosmos DB y desde el menú, abra el panel Replicar datos globalmente.

  3. En la opción Escrituras en varias regiones, seleccione Habilitar. Agrega automáticamente las regiones existentes a las regiones de lectura y escritura.

  4. Puede agregar más regiones seleccionando los iconos en el mapa o el botón Agregar región. Todas las regiones que agregue tendrán habilitadas las operaciones de lectura y escritura.

  5. Después de actualizar la lista de regiones, seleccione Guardar para aplicar los cambios.

    Captura de pantalla para habilitar las escrituras en varias regiones mediante Azure Portal.

SDK de .NET, versión 2

Para habilitar las escrituras en varias regiones en la aplicación, establezca UseMultipleWriteLocations en true. Además, establezca SetCurrentLocation en la región en que se va a implementar la aplicación y donde se va a replicar Azure Cosmos DB:

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

.NET SDK v3

Para habilitar escrituras en varias regiones en la aplicación, establezca ApplicationRegion en la región en la que se va a implementar la aplicación y donde se va a replicar Azure Cosmos DB:

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

También puede usar CosmosClientBuilder y WithApplicationRegion para lograr el mismo resultado:

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

SDK de Java V4

Para habilitar las escrituras de varias regiones en la aplicación, llame a .multipleWriteRegionsEnabled(true) y .preferredRegions(preferredRegions) en el generador de cliente, donde preferredRegions es una List de las regiones en las que los datos se replican en orden de preferencia. Lo ideal es que se ordenen las regiones con menor distancia o mejor latencia primero:

API asincrónica del SDK para 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();

Versión 2 del SDK de Java sincrónico

La versión 2 del SDK de Java usaba el Maven com.microsoft.azure::azure-cosmosdb. Para habilitar las escrituras de varias regiones en la aplicación, establezca policy.setUsingMultipleWriteLocations(true) y establezca policy.setPreferredLocations en la List de las regiones en las que los datos se replican en orden de preferencia. Lo ideal es que se ordenen las regiones con menor distancia o mejor latencia primero:

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 de Node.js, JavaScript y TypeScript

Para habilitar las escrituras en varias regiones en la aplicación, establezca connectionPolicy.UseMultipleWriteLocations en true. Además, establezca connectionPolicy.PreferredLocations en las regiones en las que los datos se replican en orden de preferencia, lo ideal es que las regiones con menor distancia o mejor latencia se ordenen primero:

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

Para habilitar las escrituras en varias regiones en la aplicación, establezca connection_policy.UseMultipleWriteLocations en true. Además, establezca connection_policy.PreferredLocations en las regiones en las que los datos se replican en orden de preferencia, lo ideal es que las regiones con menor distancia o mejor latencia se ordenen primero.

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)

Pasos siguientes