O documento discute o desenvolvimento de um sistema de recomendação baseado em grafos no Cassandra. Inicialmente, foi implementado como uma prova de conceito usando Titan com Gremlin para modelar as relações entre clientes e produtos. Após testes, a solução foi movida para produção com melhorias como coleta de eventos diretamente no navegador e cálculo de recomendações fora do grafo. Posteriormente, o sistema foi dividido em microserviços para coleta e recomendação, melhorando a escalabilidade e desempenho.
12. Porque um grafo?
• Modelagem do schema intuitiva
• Abstração entre relação Cliente <> Produto
• Fácil de iterar por entidades e suas relações utilizando
Gremlin DSL
• Maneiras simples de calcular comportamentos comuns
• Sem cálculos complexos de matrizes
• Cassandra + Titan + Rexster + Python
21. Resultados
• Rodando em AB teste com a solução da época usando
recomendações wvav
30% aumento em vendas
22. Limitações
• Camada de python desnecessária
• Essa camada aumentava o tempo de resposta
significativamente
• Recomendações calculadas diretamente no grafo
• Custo computacional alto ao fazer muitos traversals
• Supernodes
• Dificuldade de adicionar tags e atributos sem
aumentar significativamente o tamanho do grafo
• Eventos coletados em comunicação server <> server
24. Produção
• Sem uso de proxies. Acesso direto ao grafo (com Java)
• Implementação do pixel no browser para coletar
informações diretamente
• Desenvolvimento do nosso sistema de analytics próprio
• Recomendações calculadas fora do grafo
25. Produção
• Sem uso de proxies. Acesso direto ao grafo (com Java)
• Implementação do pixel no browser para coletar
informações diretamente
• Desenvolvimento do nosso sistema de analytics próprio
• Recomendações calculadas fora do grafo
26. Produção
• Sem uso de proxies. Acesso direto ao grafo (com Java)
• Implementação do pixel no browser para coletar
informações diretamente
• Desenvolvimento do nosso sistema de analytics próprio
• Recomendações calculadas fora do grafo
28. • Tempo de resposta reduzido pela metade
• Load no cassandra reduzido, permitindo
• Recomendações centradas no usuário
• Emails e push notifications
Resultados
25% participação em emails
23.8% de recomendações como push
29. Problemas
• Muitas responsabilidades no nosso módulo de API
• Dificuldade de manutenção de código
• Problema acessando o disco muitas vezes para as
recomendações centradas no usuário
• Email e push notifications
API Fora nos momentos importantes
32. Microserviços
• Separando obrigações: Coleta de eventos e serviço de
recomendações
• Isolando comportamentos: Podemos servir
recomendações, mesmo não coletando eventos
• Código mais simples e menor, refatorações não
afetam o sistema como um todo e deploys não geram
grandes mudanças
• Maior velocidade em adicionar funcionalidades e
testar novos algoritmos
• Melhor profiling da aplicação
33. Microseriços
• Movendo recomendações do Cassandra para o
Elasticsearch
• Recomendações pré-calculadas sendo salvas no
elasticsearch, sendo fácil de reconstruir e realizar
buscas
• Tempo de resposta para recomendações
personalizadas caiu de 400ms para 50ms (importante
para conversão e evasão do cliente)
• Menos traversals no grafo e menor impacto no load
médio do sistema
34. Impacto de negócio
De 6% para 25% share de vendas
35% share em vendas de email
31.6% de recomendações como push