Caches e Bancos de Dados: Convergindo ou Divergindo?

Caches e Bancos de Dados: Convergindo ou Divergindo?

Embora caches e bancos de dados sejam animais diferentes, os bancos de dados sempre armazenaram dados em cache e os caches estão começando a usar discos. O desempenho deles está convergindo ao longo do tempo?

Os caches na memória são há muito considerados um dos componentes de infraestrutura mais rápidos do mercado. No entanto, já faz alguns anos que as soluções de cache começaram a olhar para o reino dos discos flash. Essas iniciativas obviamente levantam uma questão interessante: se um cache na memória pode contar com armazenamento flash, então por que um banco de dados persistente não pode também funcionar como um cache?

Para quantificar os pontos fortes e as desvantagens de cada um, o ScyllaDB uniu forças com o mantenedor do memcached para comparar ambos em diferentes cenários. Explicaremos nossa motivação para esses testes, forneceremos um resumo dos cenários e resultados testados e, em seguida, apresentaremos recomendações para qualquer um que possa estar decidindo entre ScyllaDB e memcached. Ao longo do caminho, analisamos as diferenças arquitetônicas por trás dessas duas soluções e discutimos as compensações envolvidas em cada uma.

Spoiler: os resultados revelam que:

  • Tanto o memcached quanto o ScyllaDB maximizaram os discos e a largura de banda da rede enquanto estavam sob estresse em condições semelhantes, mantendo desempenho geral semelhante.
  • Enquanto o ScyllaDB exigiu alterações na modelagem de dados para saturar completamente a taxa de transferência da rede, o memcached exigiu threads de E/S adicionais para saturar a E/S do disco.
  • Embora o ScyllaDB tenha apresentado latências melhores quando comparado às solicitações de pipeline do memcached para o disco, as latências do memcached foram melhores para solicitações individuais.

Há também um Gitbook detalhado para este projeto, com uma visão mais ampla dos testes e resultados e links para as configurações específicas que você pode usar para executar os testes.

O ScyllaDB gostaria de agradecer ao mantenedor do memcached Alan Kasindorf (também conhecido como dormando ) e Danny Kopping por suas contribuições a este projeto, bem como agradecê-los por seu apoio e paciência. Bônus: dormando recentemente se juntou a mim para uma palestra P99 CONF: "Por que os bancos de dados armazenam em cache, mas os caches vão para o disco". Você pode assistir a essa palestra, além de centenas de outras (incluindo uma ótima de Kopping) em https://www.p99conf.io/

Eficiência de cache de RAM

Quanto mais itens você puder colocar na RAM, maior será sua chance de obter cache hits. Mais cache hits resultam em acesso significativamente mais rápido do que ir para o disco. Em última análise, isso melhora a latência.

Este projeto começou medindo quantos itens poderíamos armazenar em cada data store. Ao longo dos nossos testes, a chave estava entre 4 a 12 bytes (key0 .. keyN) para memcached e 12 bytes para ScyllaDB. O valor foi fixado em 1.000 bytes.

Memcached

O Memcached armazenou aproximadamente 101 milhões de itens até o início da remoção. Ele é eficiente em termos de memória. Dos 114 gigabytes de memória atribuídos ao memcached, isso equivale a aproximadamente 101G de valores, sem considerar o tamanho da chave e outros sinalizadores.

ScyllaDB

O ScyllaDB armazenou entre 60 a 61 milhões de itens antes do início das remoções. Isso não é nenhuma surpresa, dado que seu protocolo requer que mais dados sejam armazenados como parte de uma gravação (como o timestamp de gravação desde a época, a vivacidade da linha, etc.). O ScyllaDB também persiste os dados no disco conforme você avança, o que significa que os filtros Bloom (e, opcionalmente, os índices) precisam ser armazenados na memória para pesquisas de disco subsequentes.

Takeaways

  • O Memcached armazenou aproximadamente 65% mais itens na memória do que o ScyllaDB.
  • As linhas do ScyllaDB têm maior sobrecarga por item para oferecer suporte a uma orientação de coluna larga.
  • No ScyllaDB, filtros Bloom, cache de índice e outros componentes também são armazenados na memória para dar suporte a pesquisas de disco eficientes, contribuindo para outra camada de sobrecarga.

Carga de trabalho somente leitura na memória

A carga de trabalho ideal (embora irrealista) para um cache é aquela em que todos os dados cabem na RAM para que as leituras não exijam acessos ao disco e não ocorram despejos ou falhas. Tanto o ScyllaDB quanto o memcached empregam lógica LRU (least recently used) para liberar memória: quando o sistema é executado sob pressão, os itens são despejados da cauda do LRU; esses são tipicamente os itens menos ativos.

Tirar despejos e cache misses da imagem ajuda a medir e definir uma linha de base de desempenho para ambos os armazenamentos de dados. Ele coloca o foco no que mais importa para esses tipos de cargas de trabalho: taxa de transferência de leitura e latência de solicitação.

Neste teste, primeiro aquecemos ambos os armazenamentos com os mesmos tamanhos de payload usados ​​durante o teste anterior. Então, iniciamos leituras em seus respectivos intervalos por 30 minutos.

Memcached

O Memcached atingiu impressionantes 3 milhões de Gets por segundo, maximizando totalmente a largura de banda da placa de interface de rede (NIC) da AWS (25 Gbps)! O Memcached manteve 3 milhões de rps estáveis, maximizando totalmente o rendimento da NIC.

Os resultados analisados ​​mostram que as respostas p99.999 foram concluídas em menos de 1 milissegundo:

Conteúdo Relacionado

O Rails 8 sempre foi um divisor de águas...
Na era do declínio do império dos Estados Unidos...
Os aplicativos da Web são uma pedra fundamental da...
O mundo da tecnologia tem estado agitado com discussões...
Os desenvolvedores Java enfrentam uma variedade de erros relacionados...
Com várias décadas de experiência, adoro criar aplicativos corporativos...
A escalabilidade é um fator crítico quando se trata...
Ao trabalhar em um projeto de código aberto no...
A Inteligência Artificial (IA) tem se tornado cada vez...
A maioria das organizações enfrenta desafios ao se adaptar...
Quando nós, desenvolvedores, encontramos alguns bugs em nossos logs,...
A cibersegurança é um tópico cada vez mais importante...
A experiência do desenvolvedor (DX) é um tópico cada...
Ao relatar estatísticas resumidas para resultados de testes de...
Explorando as Engrenagens do Kernel Semântico Falei um pouco...
Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.