Está disponível a primeira versão do sistema de cache de dados em memória Dragonfly, que oferece suporte aos protocolos Memcached e Redis, mas permite realizar consultas com muito mais desempenho e menor consumo de memória. O sistema manipula dados no formato chave/valor e pode ser usado como uma solução leve para acelerar o desempenho de sites de alta carga, armazenando em cache consultas lentas ao banco de dados e dados intermediários na memória. O código do Dragonfly é escrito em C/C++ e é distribuído sob a licenç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 da BSL é que o código da funcionalidade estendida está inicialmente disponível para modificação, mas por um determinado período pode ser utilizado gratuitamente apenas sob certas condições adicionais, para contornar as quais é necessária a aquisição de uma licença comercial. As condições adicionais da licença do projeto Dragonfly preveem a migração do código para a licença Apache 2.0 apenas em 1º de junho de 2027. Até esse momento, a licença permite o uso do código apenas para garantir a operação de seus serviços e produtos, mas proíbe a aplicação para criar serviços de nuvem pagos que funcionem como uma camada sobre o Dragonfly.
De acordo com os desenvolvedores e os testes demonstrados, o Dragonfly se apresenta como o sistema de armazenamento em memória mais rápido. Em comparação com o Redis, o Dragonfly conseguiu um aumento de 25 vezes no desempenho e uma redução de três vezes no consumo de memória em tipos típicos de carga. Um servidor O Dragonfly pode processar milhões de consultas por segundo; por exemplo, em um ambiente Amazon EC2 c6gn.16xlarge, foi alcançado um desempenho de 3,8 milhões de consultas por segundo.

Nos testes de armazenamento de 5 GB de dados, o Dragonfly exigiu 30% menos memória do que o Redis. Durante a criação de snapshots com o comando 'bgsave', o consumo de memória aumenta, mas em momentos de pico permanece quase três vezes menor do que no Redis, e a operação de gravação do snapshot é executada significativamente mais rápido (no teste, o snapshot no Dragonfly foi gravado em 30 segundos, enquanto no Redis levou 42 segundos).

Desempenho elevado é alcançado graças à arquitetura multithreaded sem compartilhamento de recursos (shared-nothing), que implica a vinculação de um manipulador isolado a cada thread, cada um com sua própria porção de dados, operando sem mutexes e bloqueios spin. Para garantir a atomicidade ao trabalhar com várias chaves, são utilizadas bloqueios leves VLL. Para o armazenamento eficiente de informações na memória, é utilizada a estrutura dashtable, implementando uma variante de tabelas hash particionadas.
Entre as funcionalidades disponíveis na primeira versão, destaca-se o suporte ao protocolo RESP2 e a 130 comandos do Redis, o que corresponde aproximadamente à funcionalidade da versão Redis 2.8. Além disso, o Dragonfly suporta todos os comandos do memcached, exceto o CAS (check-and-set), fornece suporte a operações assíncronas para criação de snapshots, garante um consumo de memória previsível, oferece um interpretador Lua 5.4 embutido e suporta tipos de dados complexos, como hashes, conjuntos e listas (ZSET, HSET, LIST, SETS e STRING).
Um modo de cache separado está disponível, onde os dados antigos são automaticamente substituídos por novos após o esgotamento da memória livre. É possível vincular um tempo de vida aos dados, durante o qual eles são considerados válidos. O estado do armazenamento pode ser despejado em disco em segundo plano para posterior recuperação após reinicialização. Para gerenciar o sistema, uma console HTTP é fornecida (vinculada à porta TCP 6379) e uma API para entrega de métricas, compatível com Prometheus. Versões futuras planejam expandir o suporte aos comandos do Redis e implementar a capacidade de replicação do armazenamento para garantir tolerância a falhas e balanceamento de carga.
Fonte: opennet.ru
