antonio leandro

dados e armazenamento

Amazon MemoryDB: A Fast and Durable Memory-First Cloud Database

paper · Yacine Taleb, Kevin McGehee, Nan Yan, et al. · · ~23 min de leitura do original

a tese

durabilidade não precisa morar no mesmo processo que a velocidade: tirando o log de transações para fora do redis, dá para ter leitura em microssegundos e 11 noves de durabilidade no mesmo banco

o que fica

  1. MemoryDB separa o motor de execução em memória do log de transações durável, e com isso escala desempenho, disponibilidade e durabilidade de forma independente.
  2. O preço da durabilidade aparece assimétrico: a leitura fica na casa dos microssegundos e a escrita sobe para milissegundos de um dígito.
  3. Compatibilidade total com o Redis open-source entrou como requisito de projeto, não como consequência: o cliente não muda de protocolo para ganhar durabilidade.
  4. Onze noves de durabilidade com consistência forte tiram o Redis do papel de cache descartável e o colocam como fonte da verdade.
  5. O paper é de 2024 e o serviço lançou em 2021: é descrição de sistema em produção, não proposta de pesquisa.
  6. O resumo público não abre o formato do log, o protocolo de failover nem números de benchmark — para o mecanismo, é preciso abrir o pdf.

o problema

Redis é rápido porque tudo mora na memória de um processo só: estrutura de dados nativa, sem ida a disco no caminho quente, sem camada de buffer para atravessar. Isso o transformou no cache padrão da indústria. Cache, porém, é peça descartável por definição — se o nó morre, você repopula a partir da fonte da verdade, que é outro banco, em outro time, com outro custo. A conta fecha enquanto ninguém depende do dado que está lá dentro.

A conta para de fechar quando alguém quer usar o Redis como fonte da verdade, e várias equipes querem: as estruturas dele (sorted set, stream, hash) costumam ser exatamente o que a aplicação precisa, e a latência às vezes é o produto. Aí a pergunta muda de “quanto custa repopular” para “o que acontece com a última escrita reconhecida quando a máquina reinicia”. As defesas clássicas — snapshot periódico em disco, replicação assíncrona para réplicas — moram todas dentro do mesmo processo que atende o tráfego, competem com ele por recurso e, no caso da replicação assíncrona, não fecham o buraco: um failover pode descartar escritas que o cliente já viu confirmadas.

a ideia

O movimento é tirar a durabilidade de dentro do engine. O motor de execução continua sendo o Redis, em memória, com a semântica que a aplicação já conhece; mas o commit não termina nele. A escrita só é reconhecida depois de gravada num serviço de log de transações separado, de baixa latência e durável. O log passa a ser a fonte da verdade e a memória passa a ser uma projeção rápida dele.

A analogia honesta é o write-ahead log de um banco relacional — com a diferença de que o WAL saiu do processo, virou serviço, e ganhou SLA e escala próprios. Daí vem o resultado que o paper anuncia: desempenho, disponibilidade e durabilidade deixam de disputar o mesmo processo e passam a escalar em dimensões separadas. O sistema entrega consistência forte e alta disponibilidade sem exigir que o cliente troque de protocolo: a compatibilidade com o Redis open-source é requisito, não efeito colateral.

O material público disponível aqui é o resumo do trabalho. Ele sustenta a arquitetura em linhas gerais e os números de latência, mas não descreve o formato do log, o protocolo de replicação nem como um nó reconstrói estado depois de uma falha. Quem precisa desse nível abre o pdf.

o que isso custou

O custo está escrito no próprio anúncio, e é uma assimetria de três ordens de grandeza: leitura na casa dos microssegundos, escrita em milissegundos de um dígito. A leitura é servida da memória local; a escrita paga o round trip até o log durável antes de responder. Para workload de leitura dominante, o negócio é ótimo. Para workload write-heavy com orçamento de latência apertado, essa é a linha que decide se o sistema serve.

O segundo custo é de dependência. O banco agora tem outro sistema distribuído no caminho crítico da escrita, com o modo de falha e a operação que isso implica. Quem só quer cache e aceita perder dados não deveria pagar essa conta — a durabilidade aqui é uma escolha por workload, não um upgrade grátis.

O terceiro é sobre o próprio texto. É um paper industrial sobre um sistema em produção há três anos, gênero que raramente enumera o que não funcionou. O resumo não declara limitações. Tratar a ausência de limitações declaradas como ausência de limitações seria erro de leitura.

onde isso aparece hoje

Separar o log durável do motor de execução é o padrão que a AWS vinha aplicando ao relacional em Amazon Aurora, onde o log deixa de ser detalhe de recuperação e vira o próprio banco. MemoryDB aplica o mesmo corte a um engine em memória, e o resultado se parece com o de Amazon DynamoDB: durabilidade e disponibilidade deixam de ser responsabilidade do operador e passam a ser propriedade do serviço.

Fora da Amazon, o mesmo corte reaparece em Kora, que separa o broker de Kafka do armazenamento durável por trás dele. O padrão é reconhecível: pega-se um sistema single-node querido pelos desenvolvedores, mantém-se a API intacta e troca-se a camada de persistência por um serviço de nuvem — a compatibilidade é o que faz a migração acontecer.

lido na íntegra por pipeline de llm, revisado por antonio leandro antes de publicar ·