Configurare le scritture in più aree nelle applicazioni che usano Azure Cosmos DB

SI APPLICA A: NoSQL

Negli scenari di scrittura in più aree, si ottiene un vantaggio in termini di prestazioni scrivendo solo nell'area vicina all'istanza dell'applicazione. Azure Cosmos DB gestisce automaticamente la replica in background.

Dopo aver abilitato l'account per più aree di scrittura, è necessario apportare due modifiche all'oggetto ConnectionPolicy nell'applicazione. In ConnectionPolicy impostare UseMultipleWriteLocations su true e passare il nome dell'area in cui è distribuita l'applicazione in ApplicationRegion. Questo popolerà la proprietà PreferredLocations in base alla prossimità geografica della località passata. Se successivamente viene aggiunta una nuova area all'account, non è necessario aggiornare o ridistribuire l'applicazione. Rileva automaticamente l'area più vicina e punta automaticamente ad essa in caso di evento a livello di area.

Nota

Gli account Azure Cosmos DB inizialmente configurati con una singola area di scrittura possono essere configurati per più aree di scrittura senza tempi di inattività. Per altre informazioni, consultare Configurare più aree di scrittura.

Azure portal

Per usare le scritture in più aree, abilitare l'account Azure Cosmos DB per più aree nel portale di Azure. Specificare le aree in cui l'applicazione può eseguire le scritture.

Per abilitare le scritture in più aree, seguire questa procedura:

  1. Accedere al portale di Azure.

  2. Passare all'account Azure Cosmos DB e dal menu aprire il riquadro Replica i dati a livello globale.

  3. Nell'opzione Scritture in più aree scegliere Abilita. Le aree esistenti verranno automaticamente aggiunge alle aree di lettura e scrittura.

  4. È possibile aggiungere altre aree selezionando le icone sulla mappa o selezionando il pulsante Aggiungi area. Per tutte le aree aggiunte sono abilitate per la lettura e le scritture.

  5. Dopo aver aggiornato l'elenco delle aree, selezionare Salva per applicare le modifiche.

    Screenshot to enable multi-region writes using Azure portal.

.NET SDK v2

Per abilitare le scritture in più aree nell'applicazione, impostare UseMultipleWriteLocations su true. Inoltre, impostare SetCurrentLocation sull'area in cui viene distribuita l'applicazione e in cui viene replicato Azure Cosmos DB:

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

.NET SDK v3

Per abilitare le scritture in più aree nelle applicazioni, impostare ApplicationRegion sull'area in cui viene distribuita l'applicazione e in cui viene replicato Azure Cosmos DB:

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

Facoltativamente, è possibile usare CosmosClientBuilder e WithApplicationRegion per ottenere lo stesso risultato:

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

Java v4 SDK

Per abilitare le scritture in più aree nell'applicazione, chiamare .multipleWriteRegionsEnabled(true) e .preferredRegions(preferredRegions) nel generatore client, dove preferredRegions è un oggetto List delle aree in cui i dati vengono replicati in ordine di preferenza, ovvero prima le aree con distanza più breve/latenza migliore:

API asincrona Java SDK 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();

Java V2 SDK asincrono

Java V2 SDK usa Maven com.microsoft.azure::azure-cosmosdb. Per abilitare le scritture in più aree nell'applicazione, impostare policy.setUsingMultipleWriteLocations(true) e impostare policy.setPreferredLocations sull'oggetto List delle aree in cui i dati vengono replicati in ordine di preferenza, ovvero prima le aree con distanza più breve/latenza migliore:

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

Node.js, JavaScript e TypeScript SDK

Per abilitare le scritture in più aree nell'applicazione, impostare connectionPolicy.UseMultipleWriteLocations su true. Impostare anche connectionPolicy.PreferredLocations sulle aree in cui i dati vengono replicati in ordine di preferenza, ovvero prima le aree con distanza più breve/latenza migliore:

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

Python SDK

Per abilitare le scritture in più aree nell'applicazione, impostare connection_policy.UseMultipleWriteLocations su true. Impostare anche connection_policy.PreferredLocations sulle aree in cui i dati vengono replicati in ordine di preferenza, ovvero prima le aree con distanza più breve/latenza migliore.

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)

Passaggi successivi