SlideShare a Scribd company logo
Frontera: распределенный робот для
обхода интернета в больших объемах
Александр Сибиряков, 18 сентября 2015
sibiryakov@scrapinghub.com
• Родился в Екатеринбурге, РФ
• 5 лет в Яндексе, отдел
качества поиска: социальный
и вопросно-ответный поиск,
сниппеты.
• 2 года в антивирусе Avast!,
исследовательский отдел:
автоматическое разрешение
ложных срабатываний,
предсказывание зловредных
скачиваний.
Здравствуйте, участники!
2
Задача
• Обойти испанский интернет, для
сбора статистики о узлах, их
числе и размерах.
• Ограничиться зоной .es.
• Широкий обход (Breadth-first): в
первую очередь страницы на
расстоянии 1-го перехода, затем
2-х и т.д.
• Условие остановки: отсутствие
узлов с менее, чем 100
скачанными страницами.
• Минимальные финансовые
затраты.
3
Испанский интернет (.es) в 2012
• Доменных имен зарегистрировано - 1,56М (39%
годовой прирост)
• Веб-серверов в зоне - 283,4K (33,1%)
• Хостов - 4,2M (21%)
• Испанских сайтов в каталоге DMOZ - 22043

* - отчет OECD Communications Outlook 2013
4
Решение
• Scrapy* - для сетевых операций.
• Apache Kafka - шина данных (смещения, разделы).
• Apache HBase - хранилище (случайный доступ, линейное
сканирование, масштабируемость).
• Twisted.Internet - библиотека с асинхронными примитивами
для воркеров.
• Snappy - алгоритм компрессии для IO задач.
* - сетевые операции внутри Scrapy реализованы асинхронно,
также на основе Twisted.Internet
5
Архитектура
Kafka топик
SW
DB
Воркеры стратегии обхода
Воркеры хранилища
6
1. Проблема больших и
малых хостов
• При обнаружении большого
числа ссылок с хоста, и
использовании простых
моделей приоритизации
часто происходит заполнение
порции URL-ами с одного
хоста.
• Мы внедрили
дополнительную по-
хостовую (опционально
по-IP) очередь, и
дозирующий алгоритм:
URL-ы c больших хостов
кэшируются в памяти.
7
3. DDoS DNS службы
Amazon AWS
• Breadth-first стратегия
предполагает перво-
очередной обход с ранее
неизвестных хостов,
генерируя тем самым
огромное число DNS
запросов.
• Рекурсивный DNS сервер на
каждом качающем хосте, с
upstream на Verizon и
OpenDNS.
• Мы использовали
dnsmasq.
8
4. Настройка thread pool’а в Scrapy
для разрешения по имени хоста
• В Scrapy для получения IP
адреса используется thread pool.
• Если ip адреса нет в кэше,
отправляется запрос на DNS
сервер в отдельном треде,
который блокируется.
• Scrapy выдавал многочисленные
ошибки связанные с таймаутом
разрешения DNS имени.
• Добавили в Scrapy
возможность настраивать
размер thread pool’a и
таймауты.
9
5. Перегружены регион-серверы
HBase при проверке состояний
• Когда робот делает обход, из каждой
страницы извлекается несколько сотен
ссылок.
• Эти ссылки перед тем, как добавить в
приоритетную очередь нужно проверить
на их наличие там (чтобы избежать
повторного скачивания).
• На малых объемах SSD диски
справлялись, после увеличения таблиц и
переезда на HDD время исполнения
запросов существенно увеличилось.
• Хост-локальная хэш функция для
генерации ключей в HBase.
• Настройка HBase block cache, так
чтобы один блок вмещал средний
хост целиком.
10
6. Интенсивный трафик от
воркеров к сервисам
• Скорость потока при
коммуникации с Kafka и
HBase доходила 1Gbit/s.
• В HBase перешли на
компактный протокол
Thrift.
• В Kafka начали
использовать компрессию
сообщений Snappy.
11
7. Дальнейшие оптимизации
запросов и трафика к HBase
• Львиная доля запросов и
трафика приходилась на
проверку состояний.
• В то же время требовалась
консистентность.
• Был создан локальный кэш
на стороне воркера стратегии.
• Для сохранения
консистентности, поток от
Scrapy-пауков к воркеру
стратегии был разделен, так
чтобы набор хостов на
воркерах не пересекался.
12
Кэш состояний
• Все операции пакетные:
• в случае отсутствия в кэше,
делается запрос в HBase,
• каждые ~4 тыс. документов
сохранение в HBase.
• При увеличении до 3 млн(~1Гб)
элементов, делается очистка с
предварительным
сохранением.
• Напрашивается алгоритм
Least-Recently-Used (LRU)
Очередь Spider’а
• В ячейке массив из:

- fingerprint, 

- Crc32(hostname), 

- URL, 

- score
• Извлекается top N.
• Архитектура уязвима к
большим хостам.
• Частично с этим можно
бороться скоринг-моделью,
учитывающей число документов
найденных на хосте.

14
8. Проблема больших и
малых хостов (возвращение!)
• По мере обхода мы нашли
несколько действительно крупных
хостов (>20M страниц)
• Ввиду особенностей архитектуры
самой очереди в HBase, на всех ее
разделах в топе скопились
страницы с нескольких крупных
хостов.
• Мы написали два MapReduce
Job’а:
• для перемешивания очереди,
• для планирования не более
100 документов с хоста
15
• Один процесс Scrapy позволяет выкачивать со скоростью
1200 стр./мин. с около 100 веб-сайтов параллельно.
• Соотношение пауков к воркерам 4:1 (без передачи
контента)
• 1 Гб памяти для каждого SW (кэш состояний,
настраиваемый).
• Пример:
• 12 пауков ~ 14.4K страниц/мин.,
• 3 SW и 3 DB воркера,
• Всего 18 ядер CPU необходимо.
Аппаратные требования
16
• Apache HBase,
• Apache Kafka,
• Python 2.7+,
• Scrapy 0.24+,
• DNS Service.
Программные требования
CDH (100% Open source
Hadoop дистрибутив)
17
Обслуживание Cloudera Hadoop
на Amazon EC2
• Очень чувствительна к свободному месту на корневом разделе:
логи, parcel-ы, и БД Cloudera Manager.
• Можно отселить через символические ссылки на EBS раздел.
• EBS должен быть около 30Гб, базовых IOPS достаточно.
• Начальная конфигурация 3 x m3.xlarge (4 CPU, 15Gb, 2x40 SSD).
• После недели работы, кончилось место, и мы начали переносить
DataNod’ы на d2.xlarge (4 CPU, 30.5Gb, 3x2Tb HDD).
Обход испанского (.es) интернета
• fnac.es, rakuten.es, adidas.es,
equiposdefutbol2014.es,
druni.es,
docentesconeducacion.es -
самые большие веб-узлы
• 68.7K доменов найдено (~600
ожидаем),
• 46.5M обойдено страниц,
• 1.5 месяца,
• 22 узла с более чем 50M
страниц
19
• Онлайн архитектура: планирование новой порции,
обновление состояний в хранилище.
• Абстракция хранилища: напишите свой бэкенд
(sqlalchemy, HBase есть в коробке).
• Абстракция разрешения канонических URL:
каждый документ имеет несколько URL, какой
использовать?
• Экосистема Scrapy: хорошая документация, большое
сообщество, простота адаптации под Ваши нужды.
Основные возможности
20
• Apache Kafka как шина данных: разделение топика
и механизм смещений.
• Абстракция стратегии обхода: цель обхода,
приоритизация URL, и модель ранжирования
закодированы в отдельном модуле.
• Вежливость на уровне архитектуры: к каждому
хосту обращается максимум один процесс.
• Python: воркеры, модули загрузки.
Основные возможности
21
Ссылки
• Distributed Frontera. https://github.com/
scrapinghub/distributed-frontera
• Frontera. https://github.com/scrapinghub/frontera
• Документация:
• http://distributed-frontera.readthedocs.org/
• http://frontera.readthedocs.org/
22
Планы на будущее
• Версия для одной машины, без
зависимостей от HBase и Kafka.
Коммуникация через сокеты или
named pipes.
• Стратегия переобхода в составе
фреймворка.
• Решения для слежения за
изменениями на страницах веб-сайта
(watchdog).
• PageRank или HITS стратегия.
• Собственные HTML и URL парсеры.
• Интеграция в сервисы Scrapinghub’а.
• Тестирование на больших объемах.
23
Будьте соавтором!
• Distributed Frontera это
первая в истории попытка
реализовать
производительный робот на
Python’е.
• Действительно тяжелая
вычислительная задача (CPU,
сеть, диски).
• Сделано в Scrapinghub, где
работают авторы Scrapy.
• В планах Apache Software
Foundation.
24
Мы нанимаем!
http://scrapinghub.com/jobs/
25
Preguntas!
Спасибо!
Александр Сибиряков,
sibiryakov@scrapinghub.com

More Related Content

PDF
SphinxSearch Meetup - Tips&tricks
PDF
AVITO. Решардинг Redis без даунтайма. DevConf 2012
PDF
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
PDF
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
PDF
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
PPTX
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
PDF
Avito Stachka 2012
PDF
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
SphinxSearch Meetup - Tips&tricks
AVITO. Решардинг Redis без даунтайма. DevConf 2012
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
Avito Stachka 2012
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...

What's hot (20)

PDF
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
PDF
Загрузка больших объемов данных для бизнес-аналитики
PPTX
Cassandra:Курс молодого бойца
PDF
Pulsedb — система хранения временных рядов
PDF
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
PDF
Near-realtime аналитика событий в высоконагруженном проекте
PDF
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
PPTX
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
PDF
Rspamd — высокопроизводительная система фильтрации спама / Стахов Всеволод (U...
PDF
Опыт использования Spark, Основано на реальных событиях
PDF
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
PDF
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
PDF
Лекция 14. Hadoop в Поиске Mail.Ru
PPT
Алексей Чумаков. Apache Cassandra на реальном проекте
PDF
02 - Hadoop. Архитектура HDFS
PDF
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
PDF
Kubasov
PDF
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
PPTX
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Загрузка больших объемов данных для бизнес-аналитики
Cassandra:Курс молодого бойца
Pulsedb — система хранения временных рядов
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
Near-realtime аналитика событий в высоконагруженном проекте
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Rspamd — высокопроизводительная система фильтрации спама / Стахов Всеволод (U...
Опыт использования Spark, Основано на реальных событиях
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Лекция 14. Hadoop в Поиске Mail.Ru
Алексей Чумаков. Apache Cassandra на реальном проекте
02 - Hadoop. Архитектура HDFS
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Kubasov
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Ad

Similar to Frontera: распределенный робот для обхода интернета в больших объемах - Александр Сибиряков, Scrapinghub (20)

PDF
ekbpy'2012 - Данила Штань - Распределенное хранилище
PDF
Обзор перспективных баз данных для highload / Юрий Насретдинов
PDF
Где сегодня использовать ElasticSearch
PPTX
Спасение 6 миллионов файлов в условиях полного Хецнера
PDF
Tech Talks @NSU: Что такое Highload? Секреты высокой нагрузки.
PDF
Что такое Highload? Секреты высокой нагрузки
PPTX
Hosting for forbes.ru_
PDF
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
PPTX
Безопасность без антивирусов 4
PDF
Александр Соловьёв, Griddynamics.com
PDF
Isilapp — Extreme Cloud Storage on FreeBSD
PDF
Сергей Житинский, Александр Чистяков (Git in Sky)
PDF
10 HappyDev-lite'14 Иван Погудин, Анатолий Никулин. Решение задач, связанных...
PPT
ADD2010: Обработка большого объема данных на платформеApache Hadoop
PPTX
Опыт эксплуатации большого проекта на Ruby
PPTX
NoBigData - потоковая система аналитики clientside производительности, Сергей...
PPT
Client optimization drupal
PDF
12 HappyDev-lite-2014. Иван Погудин, Анатолий Никулин. Решение задач, связан...
PDF
Выжимаем из сервера максимум (Андрей Паньгин)
PDF
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
ekbpy'2012 - Данила Штань - Распределенное хранилище
Обзор перспективных баз данных для highload / Юрий Насретдинов
Где сегодня использовать ElasticSearch
Спасение 6 миллионов файлов в условиях полного Хецнера
Tech Talks @NSU: Что такое Highload? Секреты высокой нагрузки.
Что такое Highload? Секреты высокой нагрузки
Hosting for forbes.ru_
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Безопасность без антивирусов 4
Александр Соловьёв, Griddynamics.com
Isilapp — Extreme Cloud Storage on FreeBSD
Сергей Житинский, Александр Чистяков (Git in Sky)
10 HappyDev-lite'14 Иван Погудин, Анатолий Никулин. Решение задач, связанных...
ADD2010: Обработка большого объема данных на платформеApache Hadoop
Опыт эксплуатации большого проекта на Ruby
NoBigData - потоковая система аналитики clientside производительности, Сергей...
Client optimization drupal
12 HappyDev-lite-2014. Иван Погудин, Анатолий Никулин. Решение задач, связан...
Выжимаем из сервера максимум (Андрей Паньгин)
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Ad

More from it-people (20)

PDF
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
PDF
«Scrapy internals» Александр Сибиряков, Scrapinghub
PDF
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
PDF
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
PDF
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
PDF
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
PDF
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
PDF
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
PDF
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
PDF
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
PDF
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
PDF
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
PDF
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
PDF
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
PDF
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
PDF
«(Без)опасный Python», Иван Цыганов, Positive Technologies
PDF
«Python of Things», Кирилл Борисов, Яндекс
PDF
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
PDF
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
PDF
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Scrapy internals» Александр Сибиряков, Scrapinghub
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«(Без)опасный Python», Иван Цыганов, Positive Technologies
«Python of Things», Кирилл Борисов, Яндекс
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...

Frontera: распределенный робот для обхода интернета в больших объемах - Александр Сибиряков, Scrapinghub

  • 1. Frontera: распределенный робот для обхода интернета в больших объемах Александр Сибиряков, 18 сентября 2015 sibiryakov@scrapinghub.com
  • 2. • Родился в Екатеринбурге, РФ • 5 лет в Яндексе, отдел качества поиска: социальный и вопросно-ответный поиск, сниппеты. • 2 года в антивирусе Avast!, исследовательский отдел: автоматическое разрешение ложных срабатываний, предсказывание зловредных скачиваний. Здравствуйте, участники! 2
  • 3. Задача • Обойти испанский интернет, для сбора статистики о узлах, их числе и размерах. • Ограничиться зоной .es. • Широкий обход (Breadth-first): в первую очередь страницы на расстоянии 1-го перехода, затем 2-х и т.д. • Условие остановки: отсутствие узлов с менее, чем 100 скачанными страницами. • Минимальные финансовые затраты. 3
  • 4. Испанский интернет (.es) в 2012 • Доменных имен зарегистрировано - 1,56М (39% годовой прирост) • Веб-серверов в зоне - 283,4K (33,1%) • Хостов - 4,2M (21%) • Испанских сайтов в каталоге DMOZ - 22043
 * - отчет OECD Communications Outlook 2013 4
  • 5. Решение • Scrapy* - для сетевых операций. • Apache Kafka - шина данных (смещения, разделы). • Apache HBase - хранилище (случайный доступ, линейное сканирование, масштабируемость). • Twisted.Internet - библиотека с асинхронными примитивами для воркеров. • Snappy - алгоритм компрессии для IO задач. * - сетевые операции внутри Scrapy реализованы асинхронно, также на основе Twisted.Internet 5
  • 7. 1. Проблема больших и малых хостов • При обнаружении большого числа ссылок с хоста, и использовании простых моделей приоритизации часто происходит заполнение порции URL-ами с одного хоста. • Мы внедрили дополнительную по- хостовую (опционально по-IP) очередь, и дозирующий алгоритм: URL-ы c больших хостов кэшируются в памяти. 7
  • 8. 3. DDoS DNS службы Amazon AWS • Breadth-first стратегия предполагает перво- очередной обход с ранее неизвестных хостов, генерируя тем самым огромное число DNS запросов. • Рекурсивный DNS сервер на каждом качающем хосте, с upstream на Verizon и OpenDNS. • Мы использовали dnsmasq. 8
  • 9. 4. Настройка thread pool’а в Scrapy для разрешения по имени хоста • В Scrapy для получения IP адреса используется thread pool. • Если ip адреса нет в кэше, отправляется запрос на DNS сервер в отдельном треде, который блокируется. • Scrapy выдавал многочисленные ошибки связанные с таймаутом разрешения DNS имени. • Добавили в Scrapy возможность настраивать размер thread pool’a и таймауты. 9
  • 10. 5. Перегружены регион-серверы HBase при проверке состояний • Когда робот делает обход, из каждой страницы извлекается несколько сотен ссылок. • Эти ссылки перед тем, как добавить в приоритетную очередь нужно проверить на их наличие там (чтобы избежать повторного скачивания). • На малых объемах SSD диски справлялись, после увеличения таблиц и переезда на HDD время исполнения запросов существенно увеличилось. • Хост-локальная хэш функция для генерации ключей в HBase. • Настройка HBase block cache, так чтобы один блок вмещал средний хост целиком. 10
  • 11. 6. Интенсивный трафик от воркеров к сервисам • Скорость потока при коммуникации с Kafka и HBase доходила 1Gbit/s. • В HBase перешли на компактный протокол Thrift. • В Kafka начали использовать компрессию сообщений Snappy. 11
  • 12. 7. Дальнейшие оптимизации запросов и трафика к HBase • Львиная доля запросов и трафика приходилась на проверку состояний. • В то же время требовалась консистентность. • Был создан локальный кэш на стороне воркера стратегии. • Для сохранения консистентности, поток от Scrapy-пауков к воркеру стратегии был разделен, так чтобы набор хостов на воркерах не пересекался. 12
  • 13. Кэш состояний • Все операции пакетные: • в случае отсутствия в кэше, делается запрос в HBase, • каждые ~4 тыс. документов сохранение в HBase. • При увеличении до 3 млн(~1Гб) элементов, делается очистка с предварительным сохранением. • Напрашивается алгоритм Least-Recently-Used (LRU)
  • 14. Очередь Spider’а • В ячейке массив из:
 - fingerprint, 
 - Crc32(hostname), 
 - URL, 
 - score • Извлекается top N. • Архитектура уязвима к большим хостам. • Частично с этим можно бороться скоринг-моделью, учитывающей число документов найденных на хосте.
 14
  • 15. 8. Проблема больших и малых хостов (возвращение!) • По мере обхода мы нашли несколько действительно крупных хостов (>20M страниц) • Ввиду особенностей архитектуры самой очереди в HBase, на всех ее разделах в топе скопились страницы с нескольких крупных хостов. • Мы написали два MapReduce Job’а: • для перемешивания очереди, • для планирования не более 100 документов с хоста 15
  • 16. • Один процесс Scrapy позволяет выкачивать со скоростью 1200 стр./мин. с около 100 веб-сайтов параллельно. • Соотношение пауков к воркерам 4:1 (без передачи контента) • 1 Гб памяти для каждого SW (кэш состояний, настраиваемый). • Пример: • 12 пауков ~ 14.4K страниц/мин., • 3 SW и 3 DB воркера, • Всего 18 ядер CPU необходимо. Аппаратные требования 16
  • 17. • Apache HBase, • Apache Kafka, • Python 2.7+, • Scrapy 0.24+, • DNS Service. Программные требования CDH (100% Open source Hadoop дистрибутив) 17
  • 18. Обслуживание Cloudera Hadoop на Amazon EC2 • Очень чувствительна к свободному месту на корневом разделе: логи, parcel-ы, и БД Cloudera Manager. • Можно отселить через символические ссылки на EBS раздел. • EBS должен быть около 30Гб, базовых IOPS достаточно. • Начальная конфигурация 3 x m3.xlarge (4 CPU, 15Gb, 2x40 SSD). • После недели работы, кончилось место, и мы начали переносить DataNod’ы на d2.xlarge (4 CPU, 30.5Gb, 3x2Tb HDD).
  • 19. Обход испанского (.es) интернета • fnac.es, rakuten.es, adidas.es, equiposdefutbol2014.es, druni.es, docentesconeducacion.es - самые большие веб-узлы • 68.7K доменов найдено (~600 ожидаем), • 46.5M обойдено страниц, • 1.5 месяца, • 22 узла с более чем 50M страниц 19
  • 20. • Онлайн архитектура: планирование новой порции, обновление состояний в хранилище. • Абстракция хранилища: напишите свой бэкенд (sqlalchemy, HBase есть в коробке). • Абстракция разрешения канонических URL: каждый документ имеет несколько URL, какой использовать? • Экосистема Scrapy: хорошая документация, большое сообщество, простота адаптации под Ваши нужды. Основные возможности 20
  • 21. • Apache Kafka как шина данных: разделение топика и механизм смещений. • Абстракция стратегии обхода: цель обхода, приоритизация URL, и модель ранжирования закодированы в отдельном модуле. • Вежливость на уровне архитектуры: к каждому хосту обращается максимум один процесс. • Python: воркеры, модули загрузки. Основные возможности 21
  • 22. Ссылки • Distributed Frontera. https://github.com/ scrapinghub/distributed-frontera • Frontera. https://github.com/scrapinghub/frontera • Документация: • http://distributed-frontera.readthedocs.org/ • http://frontera.readthedocs.org/ 22
  • 23. Планы на будущее • Версия для одной машины, без зависимостей от HBase и Kafka. Коммуникация через сокеты или named pipes. • Стратегия переобхода в составе фреймворка. • Решения для слежения за изменениями на страницах веб-сайта (watchdog). • PageRank или HITS стратегия. • Собственные HTML и URL парсеры. • Интеграция в сервисы Scrapinghub’а. • Тестирование на больших объемах. 23
  • 24. Будьте соавтором! • Distributed Frontera это первая в истории попытка реализовать производительный робот на Python’е. • Действительно тяжелая вычислительная задача (CPU, сеть, диски). • Сделано в Scrapinghub, где работают авторы Scrapy. • В планах Apache Software Foundation. 24