O projeto Dragonfly está desenvolvendo um substituto mais rápido para Redis e Memcached

Está disponível a primeira versão do sistema de cache in-memory Dragonfly, que oferece suporte aos protocolos Memcached e Redis, mas permite que consultas sejam executadas com desempenho muito superior e menor consumo de memória. O sistema manipula dados no formato chave/valor e pode ser usado como uma solução leve para agilizar o trabalho de sites de alta carga, armazenando em cache consultas lentas ao SGBD e dados intermediários na RAM. 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 do projeto Dragonfly exigem que o código seja transferido para a licença Apache 2.0 somente em 1º de junho de 2027. 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.

De acordo com os desenvolvedores e testes demonstrados, o Dragonfly afirma ser o sistema de armazenamento de memória mais rápido. Comparado ao Redis, o Dragonfly alcançou um aumento de 25 vezes no desempenho e uma redução de três vezes no consumo de memória para cargas de trabalho típicas. Um servidor Dragonfly pode processar milhões de solicitações por segundo, por exemplo, no ambiente Amazon EC2 c6gn.16xlarge foi possível atingir um desempenho de 3.8 milhões de solicitações por segundo.

O projeto Dragonfly está desenvolvendo um substituto mais rápido para Redis e Memcached

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 menor 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).

O projeto Dragonfly está desenvolvendo um substituto mais rápido para Redis e Memcached

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.

Dentre os recursos disponíveis na primeira versão, destaca-se o suporte ao protocolo RESP2 e 130 comandos Redis, o que corresponde aproximadamente à funcionalidade da versão Redis 2.8. Além disso, o Dragonfly oferece suporte a todos os comandos memcached, exceto CAS (check-and-set), fornece suporte para operações assíncronas para criar instantâneos, fornece consumo de memória previsível, fornece um interpretador Lua 5.4 integrado e suporta tipos de dados complexos, como hashes, conjuntos e listas (ZSET, HSET, LIST, SETS e STRING).

Um modo de cache está disponível separadamente, que substitui automaticamente os dados antigos por novos dados depois que a memória livre se esgota. É possível atribuir um tempo de vida aos dados durante o qual os dados são considerados relevantes. O estado de armazenamento pode ser descarregado no disco em segundo plano para recuperação posterior após a reinicialização. Para gerenciar o sistema, é fornecido um console HTTP (liga-se à porta TCP 6379) e uma API para retorno de métricas, compatível com Prometheus. Em versões futuras, planejamos expandir o suporte para comandos Redis e implementar a capacidade de replicar armazenamento para fornecer tolerância a falhas e balanceamento de carga.

Fonte: opennet.ru

Adicionar um comentário