Lançamento do Dragonfly 1.0, um sistema de cache de dados na memória

Foi lançado o sistema de cache e armazenamento em memória Dragonfly, que manipula dados no formato chave/valor e pode ser usado como uma solução leve para acelerar o trabalho de sites altamente carregados, armazenando em cache consultas lentas ao SGBD e dados intermediários na RAM. O Dragonfly oferece suporte aos protocolos Memcached e Redis, o que permite usar bibliotecas de cliente existentes e transferir projetos usando Memcached e Redis para o Dragonfly sem retrabalhar o código.

Comparado ao Redis, o Dragonfly alcançou um aumento de 2 vezes no desempenho (6 milhões de solicitações por segundo) para cargas de trabalho típicas no ambiente c16gn.25xlarge do Amazon EC3.8. Comparado ao Memcached no ambiente AWS c6gn.16xlarge, o Dragonfly foi capaz de executar 4.7 vezes mais solicitações de gravação por segundo (3.8 milhões versus 806 mil) e 1.77 vezes mais solicitações de leitura por segundo (3.7 milhões versus 2.1 milhões).

Lançamento do Dragonfly 1.0, um sistema de cache de dados na memória

Nos testes de armazenamento de 5 GB de dados, o Dragonfly exigiu 30% menos memória que o Redis. Ao criar snapshots com o comando “bgsave”, o consumo de memória aumenta, mas nos momentos de pico permanece quase três vezes menos do que no Redis, e a operação de gravação de snapshot em si é muito mais rápida (no teste, um snapshot no Dragonfly foi gravado em 30 segundos, enquanto Redis - em 42 segundos).

Lançamento do Dragonfly 1.0, um sistema de cache de dados na memória

O alto desempenho é alcançado graças a uma arquitetura multithread sem compartilhamento de recursos (shared-nothing), o que significa que cada thread recebe um processador separado e separado com sua própria porção de dados, trabalhando sem mutexes e spin locks. Para garantir a atomicidade ao trabalhar com múltiplas chaves, são usados ​​bloqueios VLL leves. Para armazenar informações na memória de forma eficiente, é utilizada a estrutura dashtable, que implementa um tipo de tabela hash particionada.

Algumas características do Dragonfly:

  • Modo de cache, que substitui automaticamente os dados antigos por novos depois que a memória livre se esgota.
  • Suporte para vinculação aos dados durante toda a vida durante a qual os dados são considerados relevantes.
  • Suporte para liberar o estado de armazenamento para o disco em segundo plano para recuperação posterior após a reinicialização.
  • A presença de um console HTTP (liga-se à porta TCP 6379) para gerenciamento do sistema e uma API para retorno de métricas, compatível com Prometheus.
  • Suporte para 185 comandos Redis, que é aproximadamente equivalente à funcionalidade da versão Redis 5.
  • Suporta todos os comandos Memcached, exceto CAS (check-and-set).
  • Suporte para operações assíncronas para criação de snapshots.
  • Consumo de memória previsível.
  • Intérprete Lua 5.4 integrado.
  • Suporta tipos de dados complexos, como hashes, conjuntos, listas (ZSET, HSET, LIST, SETS e STRING) e dados JSON.
  • Suporta replicação de armazenamento para tolerância a falhas e balanceamento de carga.

O código do Dragonfly é escrito em C/C++ e é distribuído sob a BSL (Business Source License). A licença BSL foi proposta pelos cofundadores do MySQL como uma alternativa ao modelo Open Core. A essência do BSL é que o código de funcionalidade avançada está inicialmente disponível para modificação, mas por algum tempo só pode ser usado gratuitamente se forem atendidas condições adicionais, que exigem a compra de uma licença comercial para contornar. Os termos de licença adicionais para o projeto Dragonfly exigem que o código seja transferido para a licença Apache 2.0 em 15 de março de 2028. Até o momento, a licença permite o uso do código apenas para garantir o funcionamento de seus serviços e produtos, mas proíbe o uso para a criação de serviços em nuvem pagos que funcionem como complemento do Dragonfly.

A versão Dragonfly 1.0 se destaca pela implementação de suporte para replicação de dados do servidor primário para o secundário. No entanto, o Dragonfly pode ser configurado para ser usado como um armazenamento secundário que recebe dados de um servidor primário baseado em Dragonfly ou baseado em Redis. A API de gerenciamento de replicação é compatível com Redis e é baseada no uso dos comandos ROLE e REPLICAOF (SLAVEOF).

Fonte: opennet.ru

Adicionar um comentário