BT

Java e Netty no front-end do Twitter: revolução em desempenho e escalabilidade

por Eder Magalhães em 08 Abr 2011 |

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.

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

Inovação by Reinaldo Braga

É muito legal ver cada vez mais as empresas se adaptando e utilizando a diversidade de tecnologias para resolver seus problemas, sem modismos ou radicalismos insensatos.

Apache Lucene by Fernando Ribeiro

O back-end continua sendo a versão modificada do Apache Lucene apresentada na conferência Lucene Revolution 2010.

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

2 Dê sua opinião

Conteúdo educacional

Feedback geral
Bugs
Publicidade
Editorial
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2014 C4Media Inc.
Política de privacidade
BT