A maioria das aplicações de comércio eletrônico não tolera nenhum tempo de inatividade. Qualquer impacto nos recursos da aplicação pode afetar as métricas gerais de disponibilidade do site. O banco de dados Azure Cosmos é um dos principais bancos de dados NoSQL utilizados na indústria. Embora o próprio Azure Cosmos forneça uma disponibilidade mínima de 99,99% 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 Gravação em Múltiplas Regiões
Leituras em uma única região afetarão a disponibilidade e também levarão a um único ponto de falha. Portanto, as aplicações com muitas leituras devem ter pelo menos a leitura em várias regiões ativada, embora a gravação em várias regiões não seja uma opção para a aplicação. No entanto, a gravação em várias regiões fornece uma maior disponibilidade em aplicações com muitas leituras e gravações.
Com a capacidade de gravação em várias regiões, você pode habilitar a replicação de múltiplos mestres, onde todas as regiões configuradas podem atuar como pontos de gravação.
Melhores Práticas
- Selecione regiões mais próximas da região onde a aplicação está implantada.
- Configure múltiplas regiões preferenciais com base nos requisitos da aplicação para melhorar a disponibilidade.
- Defina mais de uma região preferencial na aplicação para leituras e gravações 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 no topo da lista.
Aplicação Implantada em West US 2
//Configure a aplicação implantada em 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 em East US
//Configurar aplicação implantada 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 multi-região possa proporcionar maior disponibilidade, configurar as leituras e gravações da aplicação mais próximas da região onde está sendo implantada e fornecer mais de uma região preferida ajuda a aplicação a voltar imediatamente para a região disponível sem qualquer intervenção manual.
Níveis de Consistência
Selecionar níveis de consistência com base nos requisitos da aplicação. Expectativas de consistência mais elevadas geralmente resultam em disponibilidade reduzida. Se a aplicação exigir uma forte consistência de dados, assegure-se de que ela possa tolerar latências potencialmente mais altas. Por outro lado, se uma consistência mais fraca for aceitável, a aplicação pode se beneficiar de um melhor throughput e disponibilidade.
Conclusão
Escolher o nível de consistência correto depende puramente da necessidade da aplicação e, embora possa haver um impacto na disponibilidade de uma consistência mais forte, a disponibilidade geral de uma aplicação não será afetada pela escolha dos níveis de consistência mais fortes.
Failover
Failover Manual
Desenvolvedores ou associados podem fazer login no portal e realizar manualmente o failover para a próxima região disponível durante uma interrupção na região à qual a aplicação está atualmente conectada. Embora essa opção forneça disponibilidade em certo grau, ela requer uma intervenção manual para o failover, o que pode impactar as métricas de disponibilidade do site como um todo.
Failover Gerenciado pelo Serviço
A ativação da failover gerenciada pelo 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 na aplicação durante o processo de failover.
Conclusão
Embora ambos forneçam maior disponibilidade, a capacidade de failover gerenciada pelo serviço oferece a flexibilidade de mudar para a próxima região disponível sem se preocupar com a implantação da aplicação.
Chave de Partição e Índices
- Definir uma chave de partição no Azure Cosmos DB é crucial antes de executar qualquer aplicação nele. O Cosmos DB é altamente eficiente para aplicações intensivas em leitura, por isso é essencial considerar os critérios de consulta e definir as consultas para ler registros do banco de dados antes de integrar o Cosmos DB à sua aplicação.
- 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 de 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 esses casos de uso.
Autoscale de Throughput
O Azure Cosmos DB suporta tanto throughput padrão (manual) quanto autoscale no nível do contêiner.
Throughput Manual
O aplicativo decide a quantidade de RU/s permitida, e exceder os pedidos de RU/s será limitado pelo tempo configurado. Requer intervenção manual para aumentar o throughput.
Escalonamento Automático de Throughput
O aplicativo pode configurar o throughput máximo que suporta, e o Cosmos se ajusta automaticamente com base no tráfego recebido. Ao exceder o throughput de escalonamento automático, as solicitações serão limitadas pelo tempo configurado.
Conclusão
Embora ambos ofereçam maior disponibilidade, o throughput de escalonamento automático proporciona a flexibilidade de lidar com tráfego variável sem limitações 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
Os backups são realizados periodicamente a cada minuto configurado, com um valor mínimo de 1 hora e um máximo de 24 horas. Também oferece opções para manter o armazenamento de backup redundante nos níveis Geo, Zona ou Local. A equipe do aplicativo 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 na base 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 oferece 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 repetidas com o suporte para restaurar o banco de dados e permite que os aplicativos o restaurem em qualquer região (onde os backups existem) em um ponto específico no tempo.
Em conclusão, embora as métricas de disponibilidade sejam cruciais para qualquer aplicação, elas têm um custo. Opções que oferecem uma disponibilidade maior do que a configuração padrão implicam em despesas adicionais. Além disso, as opções mencionadas acima podem não ser necessárias ou adequadas para todas as aplicações que usam 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