Valkey faz 1 ano: como o fork comunitário superou o Redis
(gomomento.com)- A decisão da Redis Inc de fechar o código-fonte (migração para SSPL) abalou a confiança da comunidade, mas a comunidade de desenvolvedores se uniu em torno do fork Valkey, mantendo um ritmo intenso de inovação e contribuições
- O Redis 8.0 voltou a ser open source, e o fundador Antirez retornou para participar de novos recursos e otimizações, mostrando que os dois lados estão evoluindo rapidamente
- Nos benchmarks mais recentes, o Valkey 8.1.1 apresentou, em um ambiente com 8 vCPUs, desempenho de SET 37% superior ao do Redis 8.0, além de latência p99 menor (o desempenho de GET também foi 16% melhor)
- Com técnicas práticas de tuning, como threads de I/O e pinagem de núcleos, o Valkey alcançou mais de 3x de aumento de throughput em ambientes multithread, além de minimizar a latência
- Também foram compartilhados benchmarks mais próximos de ambientes reais de uso e dicas de tuning, com orientações sobre como interpretar os resultados e aplicá-los em produção
O fechamento do código do Redis e o surgimento do Valkey
- Há um ano, a Redis Inc (antiga Garantia Data) deteriorou sua relação de confiança com a comunidade ao alterar sua licença open source (adotando SSPL)
- Como resposta, surgiu o fork aberto Valkey, que se tornou um ativo tecnológico amplamente usado em sistemas distribuídos, cache e processamento de dados em tempo real
- Depois disso, o lado do Redis também tentou recuperar a confiança com o retorno de Antirez (fundador), reforços de desempenho e recursos, e a volta do Redis 8.0 ao modelo open source
Valkey 8.1 vs Redis 8.0: comparação de desempenho
- Benchmark de SET nas mesmas condições: instância AWS c8g.2xl com 8 vCPUs, itens de 1 KB, keyspace de 3 milhões e 500 conexões
- Valkey 8.1.1: 999.8K RPS (p99 0.8ms)
- Redis 8.0: 729.4K RPS (p99 0.99ms)
- O Valkey foi 37% superior em SET e 16% em GET, com p99 30% menor em SET e 60% menor em GET
- Com 6 threads de I/O, o Valkey foi de 239K → 678K RPS (2,8x↑), e o p99 caiu de 1.68ms → 0.93ms (44%↓)
- O Redis também melhorou com threads de I/O: 235K → 563K RPS, p99 de 1.35ms → 0.84ms (40%↓)
O efeito do tuning de multithreading e núcleos
- O efeito das threads de I/O se torna significativo a partir de 3 threads, e o Valkey abre vantagem maior que o Redis a partir de 4 threads
- Ao limitar os núcleos de IRQ (interrupções) a 2 e fixar Redis/Valkey nos 6 núcleos restantes (pinning), há ganho adicional de desempenho
- Valkey: 832K → 999.8K RPS (pinagem de núcleo/IRQ, com uso de CPU em 80%)
- A separação entre núcleos de IRQ e da aplicação minimiza a tail latency e melhora a eficiência de cache
- Também são fornecidos exemplos reais com Docker usando
cpuset-cpus,--io-threadse outros parâmetros
Reprodução do benchmark e dicas práticas
- Uso da instância mais recente AWS Graviton4 (c8g.2xlarge) com cluster placement group
- Desempenho máximo obtido com pinagem de núcleos, separação de IRQ e ajuste do número de conexões (na faixa de 400~500)
- Também é necessário ajustar keyspace e tamanho dos itens; valores menores e keyspaces menores aumentam a taxa de acerto no cache L3
- Recomenda-se o uso ativo de ferramentas de benchmark multithread como valkey-benchmark ou rpc-perf (ferramenta em Rust mais próxima do uso real)
docker run --network="host" --rm --cpuset-cpus="2-7" \ valkey/valkey:8.0.1 valkey-benchmark \ -h 172.31.4.92 -p 6379 -t SET,GET -n 100000000 -c 256 \ -r 3000000 --threads 6 -d 1024
Limites e cuidados na medição de desempenho
-
Os resultados de benchmark podem diferir do ambiente real de produção
- Workloads reais envolvem fatores combinados, como mistura de SET:GET, variação de carga, meta de TPS e latência de rede
- Com aumento brusco no número de conexões, também foram observados atraso de fila, queda de throughput e aumento da tail latency
- Os resultados podem variar bastante conforme a ferramenta/opções de benchmark e a topologia de rede
Principais marcos de crescimento e evolução da comunidade
O projeto Valkey teve um desenvolvimento bastante ativo em diversos aspectos ao longo do último ano
- Em colaboração com muitos desenvolvedores e empresas no GitHub e em outros lugares, houve adição de recursos, correções de bugs e melhorias de segurança
- Também houve investimento em documentação e suporte aos usuários, reduzindo a barreira de entrada para novos usuários
- No processo de governança do projeto, houve ênfase em tomada de decisão transparente e votação da comunidade
Valor técnico e relevância para o setor
O Valkey tem os seguintes pontos fortes
- Pode ser usado por qualquer um sem restrições de licença, o que o torna uma opção atraente para provedores de serviços em nuvem e grandes empresas de serviços web
- Tem alta compatibilidade com o Redis, facilitando a migração
- Como é desenvolvido pela comunidade, consegue refletir diversas necessidades e manter atualizações rápidas e contínuas
Conclusão e implicações
- O Valkey mostrou, em apenas um ano como fork do Redis, resultados que superam o Redis em tecnologia, desempenho e comunidade
- Ferramentas e práticas de tuning como threads de I/O, separação de núcleo/IRQ e ajuste de conexões são fundamentais
- O desempenho não vem automaticamente; a otimização contínua de acordo com sistema, workload e infraestrutura é indispensável
- Em ambientes reais de serviço, é necessária uma abordagem prática: não depender apenas dos números de benchmark, mas testar diretamente diferentes cenários
4 comentários
Embora a Redis tenha tomado muitas decisões ruins, é uma pena ver a situação em que o trabalho duro fica com o urso, mas quem recebe o dinheiro é o adestrador.
Postado no "Redis User Group" do Facebook
É um material que organiza quais melhorias foram feitas no Valkey 8.
https://www.facebook.com/groups/rediskorea/posts/3927030954110001/
Acho que vai ajudar a entender melhor se você ler junto com o conteúdo acima.
Na verdade, não foi tanto que o Valkey tenha feito alguma coisa... foi mais que o outro lado afundou por conta própria...
Comentários do Hacker News
write(2)/read(2)podem ser muito lentas no momento de retorno do event loop, foi introduzida uma estrutura em que apenas o I/O é processado em paralelo por N threads naquele ponto, em estado de zero contention, e depois retorna imediatamente ao modo single-thread. Agradeço à equipe do ValKey por ter evoluído ainda mais esse sistema. Esse sistema já funcionava há muito tempo, e me incomoda a tendência da mídia de exagerar dados que, na prática, não mudaram tanto. Na realidade, esses recursos interessam muito mais a usuários corporativos ou provedores de nuvem, como Amazon e Google, do que à maioria dos usuários comuns do Redis. A menos que seja inevitável lidar com carga enorme ou muitos usuários ao mesmo tempo, na maior parte dos casos o uso de CPU do Redis é baixo, então nem há necessidade real de ativar isso. Recentemente, ao desenvolver o tipo de dado vector set no Redis, estamos adotando threading como padrão e também permitindo gravações de conjuntos vetoriais viaVADDde forma threadizada. Estruturas de dados como HNSW têm, pela primeira vez na história do Redis, tempos constantes gigantescos, então a área de projeto em si muda. No passado, também já havíamos implementado suporte a threads para módulos. Usar threads ou não é uma decisão que depende da situação.