Udostępnij za pośrednictwem


Konfigurowanie zapisów w wielu regionach w aplikacjach korzystających z usługi Azure Cosmos DB

DOTYCZY: NoSQL

W scenariuszach zapisu w wielu regionach można uzyskać korzyść z wydajności, zapisując tylko w regionie zbliżonym do wystąpienia aplikacji. Usługa Azure Cosmos DB obsługuje replikację za kulisami.

Po włączeniu konta dla wielu regionów zapisu należy wprowadzić dwie zmiany w aplikacji w pliku ConnectionPolicy. W elemecie ConnectionPolicyustaw UseMultipleWriteLocations true wartość i przekaż nazwę regionu, w którym aplikacja jest wdrażana w programie ApplicationRegion. Ta akcja wypełnia właściwość w oparciu PreferredLocations o bliskość geograficzną z przekazanej lokalizacji. Jeśli nowy region zostanie później dodany do konta, aplikacja nie musi być aktualizowana ani wdrażana ponownie. Automatycznie wykrywa bliżej region i automatyczne domy na nim w przypadku wystąpienia zdarzenia regionalnego.

Uwaga

Konta usługi Azure Cosmos DB początkowo skonfigurowane z pojedynczym regionem zapisu można skonfigurować do wielu regionów zapisu z zerowym czasem awarii. Aby dowiedzieć się więcej, zobacz Konfigurowanie regionów wielokrotnego zapisu.

Azure Portal

Aby używać zapisów w wielu regionach, włącz konto usługi Azure Cosmos DB dla wielu regionów przy użyciu witryny Azure Portal. Określ regiony, w których aplikacja może zapisywać dane.

Aby włączyć zapisy w wielu regionach, wykonaj następujące kroki:

  1. Zaloguj się w witrynie Azure Portal.

  2. Przejdź do konta usługi Azure Cosmos DB i z menu otwórz okienko Replikuj dane globalnie .

  3. W obszarze opcji Zapisy w wielu regionach wybierz pozycję Włącz. Automatycznie dodaje istniejące regiony do regionów odczytu i zapisu.

  4. Możesz dodać więcej regionów, wybierając ikony na mapie lub wybierając przycisk Dodaj region . Wszystkie dodane regiony mają włączone operacje odczytu i zapisu.

  5. Po zaktualizowaniu listy regionów wybierz pozycję Zapisz , aby zastosować zmiany.

    Zrzut ekranu przedstawiający włączanie zapisu w wielu regionach przy użyciu witryny Azure Portal.

.NET SDK 2

Aby włączyć zapisy w wielu regionach w aplikacji, ustaw wartość UseMultipleWriteLocations true. Ponadto ustaw na SetCurrentLocation region, w którym aplikacja jest wdrażana i gdzie jest replikowana usługa Azure Cosmos DB:

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

.NET SDK 3

Aby włączyć zapisy w wielu regionach w aplikacji, ustaw na ApplicationRegion region, w którym aplikacja jest wdrażana i gdzie jest replikowana usługa Azure Cosmos DB:

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

Opcjonalnie możesz użyć elementu CosmosClientBuilder i WithApplicationRegion , aby uzyskać ten sam wynik:

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

Zestaw SDK języka Java w wersji 4

Aby włączyć zapisy w wielu regionach w aplikacji, wywołaj .multipleWriteRegionsEnabled(true) metodę i .preferredRegions(preferredRegions) w konstruktorze klienta, gdzie jest regionemList, w którym preferredRegions dane są replikowane do uporządkowanych według preferencji — najlepiej regionów z najkrótszym dystansem/najlepszym opóźnieniem:

Zestaw JAVA SDK w wersji 4 (Maven com.azure::azure-cosmos) Async API:


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

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

Async Java V2 SDK

Zestaw SDK języka Java w wersji 2 używał witryny Maven com.microsoft.azure::azure-cosmosdb. Aby włączyć zapisy w wielu regionach w aplikacji, ustaw policy.setUsingMultipleWriteLocations(true) i ustaw dla policy.setPreferredLocations List regionów, w których dane są replikowane według preferencji — najlepiej regionów z najkrótszym dystansem/najlepszym opóźnieniem:

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

zestawy SDK Node.js, JavaScript i TypeScript

Aby włączyć zapisy w wielu regionach w aplikacji, ustaw wartość connectionPolicy.UseMultipleWriteLocations true. Ponadto ustaw na connectionPolicy.PreferredLocations regiony, w których dane są replikowane według preferencji — najlepiej regiony o najkrótszym dystansie/najlepszym opóźnieniu:

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

Zestaw SDK dla języka Python

Aby włączyć zapisy w wielu regionach w aplikacji, ustaw wartość connection_policy.UseMultipleWriteLocations true. Ponadto ustaw na connection_policy.PreferredLocations regiony, w których dane są replikowane według preferencji — najlepiej regiony o najkrótszym dystansie/najlepszym opóźnieniu.

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)

Następne kroki