Introdução
O CosmosDB vem sendo cada vez mais citado no ambiente de bancos de dados NoSQL devido ao seu multi-modelo, multi-master, baixa latência e alta taxa de transferência. Neste artigo vou mostrar como você pode criar uma conta do Azure CosmosDB usando o modelo do Portal do Azure e CLI ou do Azure Resource Manager. Também vou explicar sobre o multi-master e como o CosmosDB resolve o problema em cenários de replicação de dados com vários mestres.
Descrição
Em um modelo de sistema distribuído, a disponibilidade de dados com baixa latência é um grande desafio. O CosmosDB já fornece uma solução para a latência nos dados lidos com a ajuda da replicação de várias regiões. Portanto, não há latência na operação de leitura porque os dados estão disponíveis no servidor de dados da região mais próxima. Mas há uma latência na operação de gravação (mesmo que baixa), porque apenas um datacenter está lá para executar uma operação de gravação. Agora, o CosmosDB lança um novo recurso para melhorar a latência de gravação com a ajuda de vários mestres.
O que é multi mestre / multi master?
Até agora, toda a arquitetura do sistema distribuído funciona com um servidor de dados para escrita e vários servidores de dados para leitura. Os dados são replicados para todos os servidores de dados vindo do servidor de escrita. Com o recurso multi-master, podemos escolher mais de um servidor para agir como servidor de gravação, diminuindo assim, ainda mais a latência. O grande desafio do multi-master, evitar a duplicação de dados na replicação de dados.
Como habilitar recursos multi-mestre usando o CLI
Abaixo está o comando usado para ativar o recurso multi-mestre usando o CLI.
az cosmosdb create \ –-name"myCosmosDbAccount" \ --resource-group "myResourceGroup" \ --default-consistency-level "Session" \ --enable-automatic-failover "true" \ --locations "EastUS=0""WestUS=1" \ --enable-multiple-write-locations true \
Ativando vários locais de gravação
Como habilitar os recursos Multi-master do CosmosDB usando o portal do Azure
- Em uma nova janela do navegador, entre no portal do Azure .
- Clique em Criar um recurso> Bancos de dados> Banco de dados do Azure CosmosDB.
- Preencha todos os detalhes, conforme a imagem abaixo.
- O nome da conta do CosmosDB deve ser exclusivo e não poderá ser alterado após a criação.
- Precisa habilitar gravações multi-regionais, que por padrão está desabilitado.
Dificuldades de replicação
Deixe-me explicar as dificuldades na replicação na arquitetura multi-master. Vamos supor que temos três servidores de dados chamados A, B e C, todos com direitos de leitura e gravação.
Os dados a, b e c escreveram em A, os dados d, e e f escreveram em B, os dados g, hej (aqui não usam i ) escreveram em C. Primeiro, o servidor B replicado de A pelos dados d, e e f. Após a replicação B ter a, b, c, d, e e f.
Segundo, o servidor C replicado de B pelos dados a, b, c, d, e e f. Após os dados de replicação serão a, b, c, d, e, f, g, h e j.
Terceiro, o servidor C replicado de A, os dados são a, b e c. Mas esses dados já estão disponíveis no servidor C. Se a replicação for executada, os dados serão duplicados, veja a imagem abaixo.
Cenários de Conflito
Existem três tipos de duplicação ao trabalhar com vários mestres.
- Inserção
Ele ocorrerá quando inserirmos dois ou mais documentos com o mesmo índice exclusivo (por exemplo, ID) de duas ou mais regiões simultaneamente. Os documentos são removidos quando aplicamos a resolução de conflitos. Apenas um documento com o ID original é confirmado. - Alteração
Isso ocorrerá quando atualizarmos um único documento simultaneamente de duas ou mais regiões. - Exclusão
Isso ocorrerá quando excluirmos um documento de uma região e atualizá-lo de uma ou mais regiões.
O Cosmos DB oferece três tipos diferentes de resoluções de conflitos, como Last-Writer-Win (LWW), procedimento definido pelo usuário e customização assíncrona.
Porém só LWW está disponível para todos os modelos de cosmosDB e é o recurso de resolução de conflito padrão.
LWW
Ele resolverá os conflitos com base no valor numérico passado em uma propriedade no documento.
Inserir e atualizar conflitos
Se um ou mais documentos duplicarem na inserção e substituírem as operações, o documento que contiver os maiores valores para o caminho de resolução de conflitos se tornará o vencedor. Se vários documentos tiverem o mesmo valor numérico para o caminho de resolução, o vencedor selecionado será não determinístico. Toda a região replicada pelo documento da região vencedora.
Excluir conflito
Se houver conflitos de exclusão envolvidos, os excluídos sempre vencerão outros conflitos de substituição.
Casos de uso
- Mídia social
Aplicativos de mídia social precisam de baixa latência em leitura e gravação para melhorar o engajamento do usuário. Se alguém escreve o status em sua conta deve ser escrito em sua região para melhorar a latência de gravação e isso deve ser compartilhado com seus amigos de todo o mundo. - Comércio eletrônico
Para aumentar a capacidade de resposta dos aplicativos. A disponibilidade para leituras e gravações em várias regiões fornece maior disponibilidade com latência muito baixa. - IoT
Por exemplo, o aplicativo precisa rastrear os dados de voo, que partem de Cingapura e chegam aos EUA. Quando o voo decolar, a região de origem será Cingapura, na região de origem do desembarque, realocada para os EUA, que está fechada. A operação de gravação de dados será muito rápida porque os dados são gravados na região mais próxima.