Подтвердить что ты не робот

Как сканировать миллиарды страниц?

Можно ли сканировать миллиарды страниц на одном сервере?

4b9b3361

Ответ 1

Нет, если вы хотите, чтобы данные были актуальными.

Даже маленький игрок в поисковой игре будет пронумеровать страницы, просканированные в нескольких миллиардах.

"В 2006 году Google индексировал более 25 миллиардов веб-страниц, [32] 400 миллионов запросов в день, [32] 1,3 миллиарда изображений и более одного миллиарда сообщений Usenet". - Wikipedia

И помните, что в цитате упоминаются цифры с 2006 года. Это древняя история. Современное состояние намного больше.

Свежесть контента:

  • Новый контент постоянно добавляется с очень большой скоростью (реальность)
  • Существующие страницы часто меняются - вам нужно выполнить повторный поиск по двум причинам: a) определить, мертв ли ​​он, b) определить, изменилось ли содержимое.

Вежливость искателя:

  • Вы не можете подавить какие-либо сайты. Если вы неоднократно нажимаете на какой-либо основной сайт с одного и того же IP-адреса, вы можете вызвать либо приглашение CAPTCHA, либо заблокировать ваш IP-адрес. Сайты будут делать это на основе полосы пропускания, частоты запросов, # из "плохих" запросов страниц и всех видов других вещей.
  • Существует протокол robots.txt, который сайты подвергают сканерам, подчиняются ему.
  • Существует стандарт sitemap, который сайты подвергают сканерам, используют его, чтобы помочь вам исследовать - вы также можете (если хотите) весить относительную важность страниц на сайте и использовать время для жизни в кеше, если указано на карте сайта.

Уменьшите работу, которую вам нужно выполнить:

  • Часто сайты подвергаются нескольким именам - вам нужно будет идентифицировать страницы, которые идентичны - это может происходить на одном и том же URL-адресе или на отдельных URL-адресах. Рассмотрите хэш на содержании страницы (минус заголовки с датами/временем, которые постоянно меняются). Следите за этими эквивалентами страниц и пропустите их в следующий раз или определите, существует ли известное сопоставление между данными сайтами, чтобы вам не приходилось сканировать их.
  • СПАМ. Тонны людей там делают тонны страниц, которые просто проходят через Google, но они "посеяны" по всему Интернету, чтобы получить обход.

Итак - вы всегда в цикле обхода. Всегда. Вы почти наверняка будете на нескольких (многих многих) машинах. чтобы вы могли соблюдать вежливость, но все еще раскачивались в свежести данных.

Если вы хотите нажать кнопку быстрой перемотки вперед и просто перейдите на страницу обработки с помощью своего уникального алгоритма.... вы, вероятно, можете воспользоваться встроенным сканером, если вам это нужно быстро - подумайте "80 ножек", как выделено в Программируемый веб. Они делают это с использованием вычислительной мощности на стороне клиента.

80 ножек используют машинные циклы от детей, играющих в игры на веб-сайтах. Подумайте о фоновом процессе на веб-странице, которая выполняет вызовы и работает, пока вы используете эту страницу/сайт, не зная об этом, потому что они используют стек технологии Plura.

"Plura Processing разработала новую и инновационную технологию для распределенных вычислений. Наши запатентованные технологии могут быть встроены в любую веб-страницу. Посетители этих веб-страниц становятся узлами и выполняют очень небольшие вычисления для приложения, работающего в нашей распределенной вычислительной сети." - Страница демонстрации Plura

Таким образом, они выдают "сканирование" через тысячи узлов в тысячах IP-адресов и вежливо относятся к сайтам и быстро выполняют сканирование. Теперь я лично не знаю, что мне небезразличен этот стиль использования браузера конечного пользователя, если он не был вызван на всех сайтах с использованием их технологий ОЧЕНЬ четко - но это не из коробки, если ничего другого.

Есть другие сканеры, которые были написаны в проектах, управляемых сообществом, которые вы, вероятно, могли бы использовать также.

Как отмечают другие респонденты, делайте математику. Вам потребуется ~ 2300 страниц, сканируемых в секунду, чтобы не отставать от сканирования 1B страниц каждые 5 дней. Если вы готовы подождать дольше, число снизится. Если вы думаете, что собираетесь сканировать более 1B, число увеличивается. Простая математика.

Удачи!

Ответ 2

Крупномасштабная паутина (миллиард страниц) - сложная проблема. Вот некоторые из проблем:

  • Полоса пропускания сети. Предполагая, что каждая страница 10Kb, тогда вы говорите об общей 10 терабайт для загрузки.

  • Локализация сети/медленные серверы/перегрузка означают, что вы не достигнете ничего подобного теоретической пропускной способности вашего сетевого соединения. Многопоточность вашего искателя помогает только так.

  • Я предполагаю, что вам нужно сохранить информацию, которую вы извлекли из миллиардов страниц.

  • Ваш парсер HTML должен иметь дело с веб-страницами, которые разбиты всякими странными способами.

  • Чтобы избежать застревания в цикле, вам нужно обнаружить, что вы уже "сделали эту страницу".

  • Страницы меняются, поэтому вам нужно их просмотреть.

  • Вам нужно иметь дело с "robots.txt" и другими соглашениями, которые определяют поведение (корректных) сканеров.

Ответ 3

В оригинальной статье Стражей и Брин (Google) 1998 года описано, что через 10 дней через 4 машины было сканировано 25 миллионов страниц. Они открывали 300 соединений за один раз за машину. Я думаю, что это все еще очень хорошо. В своих собственных экспериментах с машинами с полками, работающими под управлением Linux, я мог бы надежно открывать 100-200 одновременных соединений.

При сканировании необходимо выполнить три основные задачи: (1) выбрать, что сканировать дальше, (2) получить эти страницы, (3) сохранить эти страницы. Для (1) вам нужно реализовать какую-то очередность приоритетов (т.е. Сделать первый поиск по ширине или OPIC), вам также нужно отслеживать, где вы были. Это можно сделать с помощью фильтра Bloom. Фильтры Bloom (посмотрите в Википедии) также можно использовать для хранения, если на странице был файл robot.txt, и если префикс данного URL-адреса исключен.

(2) получение страниц - это фиксированная стоимость, и вы не можете многое сделать по этому поводу; однако, как и на одной машине, вы ограничены количеством открытых соединений, если у вас есть кабель, вы, вероятно, не приблизитесь к еде всей доступной ширины полосы. Возможно, вам придется беспокоиться о пропускной способности.

(3) хранение страниц обычно выполняется в файле веб-архива, как то, что делает Internet Archive. При сжатии вы, вероятно, можете хранить миллиард страниц в 7 терабайт, поэтому для хранения данных было бы доступно иметь миллиард страниц. В качестве оценки того, что может сделать одна машина, предположим, что вы получаете дешевую машину стоимостью 200 долларов США с жестким диском 1 Гб или RAM и 160 ГБ. На странице 20 Кб (используйте запросы диапазона, чтобы избежать проглатывания больших страниц целиком), 10 миллионов страниц занимали бы 200 ГБ, но сжатые - около 70 ГБ.

Если вы сохраняете архив, в котором работает ваша поисковая система (на котором вы уже рассчитали рейтинг страницы и bm25), и активный архив обхода, то вы потребляете 140 ГБ. Это дает вам около 20 ГБ для других случайных вещей, которые вам нужно обрабатывать. Если вы работаете над памятью, вам нужно попытаться сохранить как можно больше приоритетной очереди и фильтров цветения в ОЗУ, вы также правы на грани того, что возможно. Если вы сканируете 300 000 страниц в день, вам потребуется чуть больше месяца/обход страницы на 10 миллионов страниц

Ответ 4

Через 5 лет после того, как будет задан вопрос, я могу ответить "да".

И наша обходная машина уже не очень дорогая, ее можно купить у EBay около 3000 евро и содержит 24x1TB 2,5 "Диски (работает как одиночные диски) с двумя 6-ядерными процессорами Intel Xeon (что делает его 12cores/24 потоки) и 96 ГБ оперативной памяти, используя 10-гигабитную линию (всего лишь 33% процентиля) в Люксембургском центре обработки данных.

Он использует 100 000 одновременных HTTP-соединений, что приводит к сканированию около 30 000 страниц в секунду.

Да, сегодня компьютеры довольно быстрые. И, кстати, главная проблема заключается в обработке URL-адресов и обнаружении дубликатов страниц (одна и та же доступная страница доступна по-разному), но не для сетевого подключения.

Ответ 5

Исследователи из Texas A & M создали IRLbot, который обладает высокой масштабируемостью и способен сканировать миллиарды веб-страниц в "короткой" сумме времени (~ 7 дней за 1 миллиард?) с небольшим количеством ресурсов (т.е. количество ПК). Исследователи Texas A & M предоставили следующую статистику для своего искателя:

Мы предлагаем набор методов для решения этих проблем и тестирования их производительность в реализации мы называем IRLbot. В нашей недавней эксперимент, который длился 41 день, IRLbot работает на одном сервере успешно выполнили 6,3 миллиарда действительных HTML-страниц (7,6 млрд. запросы на соединение) и поддержали среднюю скорость загрузки 319 Мб/с (1,789 страниц/с). В отличие от предыдущих экспериментов с алгоритмами предложенный в смежной работе, эта версия IRLbot не испытывала любые узкие места и успешно обрабатывали контент из более чем 117 миллионов хосты, разобрали 394 миллиарда ссылок и обнаружили подмножество веб-график с 41 миллиардом уникальных узлов.

Вы можете прочитать о дизайне и архитектуре своего искателя в своей опубликованной статье, IRLbot: масштабирование до 6 миллиардов страниц и далее или в их полной бумаге ( очень подробно).

Однако скорость сканирования сильно зависит от вашей полосы пропускания и объема данных, которые вы обрабатываете. Таким образом, с приведенной выше статистикой мы видим, что Texas A & M имеет соединение около 319 Мбит/с (примерно в 100 раз быстрее, чем обычное домашнее соединение в США), он обрабатывает около 22 кбайт данных на страницу и загружает 1,789 страниц в секунду. Если вы должны запустить свой искатель на своем домашнем подключении, вы можете ожидать следующую производительность:

  • @3,9 Мбит/с (средняя скорость для жителей США)/22 кБ на страницу = ~ 22 страницы в секунду: для загрузки 1 миллиарда страниц потребуется около 526 дней (~ 1,5 года).
  • @20 Мбит/с (верхний предел пропускной способности дома)/22 кБ/стр. = ~ 116 бит/с: для загрузки 1 миллиарда страниц потребуется около 100 дней (~ 3 месяца).

Ответ 6

hmm.. если вы можете "сканировать" 1 страницу в секунду, вы можете составить 86400 страниц в день (11574.074 дней, необходимых для завершения 1-го миллиарда, используйте это, чтобы рассчитать необходимое время в соответствии со скоростью вашей страницы за секунду). Терпение требуется.. и, конечно, место для хранения.