If you think Twitter has been a bit faster on searches this week, the development team at the company says it’s because of a change from Ruby-on-Rails to a custom Java server called Blender which has completed its move away from Ruby to Java. This move seems to have made less of a stir than the one caused back in 2008 when Twitter moved its message queue from Ruby to Scala, saying Ruby wasn’t reliable enough.
Now the team is sticking the boot into Ruby still further, saying on its engineering blog that the move away from Ruby-on-Rails has produced a 3x drop in search latencies and will enable the team to rapidly build more search features in the coming months.
The blog describes Blender as a Thrift and HTTP service built on Netty, a highly-scalable NIO client server library written in Java that enables the development of a variety of protocol servers and clients quickly and easily, and estimates that using it will give Twitter the capacity to serve ten times the number of requests per machine.
The Twitter story isn’t necessarily an indication of straightforward benefits, as some of the problems seem to have stemmed from the way the system was planned and coded. The Ruby-on-Rails front-end servers ran a fixed number of single-threaded rails worker processes, each of which parsed queries, queried index servers synchronously, and aggregated and rendered results. The synchronous request processing used the CPUs inefficiently, and the amount of Ruby code made it hard to improve the search engine. The replacement Blender system, by contrast, has a fully asynchronous aggregation service and aggregates results from back-end services.
You can read more details of the new system on the Twitter engineering blog.