- O Redis é uma das tecnologias com melhor reputação na indústria de tecnologia
- É uma tecnologia excelente, muito bem projetada, e não há nada de errado com ela em si, mas talvez nem sempre seja necessário
- Ao longo de mais de 10 anos, em 3 empresas, vi o mesmo padrão:
- Surgia um problema e o Redis parecia adequado, mas na prática ele não melhorava a situação nem resolvia o problema de raiz
- Era apenas complexidade pela complexidade
Primeiro caso: experiência na Tantan
- A Tantan é o segundo maior aplicativo de namoro da China e opera de 50 a 100 servidores de banco de dados de alto desempenho baseados em PostgreSQL
- Cada servidor é fragmentado por ID de usuário, de modo que os dados de um usuário específico ficam armazenados em apenas um servidor
- Situação do problema
- Surgiu a necessidade de armazenar a contagem de
swipes e atualizá-la rapidamente
- No início, avaliou-se que armazenar isso no Redis seria o mais apropriado
- A equipe configurou tudo pensando que algumas poucas instâncias de Redis de alto desempenho seriam suficientes
- Reavaliação e solução
- A equipe discutiu uma alternativa: gravar diretamente no PostgreSQL em vez de usar Redis
- Como a carga nos servidores PostgreSQL já era alta, previa-se que a carga adicional seria insignificante
- Mesmo após armazenar no PostgreSQL, não houve queda de desempenho, e a adoção do Redis se mostrou desnecessária
Segundo caso: experiência na Bannerflow
- Contexto
- A Bannerflow é uma plataforma de criação e publicação de anúncios
- Em um novo microsserviço, decidiu-se adotar Redis para dar suporte à publicação de anúncios em redes sociais como o Facebook
- Situação do problema
- Como a carga era muito menor do que na Tantan, não estava claro se a adoção do Redis era realmente necessária
- Depois que o desenvolvedor inicial saiu, não havia mais ninguém capaz de explicar claramente por que o Redis havia sido adotado
- Resultado
- Como a carga era baixa, o Redis não era realmente necessário
- Chegou-se à conclusão de que, no longo prazo, o melhor seria remover o Redis
Terceiro caso: experiência na MAJORITY
- Contexto
- A MAJORITY é uma empresa de fintech que adotou Redis para armazenar em cache os resultados de chamadas a APIs externas
- O Redis foi introduzido para armazenar em cache dados de consulta de localização, acelerando o processamento e reduzindo custos
- Situação do problema
- Os mesmos dados também eram armazenados no banco de dados (Azure SQL)
- Previa-se que, mesmo substituindo as chamadas ao Redis por chamadas ao banco, quase não haveria aumento de carga
- Pensou-se em manter o Redis por causa da necessidade de tratamento de lock, mas o Azure SQL era plenamente capaz de lidar com isso
- Resultado
- Chegou-se à conclusão de que a adoção do Redis era desnecessária
- Foi definido um plano de migração para usar Azure SQL em vez de Redis
Conclusão
- Os três casos ocorreram em domínios, stacks técnicos e condições de carga diferentes
- O ponto em comum foi a adoção desnecessária de Redis
- Antes de adotar Redis, é preciso considerar com cuidado a necessidade real e os ganhos de desempenho
- Recomendação da palestra 'Choose Boring Technology', de Dan McKinley
5 comentários
Independentemente de você usar Redis ou não, inserir uma camada de cache entre o domínio e a persistência (com implementação padrão em bypass) não é overengineering de forma alguma. Logging, dados falsos, depuração, profiling, talvez cache de verdade…
+1 Eu também concordo. Só de adicionar uma camada já se cria uma
margem, abrindo espaço para resolver inúmeras coisas.Parece menos uma questão de haver algum problema com o Redis e mais uma visão de que, se só o banco de dados já é suficiente, por que introduzir um componente extra e aumentar a carga de manutenção.
Como a explicação é um pouco resumida, acho que vale receber isso mais como um ponto de vista que também merece ser considerado.
Também há situações em que adotar um cache com Redis, mantendo a lógica da aplicação simples, pode ser a melhor escolha,
então é preciso decidir de acordo com o contexto.
Caí no título. rsrs Concordo~~
Comentários do Hacker News
Em 2015, enquanto trabalhava na Uber, houve uma tentativa de mudar a divisão geográfica baseada em CEP para um modelo baseado em hexágonos
Houve debate sobre o uso excessivo de Redis
A cultura de uso do Redis não evoluiu tanto quanto sua popularidade
A questão não é Redis versus não Redis, mas trabalhar com dados que não serializam bem
O desenvolvimento de software frequentemente tende a repetir a forma como outras pessoas fazem as coisas
Redis é o único "servidor de estruturas de dados" realmente pronto para produção
Talvez você nem precise de cache
A API do Redis é excelente, mas há riscos operacionais
É surpreendente a tendência de não recomendar o uso de Redis
Redis serve bem como cache temporário, mas deixa a desejar para transações ou armazenamento distribuído