A maioria das aplicações de e-commerce tem zero tolerância a qualquer tempo de inatividade. Qualquer impacto nos recursos da aplicação pode afetar as métricas de disponibilidade geral do site. O banco de dados Azure Cosmos é um dos principais bancos de dados NoSQL utilizados na indústria. Embora o Azure Cosmos ofereça 99,99% de disponibilidade mínima para uma única região sem uma zona de disponibilidade, como podemos melhorar ainda mais a disponibilidade do banco de dados com as opções disponíveis no Azure Cosmos?
Leitura e Escrita em Múltiplas Regiões
Leituras em uma única região impactarão a disponibilidade e também resultarão em um único ponto de falha. Portanto, aplicações com alta demanda de leitura devem pelo menos ter a leitura em múltiplas regiões habilitada, embora a escrita em múltiplas regiões não seja uma opção para a aplicação. No entanto, a escrita em múltiplas regiões proporciona uma maior disponibilidade tanto para aplicações com alta demanda de leitura quanto para aquelas com alta demanda de escrita.
Com a capacidade de escrita em múltiplas regiões, você pode habilitar a replicação multi-mestre, onde todas as regiões configuradas podem servir como pontos finais de escrita.
Melhores Práticas
- Selecione regiões mais próximas da região onde a aplicação está implantada.
- Configure várias regiões preferenciais com base nos requisitos da aplicação para aumentar a disponibilidade.
- Defina mais de uma região preferencial na aplicação para leituras e escritas a fim de melhorar a disponibilidade e reduzir a latência.
- Defina as regiões preferenciais na ordem das regiões atuais ou mais próximas da aplicação primeiro na lista.
Aplicação Implantada na West US 2
//Configure a aplicação implantada na West US 2 conforme abaixo
import com.azure.cosmos.CosmosClientBuilder;
import com.azure.cosmos.CosmosClient;
// ...
CosmosClientBuilder clientBuilder = new CosmosClientBuilder()
.setEndpoint(accountEndpoint)
.setKey(accountKey)
.setPreferredRegions(Arrays.asList("West US 2", "East US"));
CosmosClient client = clientBuilder.buildClient();
//
Aplicação Implantada na East US
//Configurar aplicativo implantado no Leste dos EUA como abaixo
import com.azure.cosmos.CosmosClientBuilder;
import com.azure.cosmos.CosmosClient;
// ...
CosmosClientBuilder clientBuilder = new CosmosClientBuilder()
.setEndpoint(accountEndpoint)
.setKey(accountKey)
.setPreferredRegions(Arrays.asList( "East US","West US 2"));
CosmosClient client = clientBuilder.buildClient();
//
Conclusão
Embora habilitar leituras e gravações em múltiplas regiões possa oferecer maior disponibilidade, configurar as leituras e gravações do aplicativo mais próximo da região onde está sendo implantado e fornecer mais de uma região preferencial ajuda o aplicativo a voltar imediatamente para a região disponível sem intervenção manual.
Níveis de Consistência
Selecione os níveis de consistência com base nos requisitos do aplicativo. Expectativas de consistência mais altas geralmente resultam em disponibilidade reduzida. Se o aplicativo exigir forte consistência de dados, certifique-se de que ele consiga tolerar latências potencialmente mais altas. Por outro lado, se uma consistência mais fraca for aceitável, o aplicativo pode se beneficiar de maior capacidade de processamento e disponibilidade.
Conclusão
A escolha do nível de consistência certo depende puramente da necessidade do aplicativo e, embora possa haver um impacto na disponibilidade com uma consistência mais forte, a disponibilidade geral de um aplicativo não será afetada pela escolha de níveis de consistência mais fortes.
Failover
Failover Manual
Desenvolvedores ou associados podem fazer login no portal e realizar o failover manualmente para a próxima região disponível durante uma interrupção na região à qual o aplicativo está atualmente conectado. Embora essa opção ofereça disponibilidade até certo ponto, ela requer uma intervenção manual para o failover, o que pode impactar as métricas gerais de disponibilidade do site.
Failover Gerenciado pelo Serviço
Habilitar a failover gerenciado por serviço permite que o Cosmos mude automaticamente para a próxima região disponível com base na prioridade configurada no portal. Essa opção elimina a necessidade de quaisquer alterações no aplicativo durante o processo de failover.
Conclusão
Embora ambos proporcionem maior disponibilidade, a taxa de transferência do failover gerenciado por serviço oferece a flexibilidade de mudar para a próxima região disponível sem se preocupar com a implantação do aplicativo.
Chave de Partição e Índices
- Definir uma chave de partição no Azure Cosmos DB é crucial antes de executar qualquer aplicativo nele. O Cosmos DB é altamente eficiente para aplicações intensivas em leitura, portanto, é essencial considerar os critérios de pesquisa e definir as consultas para ler registros do banco de dados antes de integrar o Cosmos DB ao seu aplicativo.
- Por padrão, cada item em um contêiner do Cosmos DB é automaticamente indexado. No entanto, excluir certos itens ou campos da indexação pode ajudar a reduzir o consumo de Unidades de Requisição (RUs). É tão importante adicionar campos para indexação quanto remover índices em campos que não precisam ser indexados.
- Evite armazenar itens excessivamente grandes no Azure Cosmos DB.
- Minimize consultas entre partições sempre que possível.
- Certifique-se de que as consultas incluam filtros para melhorar a eficiência.
- Evite consultar a mesma chave de partição repetidamente; em vez disso, implemente uma camada de cache para tais casos de uso.
Autoscale de Taxa de Transferência
O Azure Cosmos DB suporta tanto a taxa de transferência padrão (manual) quanto a taxa de transferência em autoscale no nível do contêiner.
Taxa de Transferência Manual
A aplicação decide o RU/s permitido, e solicitações de RU/s no máximo serão limitadas pelo tempo configurado. Requer intervenção manual para aumentar a taxa de transferência.
Dimensionamento Automático de Taxa de Transferência
A aplicação pode configurar a taxa de transferência máxima que suporta, e o Cosmos dimensiona automaticamente com base no tráfego recebido. Ao exceder a taxa de transferência dimensionada automaticamente, as solicitações serão limitadas pelo tempo configurado.
Conclusão
Embora ambos forneçam maior disponibilidade, o dimensionamento automático de taxa de transferência oferece a flexibilidade de lidar com o tráfego variável sem limitação ou impacto na disponibilidade.
Backup e Restauração
O Azure Cosmos DB permite backups periódicos por padrão para todas as contas.
Backup Periódico
Backups são realizados periodicamente para cada minuto configurado com um valor mínimo de 1 hora e máximo de 24 horas. Também fornece opções para manter o armazenamento de backup redundante no nível Geo, Zone ou Local. A equipe da aplicação precisa entrar em contato com o suporte para recuperar o backup.
Backup Contínuo
A opção de backup contínuo mantém o armazenamento de backup no banco de dados Cosmos da região configurada e permite a retenção de dados dos últimos 7 dias ou dos últimos 30 dias. Também fornece restauração pontual.
Conclusão
Optar pelo backup contínuo garante uma restauração mais rápida do banco de dados. Isso elimina a necessidade de interações recorrentes com o suporte para restaurar o banco de dados e permite que as aplicações o restaurem para qualquer região (onde os backups existem) em um momento específico.
Em conclusão, embora as métricas de disponibilidade sejam cruciais para qualquer aplicativo, elas têm um custo. Opções que oferecem maior disponibilidade do que a configuração padrão incorrem em despesas adicionais. Além disso, as opções mencionadas acima podem não ser necessárias ou adequadas para todos os aplicativos que utilizam o Cosmos. No entanto, é essencial adotar e implementar as melhores práticas no Azure Cosmos para otimizar a disponibilidade de forma eficaz.
Source:
https://dzone.com/articles/how-to-maximize-the-azure-cosmos-db-availability