Tutorial: Configurar a distribuição global do Azure Cosmos DB com a API para NoSQL
APLICA-SE A: NoSQL
Neste artigo, mostramos como utilizar a portal do Azure para configurar a distribuição global do Azure Cosmos DB e, em seguida, ligar com a API para NoSQL.
Este artigo abrange as seguintes tarefas:
- Configurar a distribuição global com o portal do Azure
- Configurar a distribuição global com a API para NoSQLs
Adicionar regiões de base de dados globais com o Portal do Azure
O Azure Cosmos DB está disponível em todas as regiões do Azure em todo o mundo. Depois de selecionar o nível de consistência predefinido para a sua conta de base de dados, pode associar uma ou mais regiões (dependendo da sua escolha do nível de consistência predefinido e das suas necessidades de distribuição global).
No Portal do Azure, na barra esquerda, clique em Azure Cosmos DB.
Na página Azure Cosmos DB, selecione a conta de base de dados a modificar.
Na página da conta, clique em Replicar dados globalmente no menu.
Na página Replicar dados globalmente, selecione as regiões a adicionar ou remover, clicando em regiões do mapa e, em seguida, clique em Guardar. Existe um custo para a adição de regiões, consulte a página de preços ou o artigo Distribuir dados globalmente com o Azure Cosmos DB para obter mais informações.
Depois de adicionar uma segunda região, a opção Ativação Pós-falha Manual fica ativada na página Replicar dados globalmente no portal. Pode utilizar esta opção para testar o processo de ativação pós-falha ou alterar a região de escrita principal. Depois de adicionar uma terceira região, a opção Prioridades da Ativação Pós-falha fica ativada na mesma página, para que possa alterar a ordem de ativação pós-falha para as leituras.
Selecionar regiões globais de bases de dados
Existem dois cenários comuns para configurar duas ou mais regiões:
- Proporcionar acesso de latência baixa aos dados pelos utilizadores finais, independentemente da respetiva localização em todo o mundo
- Adicionar resiliência regional para continuidade empresarial e recuperação após desastre (BCDR)
Para proporcionar latência baixa aos utilizadores finais, recomenda-se que implemente a aplicação e o Azure Cosmos DB nas regiões que correspondem àquelas onde os utilizadores da aplicação estão localizados.
Para BCDR, é recomendado adicionar regiões com base nos pares de regiões descritos no artigo Replicação entre regiões no Azure: Continuidade do negócio e recuperação após desastre .
Ligar a uma região preferencial com a API para NoSQL
Para tirar o máximo partido da distribuição global, as aplicações cliente podem especificar a lista de preferência ordenada de regiões a utilizar nas operações de documentos. Com base na configuração da conta do Azure Cosmos DB, disponibilidade regional atual e lista de preferência especificada, o SDK SQL selecionará o ponto final ideal para efetuar operações de escrita e leitura.
Esta lista de preferência é especificada ao inicializar uma ligação com os SDKs SQL. Os SDKs aceitam um parâmetro PreferredLocations
opcional que é uma lista ordenada de regiões do Azure.
O SDK enviará automaticamente todas as escritas para a região de escrita atual. Todas as leituras serão enviadas para a primeira região disponível na lista de localizações preferenciais. Se o pedido falhar, o cliente irá efetuar a ativação pós-falha da lista para a região seguinte.
O SDK tentará apenas ler a partir das regiões especificadas em localizações preferenciais. Assim, por exemplo, se a conta do Azure Cosmos DB estiver disponível em quatro regiões, mas o cliente apenas especificar duas regiões de leitura (sem escrita) no PreferredLocations
, não serão apresentadas leituras fora da região de leitura que não esteja especificada no PreferredLocations
. Se as regiões de leitura especificadas na PreferredLocations
lista não estiverem disponíveis, as leituras serão servidas fora da região de escrita.
A aplicação pode verificar o ponto final de escrita atual e ler o ponto final escolhido pelo SDK ao verificar duas propriedades e WriteEndpoint
ReadEndpoint
, disponíveis na versão 1.8 e superior do SDK. Se a PreferredLocations
propriedade não estiver definida, todos os pedidos serão servidos a partir da região de escrita atual.
Se não especificar as localizações preferenciais mas tiver utilizado o setCurrentLocation
método , o SDK preenche automaticamente as localizações preferenciais com base na região atual em que o cliente está a ser executado. O SDK ordena as regiões com base na proximidade de uma região à região atual.
SDK .NET
O SDK pode ser utilizado sem quaisquer alterações de código. Neste caso, o SDK direciona automaticamente as leituras e as escritas para a região de escrita atual.
Na versão 1.8 e posterior do SDK .NET, o parâmetro ConnectionPolicy do construtor DocumentClient tem uma propriedade denominada Microsoft.Azure.Documents.ConnectionPolicy.PreferredLocations. Esta propriedade é do tipo de Coleção <string>
e deve conter uma lista de nomes de região. Os valores da cadeia são formatados de acordo com a coluna nome da região na página Regiões do Azure , sem espaços antes ou depois do primeiro e último caráter, respetivamente.
Os pontos finais de escrita e leitura atuais estão disponíveis em DocumentClient.WriteEndpoint e DocumentClient.ReadEndpoint, respetivamente.
Nota
Os URLs para os pontos finais não devem ser considerados como constantes de longa duração. O serviço pode atualizá-los em qualquer momento. O SDK processa esta alteração automaticamente.
Se estiver a utilizar o SDK .NET V2, utilize a PreferredLocations
propriedade para definir a região preferencial.
// Getting endpoints from application settings or other configuration location
Uri accountEndPoint = new Uri(Properties.Settings.Default.GlobalDatabaseUri);
string accountKey = Properties.Settings.Default.GlobalDatabaseKey;
ConnectionPolicy connectionPolicy = new ConnectionPolicy();
//Setting read region selection preference
connectionPolicy.PreferredLocations.Add(LocationNames.WestUS); // first preference
connectionPolicy.PreferredLocations.Add(LocationNames.EastUS); // second preference
connectionPolicy.PreferredLocations.Add(LocationNames.NorthEurope); // third preference
// initialize connection
DocumentClient docClient = new DocumentClient(
accountEndPoint,
accountKey,
connectionPolicy);
// connect to DocDB
await docClient.OpenAsync().ConfigureAwait(false);
Em alternativa, pode utilizar a SetCurrentLocation
propriedade e permitir que o SDK escolha a localização preferencial com base na proximidade.
// Getting endpoints from application settings or other configuration location
Uri accountEndPoint = new Uri(Properties.Settings.Default.GlobalDatabaseUri);
string accountKey = Properties.Settings.Default.GlobalDatabaseKey;
ConnectionPolicy connectionPolicy = new ConnectionPolicy();
connectionPolicy.SetCurrentLocation("West US 2"); /
// initialize connection
DocumentClient docClient = new DocumentClient(
accountEndPoint,
accountKey,
connectionPolicy);
// connect to DocDB
await docClient.OpenAsync().ConfigureAwait(false);
Node.js/JavaScript
Nota
Os URLs para os pontos finais não devem ser considerados como constantes de longa duração. O serviço pode atualizá-los em qualquer momento. O SDK processará esta alteração automaticamente.
Segue-se um exemplo de código para Node.js/JavaScript.
// Setting read region selection preference, in the following order -
// 1 - West US
// 2 - East US
// 3 - North Europe
const preferredLocations = ['West US', 'East US', 'North Europe'];
// initialize the connection
const client = new CosmosClient{ endpoint, key, connectionPolicy: { preferredLocations } });
SDK Python
O código seguinte mostra como definir localizações preferenciais com o SDK python:
connectionPolicy = documents.ConnectionPolicy()
connectionPolicy.PreferredLocations = ['West US', 'East US', 'North Europe']
client = cosmos_client.CosmosClient(ENDPOINT, {'masterKey': MASTER_KEY}, connectionPolicy)
Java V4 SDK
O código seguinte mostra como definir localizações preferenciais com o SDK Java:
SDK Java V4 (Maven com.azure::azure-cosmos) API Async
ArrayList<String> preferredRegions = new ArrayList<String>();
preferredRegions.add("East US");
preferredRegions.add( "West US");
preferredRegions.add("Canada Central");
CosmosAsyncClient client =
new CosmosClientBuilder()
.endpoint(HOST)
.key(MASTER_KEY)
.preferredRegions(preferredRegions)
.contentResponseOnWriteEnabled(true)
.buildAsyncClient();
Conector do Spark 3
Pode definir a lista regional preferencial com a spark.cosmos.preferredRegionsList
configuração, por exemplo:
val sparkConnectorConfig = Map(
"spark.cosmos.accountEndpoint" -> cosmosEndpoint,
"spark.cosmos.accountKey" -> cosmosMasterKey,
"spark.cosmos.preferredRegionsList" -> "[West US, East US, North Europe]"
// other settings
)
REST
Assim que uma conta de base de dados tiver sido disponibilizada em várias regiões, os clientes podem consultar a sua disponibilidade ao efetuar um pedido GET neste URI https://{databaseaccount}.documents.azure.com/
O serviço devolverá uma lista de regiões e os URIs de ponto final correspondentes do Azure Cosmos DB para as réplicas. A região de escrita atual será indicada na resposta. Em seguida, o cliente pode selecionar o ponto final adequado para obter todos os pedidos da API REST da seguinte forma.
Resposta de exemplo
{
"_dbs": "//dbs/",
"media": "//media/",
"writableLocations": [
{
"Name": "West US",
"DatabaseAccountEndpoint": "https://globaldbexample-westus.documents.azure.com:443/"
}
],
"readableLocations": [
{
"Name": "East US",
"DatabaseAccountEndpoint": "https://globaldbexample-eastus.documents.azure.com:443/"
}
],
"MaxMediaStorageUsageInMB": 2048,
"MediaStorageUsageInMB": 0,
"ConsistencyPolicy": {
"defaultConsistencyLevel": "Session",
"maxStalenessPrefix": 100,
"maxIntervalInSeconds": 5
},
"addresses": "//addresses/",
"id": "globaldbexample",
"_rid": "globaldbexample.documents.azure.com",
"_self": "",
"_ts": 0,
"_etag": null
}
- Todos os pedidos PUT, POST e DELETE têm de ir para o URI de escrita indicado
- Todos os GETs e outros pedidos só de leitura (por exemplo, consultas) podem ir para qualquer ponto final à escolha do cliente
Os pedidos de escrita para regiões só de leitura falharão com o código de erro HTTP 403 ("Proibido").
Se a região de escrita for alterada após a fase de deteção inicial do cliente, as escritas subsequentes na região de escrita anterior falharão com o código de erro HTTP 403 ("Proibido"). Em seguida, o cliente deve obter novamente a lista de regiões para obter a região de escrita atualizada.
Já está, isto conclui este tutorial. Pode saber como gerir a consistência da sua conta replicada globalmente ao ler Níveis de consistência no Azure Cosmos DB. Para obter mais informações sobre como funciona a replicação de base de dados global no Azure Cosmos DB, veja Distribuir dados globalmente com o Azure Cosmos DB.
Passos seguintes
Neste tutorial, fez o seguinte:
- Configurar a distribuição global com o portal do Azure
- Configurar a distribuição global com a API para NoSQLs
Agora, pode avançar para o próximo tutorial para saber como desenvolver localmente com o emulador local do Azure Cosmos DB.
Está a tentar planear a capacidade de uma migração para o Azure Cosmos DB? Pode utilizar informações sobre o cluster de bases de dados existentes para o planeamento de capacidade.
- Se tudo o que sabe é o número de vcores e servidores no cluster de bases de dados existente, leia sobre como estimar unidades de pedido com vCores ou vCPUs
- Se souber taxas de pedido típicas para a carga de trabalho atual da base de dados, leia sobre como estimar unidades de pedido com o planeador de capacidade do Azure Cosmos DB