Мы уже писали о как организована работа поиска писем в Яндекс.
Почте .
С тех пор многое изменилось и улучшилось, поэтому мы решили поделиться своим опытом и рассказать вам об этих изменениях.
В день на почту приходит около 100 млн писем, 10 млн из которых содержат вложения.
Несмотря на то, что только 10% писем содержат вложения, среди писем с вложениями значительную долю составляют те, которые содержат более одного файла.
В среднем получается, что общее количество писем равно общему количеству вложений к ним.
Средний размер письма с вложением — 400 Кб, письма без вложения — 4 Кб.
Общий размер вложений в одном письме может достигать 30 МБ.
ТОП-10 типов вложений: .
jpg, .
pdf, .
xls, .
rar, .
doc, .
zip, .
eml, .
mp3, .
tif, .
docx. Почти все форматы файлов, кроме текстовых, содержат значительное количество избыточной служебной информации.
Так, например: формат .
docx содержит в среднем только 10% текстовой информации, а из jpg мы получаем только 0,25% метаинформации для индексации в поиске.
Это дает общий объем входящего трафика около 25 ТБ в сутки, что существенно увеличивается для обеспечения функционирования большого и сложного Почтового продукта.
Для обслуживания такой нагрузки в Яндекс.
Почте создана крупная сетевая, серверная и сервисная инфраструктура, включающая несколько кластеров, распределенных по разным дата-центрам.
Все входящие письма попадают в систему доставки — кластер, состоящий из сотен серверов.
Система доставки пытается сохранять письма в хранилище метаинформации о письмах и отправлять их на поиск — то есть сразу в три разных места, каждое из которых выполняет свои задачи.
Хранение писем отвечает за хранение и доставку по запросу всего содержимого каждого письма и почему-то исторически назывался mulca. Для хранения писем в Яндекс.
Почте развернуто 700 почтовых серверов.
Здесь хранится содержимое писем, заголовки, вложения – словом, все, что относится к письму.
Репозиторий метаинформации служит для быстрого отображения почтового ящика и содержит только описательную часть письма.
Например, поля «От», «Кому», «Тема», название папки, в которой в данный момент находится письмо, его текущая метка, дата написания и т.д. Метаинформационный кластер занимает 60 серверов.
Поиск репозитория — поисковый индекс, содержащий всю информацию из письма, необходимую для обеспечения быстрого полнотекстового поиска почтового ящика с учетом морфологии.
Сто сорок серверов одновременно обслуживают поисковые службы, выполняя задачи индексации и поиска.
Письмо считается доставленным, если оно включено в хранилище писем и хранилище метаинформации.
Письма доставляются в розыск после помещения их на хранение.
Для доставки писем в поиск выделен отдельный кластер Служб, состоящий из двадцати пяти серверов.
Этот кластер содержит очереди писем, ожидающих индексации, и программы, готовящие данные к индексации.
Таким образом, письма, попадая на почту, проходят долгий путь.
Сначала они хранятся в хранилище, затем попадают в кластер «Сервисы» и там готовятся к отправке на поиск.
Но поиск по буквам - это не только поиск по телу письма , но и поиск по содержимому вложений.
Для этого файлы, отправленные в виде вложений, необходимо предварительно обработать, извлечь текст и отправить на поиск в текстовом виде.
Несколько лет назад, не меняя упомянутую выше исходную архитектуру, мы запустили поиск по содержимому вложений.
Это привело к ряду проблем.
Во-первых, некоторые типы файлов (особенно .
pdf) долго обрабатывались - до нескольких минут - и задерживали доставку новых писем в поиск.
Во-вторых, существовала постоянная конкуренция за ресурсы между программой индексирования и программой конвертации на кластере «Сервисы», что также замедляло попадание новых букв в поиск.
И в-третьих, когда мы начали отправлять всё письмо с вложениями в кластер «Сервисы», мы фактически удвоили почтовый трафик внутри сетей Яндекса.
Внутрисетевой трафик увеличился на 25 ТБ в сутки, а это нагрузка на полезные для персональных сервисов и для Яндекса ресурсы: серверы, сетевую инфраструктуру и общую производительность сети.
Итак, нам пришлось бороться за качество обслуживания.
Допустить, чтобы письма пришли в розыск спустя несколько минут, было невозможно.
Более того, до запуска поиска вложений 95% всех входящих писем попадали в поиск менее чем за секунду.
Возникла идея доставлять целые письма только в репозиторий, а на поиск отправлять только структурированный текст непосредственно из репозиториев.
Предварительные исследования показали, что средний размер текста, необходимого для поиска, в 10 раз меньше среднего размера письма на почте.
Следовательно, если в поиск попадает только текст, то сетевой трафик, потребляемый поиском, будет в 10 раз меньше, что позволит сэкономить примерно 22 ТБ в день.
Похоже, только ради экономии трафика игра стоит свеч.
Также было заманчиво использовать производительность хранилища, которая была на два порядка выше, чем у небольшого кластера служб для предварительной обработки файлов для поиска.
Это позволит нам ускориться.
Так они и сделали.
Для того, чтобы озвученная идея была реализована, и мы могли получать содержимое писем и вложений напрямую из репозитория, необходимо было разместить на его серверах программу для извлечения содержимого вложений.
Эта программа основана на Библиотека Apache Тика , поэтому для простоты и созвучия с русским языком разработчик назвал его Тикайте.
При размещении Тикайте на мулке важно было не навредить хранилищам писем, поэтому мы детально изучили нагрузку и увидели, что хранилища загружены на дисковое пространство и имеют достаточный свободный ресурс производительности ЦП, который можно использовать.
Мы поместили в репозиторий программу для извлечения текста из разных форматов со строгими ограничениями: программе было отдано 50% производительности процессора и выделено по 1 ГБ оперативной памяти на каждом из серверов.
Такие ограничения позволили нам запустить процесс конвертации в хранилище и не вмешиваться в процесс хранения.
В результате мы сократили ложный интранет-трафик и увеличили производительность системы доставки писем в поиск на два порядка — опять же, 95% писем стали попадать в поиск в течение секунды.
За изменение мы получили дополнительный бонус в виде 25 бесплатных кластерных серверов для доставки писем в поиск.
Если изначально мы планировали увеличить кластер «Службы» в 2 раза и получить здесь 50 серверов, чтобы справиться с постоянно растущим потоком, то теперь, когда все необходимые для поиска данные подготавливаются непосредственно в хранилище писем, у нас фактически имеется целый кластер из 25 серверы бесплатно.
Так что в ближайшем будущем мы сможем использовать его и для других задач, о которых обязательно вам расскажем.
P.S. Также поиск по почте периодически требует переиндексации всех писем, накопленных за все время существования Яндекс.
Почты.
Такое случается, когда необходимо изменить алгоритм поиска, а данных в поиске для этого недостаточно.
В это время мы фактически обрабатываем весь массив писем, хранящийся в почте, который сейчас составляет примерно 10 петабайт. И именно здесь вы получаете колоссальную экономию сетевого трафика и производительности.
П.
П.
С.
Несмотря на полученные результаты, мы не планируем останавливаться на достигнутом.
Мы будем стремиться доставлять письма в поиск одновременно с сохранением их в хранилище, и для этого воспользуемся освободившимся кластером.
Информацию об этом ждите в новых публикациях о поиске в Яндекс.
Почте.
Теги: #Высокая производительность #Яндекс #Поисковые технологии #Яндекс.
почта #tikaite #tika
-
Метеостанция Гром-2М (Анемометр)
19 Oct, 24 -
Анонимность В Современном Мегаполисе
19 Oct, 24 -
Визитная Карточка Vcard В 2D-Кодах Nokia
19 Oct, 24 -
Google Показала Прототип Своего Телефона
19 Oct, 24 -
Что, Если Завтра Будет Война?
19 Oct, 24 -
Smarty Обновлен До Версии 2.6.22.
19 Oct, 24