В связи с бурным развитием Всемирной паутины, с каждым днем все более актуальной становится проблема автоматизированного сбора и анализа информации, размещаемой на различных веб-ресурсах. Еще в начале 90-х годов прошлого столетия Всемирная паутина представляла собой огромное количество слабо структурированной информации, производить поиск в которой стало для человека практически непосильной задачей. Именно в это время стали появляться первые разработки в сфере автоматизированных агентов, облегчающих задачу поиска необходимой информации в паутине. Основной частью таких систем является поисковый робот — программный комплекс, осуществляющий навигацию по веб-ресурсам и сбор информации для базы данных приложения-агента [11]. В общем случае, собираемая роботом информация состоит из веб-страниц и ссылочной структуры веба.
Объектом исследования данной работы является распределенный поисковый робот. Основными задачами разработки поискового робота являются:
Основной целью работы является улучшение масштабируемости и производительности поисковых роботов путем использования гибкой схемы параллелизации задач.
Для формализации архитектуры предлагается использовать π-исчисление [4], а для оценки – метрики, предложенные для веб-краулеров в [3]. Эти концепции описаны более подробно в следующих разделах.
Научная новизна работы заключается в формальном подходе к исследованию конкурентных и параллельных процессов в поисковом роботе, что позволит выявить пути улучшения политик параллелизации в поисковых роботах.
Практическая ценность работы состоит в том, что разрабатываемая система может использоваться для быстрой развертки распределенных и легко масштабируемых веб-краулеров, решающих пользовательские задачи. Также, исследования конкурентных процессов из данной работы могут использоваться и для построения других распределенных систем, отличных от веб-краулера.
В национальном масштабе не было обнаружено активных исследований по теме поисковых роботов.
Исследования в области поисковых роботов ведутся с самого момента зарождения Всемирной паутины. Можно выделить несколько основных направлений исследований:
В контексте данной работы, наиболее интересными являются исследования в области архитектур поисковых роботов и алгоритмов работы P2P систем.
Одной из наиболее цитируемых и фундаментальных работ в области поисковых роботов является статья Сергея Брина и Ларри Пейджа «The Anatomy of a Large-Scale Hypertextual Web Search Engine» [2], описывающая архитектуру Googlebot по состоянию на 1998 год. Несомненно, с тех пор Googlebot претерпел массу изменений, однако в связи с коммерческой природой Google открытых данных об этом нет.
В работе Junghoo Cho and Hector Garcia-Molina. «Parallel crawlers» [1] представлена классификация архитектур параллельных поисковых роботов и метрики, используемые для их оценки. Данная магистерская работа во многом базируется на этих исследованиях.
Задача построения эффективного поискового робота является довольно нетривиальной, по нескольки причинам:
Благодаря огромным объемам и гетерогенности Всемирной паутины, архитектура поискового робота и в частности политики параллелизма, заложенные в ней, являются интересным объектом исследований. На сегодняшний день ключевым моментом, определяющим производительность поискового робота является горизонтальная масштабируемость его архитектуры, т.е. свойство системы увеличивать производительность при добавлении новых узлов (компьютеров). Достаточно интересное исследование и попытка классификации различных архитектур параллельных поисковых роботов представлены в [1].
Однако, существующие архитектуры поисковых роботов достаточно сложны, и их масштабируемость зачастую далека от линейной. Также, при масштабировании возможно ухудшение значений метрик качества собираемой роботом информации. Можно сделать вывод, что дополнительные исследования политик параллелизации поисковых роботов могут улучшить масштабируемость и производительность робота, а также повысить качество собираемых им данных.
Учитывая обозначенные выше сложности, связанные с обходом Всемирной паутины, архитектуры и политики параллелизации поисковых роботов общего назначения изначально разрабатывались таким образом, чтобы обеспечить максимально быстрое получение данных и простоту масштабирования. Можно выделить такие два больших класса архитектур параллельных поисковых роботов:
На более низком уровне, архитектуры поисковых роботов могут отличаться методами распределения задач между компонентами, способами обмена URL и алгоритмом их распределения. Конфигурация конкретного поискового робота может варьироваться в зависимости от нужд использующего его приложения. Например, для минимизации объема загружаемых данных и оптимизации производительности веб-краулера могут использоваться отложенные вычисления в форме абстракций futures [5].
Для оценки поисковых роботов, можно использовать следующие метрики, предложенные в [1].
где N — общее количество загруженных страниц, I — количество уникальных страниц.
где I — количество уникальных страниц, U — общее количество страниц.
Перечисленные выше метрики находятся в прямой зависимости от политик параллелизации, заложенных в архитектуре поискового робота, и имеют тенденцию ухудшаться при распределении конкурентных компонентов или увеличении их числа [1]. Этот факт явно показывает необходимость дальнейших исследований политик параллелизации.
Параллельный поисковый робот, по своей сути представляет собой образец системы с конкурентными вычислениями, и следовательно к нему могут быть применены математические методы и модели конкурентных вычислений. Одной из наиболее выразительных моделей конкурентных вычислений является π-исчисление [4]. Π-исчисление является Тьюринг-полной моделью вычислений и является мощным инструментов для формализации и исследования конкурентных процессов с комплексными взаимодействиями.
Базовое π-исчисление предлагает следующие примитивы для описания процессов:
В качестве примера определения процесса в терминах π-исчисления можно рассмотреть процесс Fetch, выполняющий непосредственную загрузку страницы по данному URL:
Данный процесс представляет собой абстракцию π-исчисления (т.е. параметризуется); URL в виде (s, p), где s — сервер, p — страница, принимается по каналу f, затем происходит запрос страницы с сервера с последующим ее получением по каналу с параметром data. Затем data передается по каналу store в хранилище.
Таким образом, при помощи π-исчисления можно промоделировать другие компоненты системы, что позволит более формально подойти к исследованию архитектур веб-краулеров и политик параллелизации. π-исчисление позволяет моделировать сложные взаимодействия между компонентами системы и проводить структурные преобразования при помощи механизмов бисимуляции и структурной конгруэнтности процессов.
В теории конкурентных вычислений принято выделять два основных механизма взаимодействия: взаимодействие при помощи общей памяти и взаимодействие путем передачи сообщений. Это разделение также находит отражение в реализациях языков программирования и фреймворков. В семантике π-исчисления заложено межпроцессное взаимодействие при помощи передачи сообщений, что необходимо учитывать при выборе средств реализации поискового робота.
Основными требованиями, выдвигаемыми к языку реализации являются:
С учетом выдвинутых требований, в качестве языка реализации был выбран язык программирования Haskell (http://www.haskell.org). Haskell относится к семейству языков ML и представляет собой чистый функциональный язык с отложенными вычислениями. Haskell обладает строгой статической типизацией с автоматическим выводом типов по модели Хиндли-Милнера, поддержкой алгебраических и рекурсивных типов данных, вызовом функции по образцу.
Определяющим фактором в выборе именно этого языка программирования стала его продвинутая реализация примитивов конкурентных вычислений (Concurrent Haskell), близкая по семантике к π-исчислению [6]. Примитивы Concurrent Haskell реализуют все основные операции π-исчисления, кроме недетерминированного выбора, который тем не менее может быть реализован в случае необходимости при помощи других примитивов.
Специфика задачи обхода Всемирной паутины приводит к неминуемому использованию конкурентных вычислений при разработке поисковых роботов. Для эффективной реализации конкурентности и хорошей масштабируемости поискового робота, необходимо уделять немалое внимание разработке архитектуры системы и политик параллелизации.
Проанализировав существующие архитектуры, политики параллелизации и методы построения поисковых роботов, для разрабатываемой системы была выбрана децентрализованная архитектура. Также было предложено использование π-исчисления как механизма формализации и дальнейшего исследования политик параллелизации поисковых роботов. Для самой реализации поискового робота был выбран язык программирования Haskell и его расширение Concurrent Haskell как наиболее близкий к семантике π-исчисления способ описания конкурентных вычислений.
Важное замечание: На момент написания данного реферата магистерская работа еще не окончена. Окончательное завершение работы состоится в декабре 2011 года. В ближайшем будущем планируется разработка архитектуры и реализация прототипа поискового робота, сравнение его с другими реализациями.