Twitter индексирует каждый твит


Twitter создает индекс каждого публичного твита, когда-либо сделанного, чтобы сделать возможным поиск без ограничений по возрасту твита. Это достигается с помощью Apache Mesos, диспетчера кластеров с открытым исходным кодом, который обеспечивает эффективную изоляцию и совместное использование ресурсов в распределенных приложениях или фреймворках.

Twitter Logo
Twitter

До сих пор результаты поиска ограничивались твитами примерно за последнюю неделю, потому что поисковая система полагалась на просмотр твитов, хранящихся в оперативной памяти сервера. Twitter объявил в сообщении И Чжуана в своем блоге Engineering, что работа по индексированию всех твитов с 2006 года завершена, и запланирована работа над более ранними твитами, которые будут добавлены. Служба поиска индексирует полтриллиона документов и обслуживает запросы со средней задержкой менее 100 мс.

Исходный код и тесты были разделены между существующим недельным индексом и новым индексом, где это возможно. Цифры масштабируемости достаточны, чтобы сбить менеджеров по обработке данных кошмар. Полный индекс более чем в 100 раз превышает индекс в реальном времени и растет на несколько миллиардов твитов в неделю. Разработчики говорят, что при таком масштабе разделения неизбежны, но интерфейс скрывает лежащие в основе разделы, так что внутренние клиенты могут рассматривать кластер как единую конечную точку.

Система состоит из четырех основных частей: конвейера пакетной агрегации данных и предварительной обработки; построитель инвертированного индекса; Осколки Earlybird; и корни Earlybird.

Конвейер приема для индекса Twitter в реальном времени обрабатывает отдельные твиты по одному, но полный индекс использует конвейер пакетной обработки, где каждый пакет — это день твитов. Чтобы повторно использовать код, разработчики упаковали соответствующие разделы кода реального времени в пользовательские функции Pig, чтобы их можно было повторно использовать в заданиях Pig. Команда также создала конвейер заданий Hadoop для агрегирования данных и предварительной обработки твитов в Hadoop. Конвейер запускается для одного конкретного дня твитов, что означает, что его можно массово распараллелить в Hadoop.

Инвертированный индекс создается путем получения ежедневных выходных данных по одной записи на твит и прогона его через однопоточные построители инвертированных индексов без сохранения состояния, которые работают в Mesos. Построитель инвертированного индекса состоит из разделителя сегментов, который группирует несколько пакетов предварительно обработанных данных ежедневных твитов из одного раздела в пакеты, и индексатора сегментов, который инвертирует каждый твит в сегменте, строит инвертированный индекс и сохраняет инвертированный индекс в HDFS.

Построители инвертированных индексов являются однопоточными, без сохранения состояния и массово распараллеливаются в Mesos — разработчики говорят, что в некоторых случаях они запустили более тысячи параллельных построителей. Команда восстановила инвертированные индексы почти для полтриллиона твитов всего за два дня, и их узким местом на самом деле является именной узел Hadoop — немногие вакансии могут утверждать это!

Создатели инвертированного индекса создали сотни сегментов инвертированного индекса, которые затем были распределены. Необходимо было ввести сегментирование, поскольку каждая машина могла обслуживать только небольшую часть полного корпуса твитов. Поскольку кластеры индексов должны были расти непрерывно, сегментированием нельзя было управлять с помощью простого хеш-разделения. Вместо этого команда создала двумерную схему сегментирования для распределения сегментов индекса по серверам. Исторические твиты разделены на временные уровни; данные в них разделяются на разделы на основе хэш-функции; затем хеш-разделы делятся на блоки, называемые сегментами, и группируются вместе в зависимости от того, сколько их может поместиться на каждой машине. Затем серверы реплицируются для увеличения производительности и отказоустойчивости. Двухуровневое сегментирование означает, что Twitter может увеличить объем данных, добавляя временные уровни, оставляя существующие временные уровни неизменными.

Поскольку оперативная память была бы слишком дорогой для хранения, команда использует твердотельные накопители, но они на порядки медленнее, чем оперативная память, поэтому некоторые из наиболее интересных работ были в таких областях, как настройка параметров ядра для оптимизации производительности SSD, упаковка нескольких полей DocValues. вместе, чтобы уменьшить произвольный доступ SSD, загружая часто используемые поля непосредственно в процессе и многое другое. Однако подробности этих оптимизаций пока не обнародованы.

Конечным результатом всей работы является то, что полные результаты из полного индекса будут отображаться на вкладке «Все» результатов поиска в веб-клиенте Twitter, а также для приложений Twitter для iOS и Twitter для Android. Со временем вы будете видеть больше твитов из этого индекса, появляющихся на вкладке «Лучшие» результатов поиска и в новых продуктах, основанных на этом индексе.

В сообщении блога говорится, что впереди еще более интересная работа, такая как оптимизация для интеллектуального кэширования. Если этот проект кажется вам интересным, Twitter может вам помочь.


Добавить комментарий