Как мы качаем 60 миллионов страниц в день из Веба: эволюция архитектуры, факапыАрхитектуры, масштабируемость
Архитектор систем распределенной обработки больших объемов данных, высоконагруженных систем. Автор фреймворка для масштабного обхода веба Frontera. Работал 5 лет в Яндексе, в отделе качества поиска. Занимался разработкой социального поиска, вопрос-ответного и улучшением сниппетов. Затем провел 2 года в антивирусе Avast!, построил автоматическое разрешение ложных срабатываний. Интересуется проблемами обработки данных в больших объемах и информационного поиска.
В этом докладе я расскажу о том, как мы построили контент-систему для поисковой машины одного из наших клиентов. Их задачей было обойти 14М доменов, скачать с каждого не более 100 разных страниц в течение месяца и осуществить пере-обход в следующих месяцах. Система должна быть вежливой по отношению к веб-сайтам, не перегружать чрезмерным RPS и уважать robots.txt. При этом расходы на железо и обслуживание системы должны быть минимальными, а производительность высокой: минимум 600 страниц в секунду.
Таким образом, нам нужно было реализовать робота, который может скачать robots.txt, sitemap, распарсить, обнаружить и запланировать не более 100 уникальных ссылок с каждого хоста и сделать это для нескольких тысяч доменов параллельно. При этом нам нужно было учитывать количество запросов, которое мы отправляем каждому хосту в единицу времени, и делать задержки.
Скажу, что получилось сделать систему, которая может масштабироваться во время обхода без необходимости начинать обход сначала. Все это работает под управлением Marathon и управляется через Slack-бота. На текущий момент робот эксплуатируется уже 1,5 года.
Как конкретно мы это сделали, технологический стек, сколько процессов, железа, как выглядит обслуживание и какие грабли мы огребли, я расскажу подробно в докладе.
Наш стек: Apache HBase, Kafka, Mesos/Marathon, Frontera/Scrapy Python frameworks.