A ciência e a tecnologia de trabalhar com dados são, hoje, um dos principais fatores de sucesso do e-commerce. Com a capacidade de gerar, organizar e ler grandes volumes de dados armazenados em vários servidores e clusters de bancos de dados, as empresas podem melhorar a experiência de usuário dos clientes e criar estratégias de marketing eficazes.
Com este artigo, queremos mostrar a jornada dos engenheiros de software da VTEX para implementar e melhorar um sistema de indexação complexo, com funcionalidades avançadas de mecanismo de pesquisa, em uma única plataforma multi-tenant para centenas de milhões de usuários em escala global.
A experiência de pesquisa do usuário final no e-commerce não é tão direta quanto uma consulta ao banco de dados SQL. Ela deve levar em conta as complexidades das linguagens humanas naturais, comumente propensas a variações e erros – uma inteligência que os sistemas de banco de dados padrão simplesmente não possuem.
Veja o exemplo simples de um computador. Quantas palavras relacionadas um usuário pode digitar para encontrar os resultados desejados? PC, laptop, mac, macbook, notebook. Se você considerar os possíveis erros de digitação, os resultados são incontáveis. O cliente, no entanto, não vê isso como problema dele, e a falha do sistema em consultar dados pode levar a novas tentativas ou, pior ainda, a um aumento da taxa de abandono.
A solução que encontramos para esse problema, no início do desenvolvimento da plataforma VTEX, há onze anos, foi implementar em nossa plataforma o sistema Solr, um mecanismo de indexação e pesquisa para empresas, construído no Apache Lucene. Com o Solr, foi possível indexar os dados relevantes em nossos bancos de dados, integrá-los e manipulá-los em uma interface API REST por meio de solicitações HTTP GET, ao mesmo tempo em que nos beneficiamos de toda a inteligência de dados avançada que ele fornece.
Ao adicionar esse software externo à plataforma de e-commerce da VTEX, os usuários podem contar com uma gama de ferramentas aprimoradas de pesquisa e BI, como:
O sistema Solr é desenvolvido com suporte para indexação distribuída, replicação, consulta com balanceamento de carga e failover e recuperação automatizados. Tornando-o confiável, escalável e tolerante a falhas.
Todos esses recursos, em conjunto com sua resposta rápida, resultaram em um grande aumento no desempenho, tornando os resultados da pesquisa mais rápidos e detalhados.
Apesar de todos esses benefícios, o rápido crescimento da base de usuários da plataforma VTEX levou nossa equipe a um gargalo: enquanto o sistema Solr respondia muito bem à recuperação de dados, não era tão bom na criação e atualização de dados em uma infraestrutura multi-servidor.
Quando o banco de dados cresceu até atingir um volume da ordem de terabytes, as falhas começaram a ocorrer. O problema estava em grande parte nos dois processos de indexação e pesquisa que competem pelos recursos de hardware do servidor (memória, CPU…) simultaneamente, estressando gravemente a infraestrutura.
Para resolver esse problema, depois de estudar a documentação do Solr, analisar nossa complexa estrutura de dados e ler cases de outras empresas, modificamos nosso sistema para que ocorressem atualizações em lotes, evitando assim o problema de processos simultâneos sobrecarregando o servidor. Essa mudança na arquitetura de nosso sistema se mostrou eficaz, permitindo-nos escalar bastante a quantidade de dados indexados de milhares para um volume de bilhões.
Esse método de lidar com problemas definiria o fluxo de trabalho padrão da equipe de engenharia de computação da VTEX na jornada de crescimento da empresa: adoção de uma tecnologia, ajustá-la às necessidades da base de usuários, sobrecarregar o sistema com mais inputs e testar seus limites, desenvolver soluções para bugs e crashes.
Um recurso interessante dos sistemas de indexação, que é bastante útil para o comércio eletrônico, especialmente no contexto de um grande aplicativo multi-tenant, é o campo dinâmico. Os campos dinâmicos tornam possível personalizar os dados além das restrições de um esquema universal básico, permitindo que os usuários adicionem mais campos de acordo com suas necessidades e especificações particulares. Por exemplo, uma loja de sapatos pode querer especificar produtos da mesma categoria em termos de tamanhos, cores, coleções. Já uma loja de computadores, categorizaria seus produtos em termos de especificações de hardware e sistemas operacionais.
No entanto, assim como no caso de gravação de dados, a adição de campos dinâmicos começa a se tornar um problema quando a base de usuários da plataforma aumenta. O sistema Solr define um máximo de campos dinâmicos que podem ser usados em todo o aplicativo. Para piorar a situação, os campos dinâmicos aumentam bastante a complexidade e a variabilidade dos dados no aplicativo.
Nossa solução aparentemente simples, mas bastante eficaz para esse problema foi criar índices específicos para campos dinâmicos.
Ao remover estruturas de dados complexas do índice global, conseguimos criar novas instâncias de indexação somente quando necessário e diminuir o impacto da variabilidade.
O rápido crescimento de dados pode ser um verdadeiro desafio para a infraestrutura. Isso é algo que experimentamos em primeira mão. Se em determinado momento a empresa estava crescendo a uma taxa de 50% ao ano, o volume de dados aumentava a uma taxa ainda maior.
Quando nosso número total de usuários era de cerca de 30 milhões, de repente um novo cliente começava a usar a plataforma, trazendo com ele cerca de 150 milhões de usuários.
Não surpreende que esse evento tenha causado um estresse sem precedentes no sistema, além de crashes e períodos de inatividade dos quais levávamos mais de três horas para nos recuperar.
Mas um aspecto fundamental do processo de desenvolvimento na VTEX é a independência e autonomia dos funcionários para tomar decisões e definir os próximos passos. O que importa para nós não é quem propõe a ideia, mas sua eficácia para resolver o problema em questão. Em outras palavras, todo membro da equipe de engenharia de software tem o poder de contribuir decisivamente para o projeto, independentemente de seu cargo.
Quando surgiu esse desafio que não pôde ser resolvido com nossos métodos padrão, uma mudança radical foi proposta pelo então desenvolvedor back-end Ygor Santos. Ao mesmo tempo em que trabalhava em melhorias e soluções para bugs no sistema Solr, Ygor estudou uma nova tecnologia, Elasticsearch, baseada na mesma biblioteca que o sistema em uso, mas mais robusta e criada para suportar cargas maciças de dados, como as que a empresa estava enfrentando. Depois de adaptar os modelos usados no Solr à nova tecnologia e testá-la, o Elasticsearch se mostrou capaz de lidar com grandes volumes de dados e de ser especialmente adequado à escalabilidade.
Por seu engajamento e aprendizado, Ygor Santos evoluiu dentro da VTEX e se tornou uma das referências no assunto. O desenvolvedor também lidera um dos times que têm como responsabilidade tratar o maior volume de dados que chega à plataforma, tratando a indexação dos dados para que o cliente possa realizar consultas simples ou cálculos com agregações.
Os índices no Elasticsearch são distribuídos e divididos em shards (uma unidade de particionamento do Lucene, também usada no Solr) que pode ser replicada. Os nós são responsáveis por armazenar shards e o sistema gerencia operações de dados nessa estrutura, com mecanismos de segurança para proteger a criação de índices, recuperar shards primários usando IDs de alocação, proteger contra sobrecarga e evitar crashes. Alguns dos principais recursos do sistema incluem:
Os recursos de documentação do Elasticsearch explicam sua grande resiliência:
“Um nó mestre no Elasticsearch monitora continuamente os nós do cluster e remove qualquer nó do cluster que não responde a seus pings em tempo hábil. Se o mestre tiver poucos nós, ele renunciará e uma nova eleição de mestre começará.”
Cada um desses sistemas é adequado a um determinado tipo de arquivo. O Elasticsearch é uma ferramenta mais moderna que o Solr, por isso, mais fácil de se trabalhar. Nos testes de performance, essa ferramenta se mostrou mais eficiente, com melhor tempo de indexação e mais recursos nas consultas.
As diferenças que podem impactar bastante os negócios, entretanto, são aquelas relativas à orientação e arquitetura do software. Nesse sentido, o Solr é especialista em operações linguísticas e interpretação de textos, enquanto o Elasticsearch é especializado em análise de dados, com ótimos recursos para agrupamento e consulta.
Uma pergunta que costuma ser feita quando se trata de comparar softwares é em relação ao desempenho. Nossos testes revelaram que o Elasticsearch não apenas possui uma infraestrutura melhor para um grande aplicativo distribuído, mas também tem um desempenho melhor na indexação, tornando-o a melhor opção de escalabilidade na nuvem e em ambientes distribuídos.
Isso não significa que o Solr não tenha suas vantagens. Como um sistema mais antigo, o Solr possui uma documentação muito detalhada e completa, muitos recursos de código aberto disponíveis e uma comunidade ativa de usuários, o que torna sua implementação segura e versátil.
Usamos um software de indexação específico por onze anos e, durante esse período, tivemos que alterar e ajustar suas configurações e nossa própria arquitetura de sistemas – algumas vezes para criar novos recursos e melhorar a experiência do usuário em nossa plataforma, outras para corrigir bugs e crashes causados pela sobrecarga maciça de dados que costumam ocorrer em uma empresa em rápido crescimento. Depois de uma crise que parecia impossível de ser resolvida com os métodos que possuíamos, descobrimos que a melhor maneira não era ajustar nosso sistema, mas fazer a transição para um sistema novo e melhor.
Então, nessa jornada para desenvolver o sistema de indexação da VTEX, o que aprendemos?
Aprendemos que nem todos os problemas podem ser resolvidos pelo mesmo método. Melhorar uma ferramenta é a melhor maneira de trabalhar com ela, mas outras vezes é necessário algo mais aprimorado para tarefas maiores. Aprendemos o verdadeiro impacto da inovação. E, acima de tudo, aprendemos que, com sistemas de dados, não há limite para o que podemos fazer. Desde que apliquemos inteligência e a construamos corretamente.
Se você gostou dessa história e deseja fazer parte do próximo capítulo dela, venha fazer parte da equipe de desenvolvimento da VTEX.
Acreditamos no poder do talento e estamos contratando.