Java e Netty no front-end do Twitter: revolução em desempenho e escalabilidade
No final de outubro de 2010, o Twitter começou a desenvolver um novo mecanismo de busca em tempo real que traria muitos benefícios, entre eles: melhora de desempenho, redução do tempo de resposta (ou latência), suporte a desenvolvimento de novas funcionalidades de pesquisa, maior disponibilidade e – principalmente – suporte ao crescimento exponencial de usuários do serviço. E na semana passada foi finalizada uma mudança de grande impacto nesta área: a troca dos componentes de "front-end", que recebem as requisições das aplicações no lado do cliente (vindas do Twitter.com, widgets, aplicações móveis etc.). O novo front-end, batizado de Blender e criado em Java, substituirá totalmente a antiga implementação em Ruby on Rails.
A mudança do front-end gerou efeito muito significativo: foi reduzida em três vezes a latência média das buscas. Segundo a equipe do Twitter, na época do Tsunami no Japão e antes da disponibilização do Blender, o alto volume de pesquisas aumentou a latência consideravelmente. Em um momento de pico, pesquisas por #tsunami, por exemplo, chegaram a demorar 800 milissegundos para mostrar resultados. Já com o uso do Blender, o tempo de resposta em condições similares de carga caiu para 250ms.
A arquitetura adotada no Blender resolve algumas ineficiências do modelo anterior. Os novos serviços de agregação de dados são completamente assíncronos e não bloqueantes, o que aumenta consideravelmente a escalabilidade do mecanismo de buscas. Outra característica relevante é a organização dos serviços conforme a categoria de resultados, por exemplo: Top Tweet, Real-time, Geo Index. Também foi projetada uma estrutura de workflow para resolver, de maneira mais eficaz, as dependências e a integração entre os serviços no processamento das buscas. O objetivo dessa camada de workflow é atuar como um proxy (intermediário), resolvendo os dados obtidos pelos serviços de pesquisa de forma transparente para o cliente.
O Blender foi construído sobre o Netty, uma biblioteca NIO (New IO) extremamente escalável e escrita em Java, que foi criada com o objetivo de tornar mais rápidos o desenvolvimento e a manutenção de aplicativos em rede. O Netty foi a alternativa escolhida pelos engenheiros do Twitter, depois de também avaliarem o Mina e o Jetty. Entre os motivos para a escolha do Netty, foram apontados uma API mais limpa, maior documentação e o fato de o Netty já ser usado em outros projetos do Twitter.
Para garantir a disponibilidade do seu serviço de pesquisas, o Twitter continuará por algum tempo usando o front-end antigo em Ruby on Rails e roteando as requisições para o Blender. A próxima etapa será eliminar totalmente o front-end em Rails e conectar os usuários diretamente ao novo front-end.
Inovação
by
Reinaldo Braga
Apache Lucene
by
Fernando Ribeiro
Conteúdo educacional
Mobilidade: Frameworks, SOs e o Mercado
Ricardo Ogliari 23 Mai, 2013
Caminhos de uma estratégia mobile
Sérgio Lopes 23 Mai, 2013
Complexidade organizacional no Século 21
Alexandre Magno 16 Mai, 2013

Olá visitante
Você precisa cadastrar-se no InfoQ Brasil ou Login para enviar comentários. Há muitas vantagens em se cadastrar.Obtenha o máximo da experiência do InfoQ Brasil.
Dê sua opinião