Twitter теперь завершил свой переход от Ruby к Java, начатый еще в 2008 году, когда он переместил очередь сообщений в Scala. На этой неделе он отказался от Ruby-on-Rails и принял пользовательский Java-сервер под названием Blender.
Если вы думаете, что Twitter был немного быстрее в поиске на этой неделе, команда разработчиков в компании говорит, что это связано с переходом с Ruby-on-Rails на пользовательский Java-сервер под названием Blender, который завершил свой переход с Ruby на Java. Этот шаг, похоже, произвел меньше шума, чем тот, который был вызван в 2008 году, когда Twitter переместил свою очередь сообщений из Ruby в Scala, заявив, что Ruby недостаточно надежен.
Теперь команда еще больше углубилась в Ruby, заявив в своем инженерном блоге, что переход от Ruby-on-Rails привел к 3-кратному снижению задержек поиска и позволит команде быстро создать больше функций поиска в ближайшие месяцы.
В блоге Blender описывается как бережливый и HTTP-сервис, построенный на Netty, высоко масштабируемой клиент-серверной библиотеке NIO, написанной на Java, которая позволяет быстро и легко разрабатывать различные серверы протоколов и клиенты, и оценивает, что использование ее даст Twitter возможность обслуживать в десять раз больше запросов на машину.
История с Твиттером не обязательно указывает на очевидные преимущества, поскольку некоторые проблемы, по-видимому, возникли из-за того, как система была спланирована и закодирована. Интерфейсные серверы Ruby-on-Rails запускали фиксированное количество однопоточных рабочих процессов rails, каждый из которых анализировал запросы, синхронно запрашивал серверы индексов, а также агрегировал и отображал результаты. Синхронная обработка запросов неэффективно использовала процессоры, а объем кода Ruby затруднял улучшение поисковой системы. Система замещающего блендера, напротив, имеет полностью асинхронную службу агрегирования и агрегирует результаты из внутренних служб.
Более подробную информацию о новой системе вы можете прочитать в инженерном блоге Twitter.