MemoryDB multirregional - Amazon MemoryDB

MemoryDB multirregional

O MemoryDB multirregional é um banco de dados multirregional totalmente gerenciado, ativo-ativo e multirregional que permite criar aplicações multirregionais com disponibilidade de até 99,999% e latências de leitura de microssegundos e gravação de um dígito em milissegundos. Você pode melhorar a disponibilidade e a resiliência da degradação regional, além de se beneficiar de leituras e gravações locais de baixa latência para aplicações multirregional.

Com o MemoryDB multirregional, é possível criar aplicações multirregionais altamente disponíveis para aumentar a resiliência. Ele oferece replicação ativa-ativa para que você possa fornecer leituras e gravações localmente nas regiões mais próximas de seus clientes, com latência de leitura de microssegundos e latência de gravação de um dígito de milissegundos. O MemoryDB multirregional replica dados de forma assíncrona entre regiões, e os dados normalmente são propagados em um segundo. Ele resolve automaticamente conflitos de atualização e corrige problemas de divergência de dados, permitindo que você se concentre em sua aplicação.

Atualmente, o MemoryDB multirregional é compatível com estas regiões da AWS: Leste dos EUA (Norte da Virgínia e Ohio), Oeste dos EUA (Oregon, N. da Califórnia), Europa (Irlanda, Frankfurt e Londres) e Ásia-Pacífico (Tóquio, Sydney, Mumbai, Seul e Singapura).

Você pode começar facilmente a usar o MemoryDB multirregional com apenas alguns cliques no Console de gerenciamento da AWS ou usando a AWS CLI ou o AWS SDK mais recente.

Consistência e resolução de conflitos

Qualquer atualização feita em uma chave em um dos clusters regionais é propagada para outros de forma assíncrona no cluster multirregional, normalmente em menos de um segundo. Se uma região se tornar isolada ou degradada, o MemoryDB multirregional acompanhará as gravações executadas que ainda não foram propagadas para todos os clusters membros. Quando a região voltar a ficar online, o MemoryDB multirregional retomará a propagação de todas as gravações pendentes dessa região para os clusters membros nas outras regiões. Ele também retomará a propagação de gravações de outros clusters membros para a região que está online novamente. Todas as gravações anteriores bem-sucedidas serão propagadas em algum momento, não importa por quanto tempo a região permaneça isolada.

Conflitos poderão ocorrer se a aplicação atualizar a mesma chave em regiões diferentes e quase ao mesmo tempo. O MemoryDB multirregional usa o tipo de dados replicados sem conflitos (CRDT) para reconciliar entre gravações simultâneas conflitantes. CRDT é uma estrutura de dados que pode ser atualizada de forma independente e simultânea sem coordenação. Isso significa que o conflito de gravação e gravação é mesclado de forma independente em cada réplica com consistência eventual.

Especificamente, o MemoryDB usa 2 níveis de último gravador vence (LWW) para resolver conflitos. Para o tipo de dados string, LWW resolve conflitos em um nível de chave. Para o tipo de dados, LWW resolve conflitos em um nível de subchave. A resolução de conflitos é totalmente gerenciada e ocorre em segundo plano, sem nenhum impacto na disponibilidade da aplicação. Veja a seguir um exemplo do tipo de dados hash:

A região A executa “HSET K F1 V1” no carimbo de data/hora T1; a região B executa “HSET K F2 V2” no carimbo de data/hora T2; após a replicação, as regiões A e B terão a chave K com os dois campos. Quando regiões diferentes atualizam simultaneamente subchaves diferentes na mesma coleção, porque o MemoryDB resolve conflitos no nível da subchave para o tipo de dados hash, as duas atualizações não entram em conflito uma com a outra. Portanto, os dados finais conteriam o efeito de ambas as atualizações.

Time Região A Região B

T1

HSET K F1 V1

T2

HSET K F2 V2

T3

sincronização

sincronização

T4

K: {F1:V1, F2:V2}

K: {F1:V1, F2:V2}

CRDT e exemplos

O MemoryDB multirregional implementa tipos de dados replicados sem conflitos (CRDT) para resolver conflitos de gravação simultâneos emitidos por várias regiões. O CRDT permite que diferentes regiões alcancem consistência eventual de forma independente, desde que tenham recebido o mesmo conjunto de operações, independentemente da ordem.

Quando uma única chave é atualizada simultaneamente em várias regiões, é necessário resolver o conflito de gravação para alcançar a consistência de dados. O MemoryDB multirregional usa a estratégia último gravador vence (LWW) para determinar a operação vencedora, e somente os efeitos da operação que “acontece depois” serão eventualmente observados. Dizemos que uma operação op1 “aconteceu antes” de uma operação op2 se os efeitos de op1 tiverem sido aplicados na região onde ela foi originalmente executada quando a op2 foi executada.

Para coleções (hash, conjunto e conjunto classificado), o MemoryDB multirregional resolve conflitos no nível do elemento. Isso permite que o MemoryDB multirregional use o LWW para resolver conflitos de gravação/gravação em cada elemento. Por exemplo, adicionar simultaneamente elementos diferentes à mesma coleção de várias regiões fará com que a coleção contenha todos os elementos.

Execução simultânea: último gravador vence

No MemoryDB multirregional, quando há uma criação simultânea de uma chave, a última operação executada em qualquer região determinará o resultado da chave. Por exemplo:

Execução simultânea: último gravador vence.

A chave x foi criada na Região B com o valor “b”, mas depois disso a mesma chave foi criada na Região A com o valor “a”. Eventualmente, a chave convergirá para ter o valor “a”, já que a operação na Região A foi a última realizada.

Execução simultânea com tipos de dados conflitantes: último gravador vence

No exemplo anterior, a chave foi criada com o mesmo tipo nas duas regiões. Um comportamento semelhante também será observado se a chave for criada com tipos de dados diferentes:

Execução simultânea com tipos de dados conflitantes: último gravador vence.

A chave x foi criada como string na região B com o valor “b”. Mas depois disso, e antes que a operação fosse replicada para a Região A, a mesma chave é criada na Região A como um Hash. Eventualmente, a chave vai convergir para o hash criado na Região A, já que a operação na Região A foi a última executada.

Criação e exclusão simultâneas: último gravador vence

No cenário em que há uma exclusão e “criação” simultâneas (ou seja, a substituição/adição de valor), a última operação executada vencerá. O resultado final será determinado pela ordem da operação de exclusão. Se a exclusão ocorrer antes:

Criação e exclusão simultâneas: último gravador vence se a exclusão ocorre antes.

A chave x do tipo conjunto foi excluída na Região B. Depois disso, um novo membro foi adicionado a essa chave na Região A. Eventualmente, a chave convergirá para que o conjunto com o único elemento seja adicionado na Região A, já que a operação na Região A foi a última executada.

Se a exclusão ocorrer depois:

Criação e exclusão simultâneas: último gravador vence se a exclusão ocorre depois.

Um novo membro foi adicionado à chave x do tipo Set na Região A. Logo após, a chave foi excluída na Região B. Eventualmente, a chave convergirá para o estado excluído, já que a operação na Região B foi a última executada.

Contadores, operações simultâneas: replicação total do valor com “último gravador vence”

Os contadores no MemoryDB multirregional se comportam de forma semelhante aos tipos sem contadores, fazendo a replicação total do valor e aplicando a estratégia de último gravador vence. A operação simultânea não será combinada, mas a última operação vencerá. Por exemplo:

Replicação total do valor se o último gravador vence.

Nesse cenário, a chave x tem o valor inicial 1. Então, a Região B aumenta o contador x em 2 e, pouco depois, a Região A aumenta o contador em 1. Como a operação na Região A foi a última executada, a chave x vai eventualmente convergir para o valor 2, já que o incremento de 1 foi a última operação realizada.

Comandos não determinísticos são replicados como determinísticos

Para garantir a consistência dos valores nas diferentes regiões, no MemoryDB multirregional, os comandos não determinísticos são replicados como determinísticos. Comandos não determinísticos são aqueles que dependem de fatores externos, como o SETNX. O SETNX depende de a chave existir ou não, e a chave pode estar presente em uma região remota, mas não na região local que está recebendo o comando. Por esse motivo, comandos que seriam não determinísticos passam a ser replicados como replicação completa do valor. No caso de uma string, ela será replicada como um comando SET.

Comandos não determinísticos replicados de forma determinística.

Em resumo, todas as operações no tipo string são replicadas como SET ou DEL, todas as operações no tipo hash são replicadas como HSET ou HDEL, todas as operações no tipo conjunto são replicadas como SADD ou SREM e todas as operações em conjuntos classificados são replicadas como ZADD ou ZREM.