Дизайн веб-бота, используемый поисковыми системами

Оригинал статьи опубликован на сайте systemdesign.one автором NK. Вот некоторые из популярных распределенных поисковых роботов:

  • Google-бот
  • Бинг-бот
  • Апач Натч

Отказ от ответственности: некоторые из связанных ресурсов являются аффилированными.

Требования

  • Автоматический веб-сканер для сканирования файлов HTML в Интернете.
  • Поисковый робот распространяется
  • Поисковый робот должен начать сканирование с набора исходных веб-страниц.
  • Поисковый робот должен быть вежлив с веб-сайтами (соблюдать требования файла robots.txt).

Хранилище данных

Схема базы данных

  • Хранилище содержимого сохраняет идентификаторы документов и содержимое документа.
  • В хранилище исходных URL-адресов сохраняется список исходных URL-адресов.
  • В хранилище URL-адресов сохраняется список URL-адресов для сканирования и исходные URL-адреса.

Тип хранилища данных

  • Хранилище URL-адресов сохраняет извлеченный список URL-адресов в хранилище данных NoSQL, таком как HBase или HDFS.
  • Просканированный контент хранится в управляемом хранилище объектов, таком как AWS S3, или в хранилище данных NoSQL, таком как Apache HBase или Cassandra.
  • DNS сохраняет доменные имена и IP-адреса
  • Хранилище исходных URL-адресов сохраняет список исходных URL-адресов в хранилище данных NoSQL, таком как Cassandra или HDFS.
  • Очередь сообщений, такая как Apache Kafka, используется в качестве очереди недоставленных сообщений.
  • Кэш-сервер, такой как Redis, хранит свежие просканированные документы в памяти для более быстрой обработки.
  • Хранилище данных NoSQL, такое как Cassandra, или хранилище объектов, такое как AWS S3, хранит содержимое просканированных веб-страниц.
  • Apache Zookeeper используется для обнаружения сервисов.

Высокоуровневый дизайн

На высоком уровне веб-сканер многократно выполняет шаги 2 и 3.

  1. Служба сборщика сканирует URL-адреса в хранилище исходных данных.
  2. Извлеченные исходящие ссылки (URL) на просканированном веб-сайте хранятся в хранилище URL-адресов.
  3. Служба сборщика сканирует URL-адреса в хранилище URL-адресов.
  4. Краулер использует алгоритм BFS

Дополнительные учебные ресурсы по проектированию систем

Вы готовитесь к собеседованию по системному дизайну и чувствуете себя ошеломленным сложностью процесса? Вы хотите получить знания и уверенность, чтобы успешно пройти собеседование и продвинуться по карьерной лестнице в области разработки программного обеспечения? Тогда вам обязательно нужно пройти курс Собеседование по системному дизайну от DesignGurus!

Этот всеобъемлющий курс разработан, чтобы помочь вам освоить процесс собеседования по проектированию системы, разбивая сложные концепции на простые для понимания объяснения. Сосредоточив внимание на практических примерах из реальной жизни, вы научитесь проектировать масштабируемые, отказоустойчивые и высокопроизводительные системы, способные решать самые сложные задачи.

Не упустите эту возможность поднять свои навыки проектирования систем на новый уровень и достичь своих карьерных целей. Запишитесь на курс Собеседование по проектированию систем от DesignGurus сегодня и сделайте первый шаг к успеху!

Рабочий процесс

  1. Граница URL-адресов запрашивает хранилище исходных URL-адресов, чтобы получить список URL-адресов для сканирования.
  2. Граница URL-адресов отдает приоритет URL-адресам для сканирования.
  3. Служба сборщика запрашивает службу планировщика, чтобы проверить, имеет ли URL-адрес предопределенное расписание сканирования.
  4. Локальная служба DNS запрашивается для определения IP-адреса исходного сервера.
  5. Служба выборки на стороне сервера отображает веб-страницы.
  6. Служба проверки дубликатов запрашивается для проверки дублирующегося контента на веб-странице.
  7. Служба сборщика сжимает просканированную веб-страницу и сохраняет ее в хранилище контента для дальнейшей обработки, такой как построение инвертированного индекса.
  8. Служба сборщика сохраняет просканированную веб-страницу в кэше содержимого для немедленной обработки.
  9. Служба сборщика публикует идентификатор документа в очереди сообщений для асинхронной обработки просканированных веб-страниц.
  10. Процессор URL получает информацию о просканированной веб-странице с помощью шаблона публикации-подписки.
  11. URL-адреса извлекаются, фильтруются и нормализуются из просканированной веб-страницы путем запроса кеша контента.
  12. Извлеченные URL-адреса сохраняются в хранилище URL-адресов для последующего сканирования.
  13. Граница URL-адресов запрашивает хранилище URL-адресов, чтобы получить URL-адреса для сканирования.
  14. Службы отправляли пульсирующие сигналы в зоопарк Apache для повышения отказоустойчивости.
  15. Создаются только ограниченные HTTP-соединения с исходным сервером, чтобы повысить вежливость сканера.
  16. Локальная служба DNS используется для уменьшения задержки
  17. Граница URL-адресов использует очереди сообщений для приоритизации URL-адресов для обхода и повышения вежливости сканера.
  18. Служба выборки является многопоточной для одновременного сканирования нескольких веб-страниц.
  19. Служба сборщика выполняет рендеринг веб-страниц на стороне сервера для обработки динамических веб-страниц.
  20. Средство извлечения URL-адресов, фильтр URL-адресов и служба нормализации URL-адресов запускаются в заданиях Apache Spark (MapReduce) для повышения пропускной способности.
  21. Шаблон публикации-подписки среди сервисов реализован с использованием очереди сообщений.
  22. Очередь сообщений реализует шаблон обратного давления для повышения отказоустойчивости.
  23. Сервис проверки дубликатов использует алгоритм simhash для обнаружения сходства контента на веб-страницах.
  24. Консистентное хеширование используется для разделения кеша контента (ключ = идентификатор документа)
  25. Реплики чтения кэша контента служат последним документам для дальнейшей обработки.
  26. RPC используется для внутренней связи для уменьшения задержки.
  27. Службы с отслеживанием состояния периодически проверяются для повышения отказоустойчивости.
  28. Файл sitemap.xml используется веб-мастером для информирования поискового робота об URL-адресах на веб-сайте, доступных для сканирования.
  29. Файл robots.txt используется веб-мастером для информирования поискового робота о том, какие части веб-сайта ему разрешено посещать.
  30. Веб-страницы извлекаются и анализируются в потоковых заданиях с использованием Apache Flink для повышения пропускной способности.
  31. Веб-страницы ранжируются и обрабатываются в пакетных заданиях на Apache Spark.
  32. Фильтр Блума используется обработчиком URL-адресов (извлечение, фильтрация, нормализатор) для проверки того, был ли URL-адрес просканирован ранее.
  33. Служба сборщика пропускает сканирование неканонических URL-адресов, а вместо этого сканирует соответствующие канонические ссылки.
  34. Apache Gora используется в качестве оболочки SQL для запросов к хранилищу данных NoSQL.
  35. Apache Tika используется для обнаружения и анализа нескольких форматов документов.
  36. Веб-страницы, которые возвращают код состояния 4XX или 5XX, исключаются из повторных попыток сканирования.
  37. Страницы перенаправления сканируются по коду состояния ответа HTTP 3XX.
  38. Служба планировщика возвращает фиксированное или адаптивное расписание на основе определения файла sitemap.xml.
  39. HTTP-заголовок пользовательского агента в запросе устанавливается на имя сканера.
  40. Веб-сканер распределен географически, чтобы он находился ближе к исходным серверам веб-сайта, чтобы уменьшить задержку.
  41. Службы хранения распределяются и реплицируются для обеспечения надежности.

Граница URL

Служба определения приоритетов помещает URL-адреса в зависимости от приоритета в отдельные очереди сообщений. Расчет важности онлайн-страницы (OPIC) или рейтинг ссылок используется для присвоения приоритета URL-адресам. Последовательное хеширование можно использовать для распределения URL-адресов по очередям сообщений.

Служба выбора приоритета извлекает URL-адреса из очереди с высоким приоритетом и помещает URL-адреса определенного веб-сайта в одну очередь сообщений для последовательного сканирования. Последовательное сканирование повышает вежливость сканера.

Поддерживать

Если вам нравится блог и вы хотите поддержать мою работу, вы можете сделать единовременное пожертвование на Ko-fi или Купи мне кофе или стать покровителем на Patreon. Ваша поддержка поможет мне продолжать создавать качественный контент и привносить новые идеи в блог. Благодарим вас за щедрость!

Новостная рассылка

Подпишитесь на мою рассылку и никогда больше не пропустите новую запись в блоге, так как вы будете получать уведомления по электронной почте каждый раз, когда я что-то публикую. Вы также получите полное руководство по проведению собеседований по проектированию системы в разделе Подписка на рассылку новостей.

Если вы планируете подписаться на Medium, используя мою реферальную ссылку, я хотел бы сообщить вам, что я получу часть членских взносов в качестве вознаграждения за то, что пригласил вас. Это помогает мне продолжать создавать ценный контент. Однако я хочу заверить вас, что это никак не повлияет на стоимость вашей подписки. Вы по-прежнему получите те же преимущества и возможности, что и любой другой участник Medium. Спасибо, что рассмотрели мою реферальную ссылку и поддержали мою работу!

Рекомендации