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.