Diagnosticar e resolver problemas de disponibilidade de SDKs do Azure Cosmos DB em ambientes multiregionais

APLICA-SE A: NoSQL

Este artigo descreve o comportamento da versão mais recente dos SDKs do Azure Cosmos DB quando vê um problema de conectividade a uma determinada região ou quando ocorre uma ativação pós-falha de região.

Todos os SDKs do Azure Cosmos DB db dão-lhe uma opção para personalizar a preferência regional. As seguintes propriedades são utilizadas em SDKs diferentes:

Quando o SDK inicializa com uma configuração que especifica a preferência regional, obterá primeiro as informações da conta, incluindo as regiões disponíveis a partir do ponto final global. Em seguida, aplicará uma interseção da preferência regional configurada e das regiões disponíveis da conta e utilizará a ordem na preferência regional para priorizar o resultado.

Se a configuração da preferência regional contiver regiões que não sejam uma região disponível na conta, os valores serão ignorados. Se estas regiões inválidas forem adicionadas mais tarde à conta, o SDK irá utilizá-las se forem superiores na configuração de preferência.

Tipo de conta Leituras Escritas
Região de escrita única Região preferencial com ordem mais alta Região primária
Várias regiões de escrita Região preferencial com ordem mais alta Região preferencial com ordem mais alta

Se não definir uma região preferencial, o cliente do SDK será predefinido para a região primária:

Tipo de conta Leituras Escritas
Região de escrita única Região primária Região primária
Várias regiões de escrita Região primária Região primária

Nota

A região primária refere-se à primeira região na lista de regiões da conta do Azure Cosmos DB. Se os valores especificados como preferência regional não corresponderem a nenhuma região do Azure existente, serão ignorados. Se corresponderem a uma região existente, mas a conta não for replicada para a mesma, o cliente ligar-se-á à próxima região preferencial que corresponda ou à região primária.

Aviso

A lógica de ativação pós-falha e disponibilidade descrita neste documento pode ser desativada na configuração do cliente, o que não é aconselhado, a menos que a aplicação do utilizador processe os próprios erros de disponibilidade. Isto pode ser conseguido através de:

Em circunstâncias normais, o cliente do SDK ligar-se-á à região preferencial (se for definida uma preferência regional) ou à região primária (se não for definida nenhuma preferência) e as operações serão limitadas a essa região, a menos que ocorram qualquer um dos cenários abaixo.

Nestes casos, o cliente que utiliza o SDK do Azure Cosmos DB expõe registos e inclui as informações de repetição como parte das informações de diagnóstico da operação:

  • A propriedade RequestDiagnosticsString em respostas no SDK .NET V2.
  • A propriedade Diagnóstico em respostas e exceções no SDK .NET V3.
  • O método getDiagnostics() nas respostas e exceções no SDK Java V4.

Ao determinar a próxima região por ordem de preferência, o cliente do SDK utilizará a lista de regiões da conta, priorizando as regiões preferenciais (se aplicável).

Para obter um detalhe abrangente sobre as garantias de SLA durante estes eventos, veja os SLAs para obter disponibilidade.

Remover uma região da conta

Quando remove uma região de uma conta do Azure Cosmos DB, qualquer cliente do SDK que utilize ativamente a conta irá detetar a remoção da região através de um código de resposta de back-end. Em seguida, o cliente marca o ponto final regional como indisponível. O cliente tenta novamente a operação atual e todas as operações futuras são permanentemente encaminhadas para a região seguinte por ordem de preferência. No caso de a lista de preferências ter apenas uma entrada (ou estar vazia), mas a conta tiver outras regiões disponíveis, será encaminhada para a região seguinte na lista de contas.

Adicionar uma região a uma conta

A cada 5 minutos, o cliente do SDK do Azure Cosmos DB lê a configuração da conta e atualiza as regiões de que está ciente.

Se remover uma região e a adicionar posteriormente à conta, se a região adicionada tiver uma ordem de preferência regional mais elevada na configuração do SDK do que a região ligada atual, o SDK voltará a utilizar esta região permanentemente. Depois de a região adicionada ser detetada, todos os pedidos futuros são direcionados para a mesma.

Se configurar o cliente de preferência para ligar a uma região que a conta do Azure Cosmos DB não tem, a região preferida é ignorada. Se adicionar essa região mais tarde, o cliente deteta-a e mudará permanentemente para essa região.

Efetuar a ativação pós-falha da região de escrita numa única conta de região de escrita

Se iniciar uma ativação pós-falha da região de escrita atual, o próximo pedido de escrita falhará com uma resposta de back-end conhecida. Quando esta resposta é detetada, o cliente consulta a conta para conhecer a nova região de escrita e continua a repetir a operação atual e encaminha permanentemente todas as operações de escrita futuras para a nova região.

Indisponibilidade regional

Se a conta for uma única região de escrita e a indisponibilidade regional ocorrer durante uma operação de escrita, o comportamento é semelhante a uma ativação pós-falha manual. Para pedidos de leitura ou várias contas de regiões de escrita, o comportamento é semelhante à remoção de uma região.

Garantias de consistência de sessão

Ao utilizar a consistência da sessão, o cliente tem de garantir que consegue ler as suas próprias escritas. Em contas de região de escrita única em que a preferência de região de leitura é diferente da região de escrita, podem existir casos em que o utilizador emite uma escrita e, em seguida, faz uma leitura a partir de uma região local, a região local ainda não recebeu a replicação de dados (velocidade de restrição de luz). Nestes casos, o SDK recebe uma falha específica do serviço na operação de leitura e repete a leitura na região primária para garantir a consistência da sessão. Para contas com várias regiões de escrita, aplica-se a mesma semântica de sessão, mas como existem várias regiões de escrita disponíveis, as repetições são emitidas com a lista de regiões preferencial ou a ordem de região da conta.

Problemas de conectividade transitórios no protocolo TCP

Em cenários em que o cliente do SDK do Azure Cosmos DB está configurado para utilizar o protocolo TCP, para um determinado pedido, podem existir situações em que as condições de rede estão a afetar temporariamente a comunicação com um ponto final específico. Estas condições de rede temporárias podem surgir como tempos limite TCP e erros de Serviço Indisponível (HTTP 503). Se possível, o cliente repetirá o pedido localmente no mesmo ponto final durante alguns segundos.

Se o utilizador tiver configurado uma lista de regiões preferencial com mais do que uma região e o cliente tiver esgotado todas as repetições locais, poderá tentar repetir essa operação única na região seguinte a partir da lista de preferências. As operações de escrita só podem ser repetidas noutra região se a conta do Azure Cosmos DB tiver várias regiões de escrita ativadas, enquanto as operações de leitura podem ser repetidas em qualquer região disponível.

Passos seguintes