7 October 2010

Twitter: 1 млрд запросов в сутки и новый поисковик

Search engines
На данный момент нагрузка на серверы Twitter выросла до 1000 TPS (твитов в секунду) и 12000 QPS (запросов в секунду) — более 1 млрд запросов в сутки. Текущая инфраструктура ещё выдерживает, но чтобы создать запас на несколько лет вперёд, компания приняла решение обновить бэкенд для поисковой системы. «Если мы сработали хорошо, то вы не должны были ничего заметить за последние недели», — сообщается в блоге разработчиков Twitter.

До недавнего времени поисковый бэкенд Twitter был основан на старой SQL-системе от компании Summize. Её купили в июле 2008 года как раз для этих целей, а также взяли пять из шести разработчиков. Необходимость апгрейда Twitter стала понятна сразу после презентации iPhone 3G, тогда и началось сотрудничество с Summize. Но сейчас пришло время снова обновляться.

Примерно шесть месяцев назад было принято решение разработать новую, современную поисковую архитектуру, основанную на эффективном инвертированном индексе вместо реляционной базы данных. Поскольку Twitter любит open source, то в качестве начальной точки решения выбрали поисковую библиотеку Apache Lucene, написанную на Java.

Требования к новому поисковику заключались в хорошей масштабируемости и максимальной скорости индексации. Была поставлена задача, что с момента публикации твита до возможности полнотекстового поиска по нему должно проходить не более 10 секунд. Поскольку индексатор — только часть всего конвейера на этом пути, то он должен был работать максимально быстро (менее 1 секунды).

Чтобы добиться поставленных целей, пришлось немного переделать Lucene, потому что она не очень подходит для поисковика в реальном времени. Были переписаны основные структуры данных в памяти, особенно пост-листы, но в то же время сохранена поддержка стандартного Lucene API, так что почти не пришлось переделывать поисковую часть библиотеки. Вот ключевые бенефиты, полученные в результате модификации:

* значительно улучшенная производительность сбора мусора (garbage collection)
* структуры данных и алгоритмы неблокирующей синхронизации (lock-free)
* пост-листы, которые можно проходить в обратном порядке
* эффективная терминация запросов на ранней стадии

По мнению самих разработчиков, некоторые из применённых методов могут быть интересны и полезны другим программистам (не только в области поиска), так что в будущем возможно более подробное обсуждение темы.

Так или иначе, но все сделанные модификации в Lucene будут высланы в Apache, а некоторые уже сейчас включены в основной код Lucene и её новую ветку для поиска в реальном времени.

В результате апгрейда поисковой инфраструктуры была значительно уменьшена нагрузка на бэкенд (теперь она составляет всего 5% ресурсов), так что есть хороший резерв на будущее. Новый индексатор может индексировать примерно в 50 раз больше твитов в секунду, чем публикуется сегодня. И новый поисковик работает абсолютно стабильно, без каких-либо нареканий.

Одним из неприятных моментов поисковика Twitter всегда была невозможность искать в архиве твитов более чем на несколько дней. Они объясняли это «нехваткой места». Чтобы обойти данный лимит, приходится пользоваться поисковыми системами сторонней разработки, которые самостоятельно индексируют твиты, например, Topsy.

Дэнни Салливан 14 января 2010 года проверял поисковые результаты со словом [today] и обнаружил самый старый твит, опубликованный 7 дней назад.

Аналогичный тест в середине сентября показал, что глубина индекса сократилась до 4 дней.

С введением нового поиска объявлено об «увеличении индекса в два раза без каких-то последствий по скорости поисковых запросов». Судя по всему, речь идёт о возвращении к тому же семидневному лимиту.
Tags:TwitterSummizeLuceneинвертированный индекспост-листинвертированный файл
Hubs: Search engines
+39
1k 11
Comments 17
Профессия Product Manager
December 2, 2020108,500 ₽Нетология
Python для анализа данных
December 2, 202019,000 ₽SkillFactory
Профессия Project Manager
December 2, 202098,000 ₽Нетология
Профессия Data Scientist
December 2, 2020135,000 ₽SkillFactory
Разработка приложений на Kotlin
December 2, 202020,900 ₽Нетология