Проектирование поискового сервера: курсовая работа

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное бюджетное образовательное учреждение
высшего образования
«КУБАНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
(ФГБОУ ВО «КубГУ»)
Кафедра информационных технологий
КУРСОВАЯ РАБОТА
ПРОЕКТИРОВАНИЕ И РЕАЛИЗАЦИЯ РАСШИРЯЕМОГО
ПОИСКОВОГО СЕРВЕРА
Работу выполнил
__________________________________Е.И. Козельский
(подпись, дата)
(инициалы, фамилия)
Факультет компьютерных технологий и прикладной математики 3 курс
Направление 01.03.02 – «Прикладная математика и информатика»
Научный руководитель,
доц., канд. физ.-мат. наук, доц.___________________________ Ю.В. Кольцов
(подпись, дата)
(инициалы, фамилия)
Нормоконтролер, ст. преп. ______________________________А.В. Харченко
(подпись, дата)
Краснодар 2017
(инициалы, фамилия)
СОДЕРЖАНИЕ
Введение ................................................................................................................... 3
1 Анализ предметной области ............................................................................... 4
1.1 Анализ сервиса inpars.ru ................................................................................ 4
1.2 Анализ популярных поисковых систем ....................................................... 4
2 Основные характеристики поискового запроса ................................................ 6
2.1 Периодичность запроса ................................................................................. 6
2.2 Источник поиска и обработки информации ................................................ 7
2.3 Характеристика выгрузки информации....................................................... 7
2.4 Правила обработки запросов ........................................................................ 7
3 Основные требования к системе......................................................................... 9
3.1 Время работы поискового запроса ............................................................... 9
3.2 Удобство организации поисковых правил, формат описания .................. 9
3.3 Надежность работы сервера и обработка исключительных ситуаций ..... 9
3.4 Модульность системы и возможность расширения ................................. 10
3.5 Универсальность кода под различные платформы .................................. 11
4 Обоснование выбора инструментария разработки ......................................... 12
4.1 Серверная часть ............................................................................................ 12
4.2 Пользовательский интерфейс ..................................................................... 14
5.1 Обработка запроса ....................................................................................... 18
5.2 Синтаксис построение поискового запроса .............................................. 20
Заключение ............................................................................................................ 24
Список использованных источников .................................................................. 25
2
ВВЕДЕНИЕ
В настоящее время имеется огромное количество информации, которая
находится в открытом доступе в интернете. По статистическим данным в
2002 году человечеством было произведено 18 × 1018 байт (18 эксабайт)
информации. За пять предыдущих лет было произведено информации
больше, чем за все предшествующую историю. Ежегодно мировой объем
информации возрастает на 30%. А в среднем на одного человека в мире
производится 2.5 ∙ 108 байт в год [1].
Задача поиска и фильтрации информации по определенным критериям
становится все сложнее. Сильно выраженной проблемой это становится для
человека, не знакомого с современными IT-технологиями.
Современные поисковые системы – программно-аппаратный комплекс
с дружественным пользовательским интерфейсом, которые позволяют
осуществлять поиск информации в Интернете [2].
Однако они не дают
возможность пользователю работать напрямую с поисковым ядром и
управлять всеми этапами поиска. Эта проблема становится особенно
актуальной, когда стоит задачи получения информации из определенных
источников, фильтрация по необходимым параметрам и выгрузка с
использованием шаблона определенного вида.
Курсовая работа посвящается проектированию и реализации системы
для поиска, извлечения и выгрузки информации с использованием
пользовательских фильтров, параметров и гибкой настройкой всех этапов
работы системы.
Планируется создание ресурса с дружественным пользовательским
интерфейсом и серверной части системы, которая может использоваться как
расширяемое поисковое ядро и применяться к различным задачам данной
области.
3
1 Анализ предметной области
Для оптимального построения системы был проведен анализ уже
имеющихся на рынке сервисов с похожим функционалом и были выявлены
основные их возможности для понимания как достоинств, так и недостатков
тех или иных реализаций.
Далее представлены описания и основные возможности актуальных на
сегодняшний день систем.
1.1 Анализ сервиса inpars.ru
Сервис inpars.ru позволяет получать актуальную информацию о
недвижимости, извлекая ее с других сайтов. Пользователям предоставляется
ограниченный набор фильтров для группировки результатов поиска,
возможность выгрузить необходимую информацию в один из предложенных
форматов, отбор поискового результата по предложенным параметрам.
После получения команды от пользователя на поиск информации,
сервис напрямую взаимодействует с базой данных, в которой уже имеется
актуальная
информация.
пользователей
База
специальным
данных
удаленным
заполняется
сервером,
независимо
который
от
работает
постоянно. Данных подход обеспечивает очень быстрый доступ к
необходимой информации, но ограничивает области поиска. В данном
случает сервис ограничивается только областью недвижимости.
1.2 Анализ популярных поисковых систем
Из данных о статистике поисковых систем была выбрана самая
популярная на сегодняшний день – Google.com [3]. Система предоставляет
мощнейшие средства поиска информации, отбор по временной шкале и
географическому положению, параметры для более тонкой настройки
поискового ядра. Для решения задачи извлечения информации с разных
4
источников и упаковка данных в специальный формат система может
предложить лишь ручной поочередный поиск, что неудобно и требует
значительное количество времени и участие человека в процессе поиска.
5
2 Основные характеристики поискового запроса
В наши дни поиск информации стал часто-выполняемой функцией.
Построение запроса носит полностью индивидуальных характер для каждого
пользователя и важно учитывать нечеткую структуру задания правил для
поискового ядра.
Для эффективного построения максимально универсальной системы
важно выделить основные возможные характеристики задания поискового
запроса
и
учитывать
возможность
его
дальнейшего
расширения.
Предполагается рассматривать следующие основные свойства поискового
запроса:
– Периодичность запроса:
1) Разовая операция;
2) Регулярные операции по времени или требованию;
– Источник поиска и обработки информации:
1) Статические ресурсы;
2) Динамические ресурсы;
– Критерий выгрузки информации:
1) Выгрузка с авто настройкой;
2) Пользовательские правила выгрузки;
– Правила обработки запросов:
1) Автоматическая обработка;
2) Обработка по явно заданным правилам.
Рассмотрим каждый из критериев более подробно:
2.1 Периодичность запроса
Здесь рассматривается вопрос актуальности информации. Современные
веб-ресурсы часто содержат информацию, которая обновляется регулярно
через довольно короткий промежуток времени. Если есть необходимость
6
поддерживать актуальность получаемой информации, то ставится вопрос о
введении параметра регулярности операции. В таком случае пользователю
предоставляется возможность задать шаблон запроса к поисковому серверу и
указать правила, по которым этот запрос будет выполняться с изменением
лишь некоторых значений.
2.2 Источник поиска и обработки информации
Так как поисковое ядро обрабатывает определенные веб ресурсы для
извлечения информации, то пользователю необходимо определить правила
их получения.
Статические ресурсы – вручную заданные список адресов, по которым будет
осуществляться поиск.
Динамические ресурсы – правила поискового запроса определенного вида,
которые позволяют извлекать адреса в режиме реального времени или же
перед основным поисковым запросом.
2.3 Характеристика выгрузки информации
После завершения работы алгоритмов поиска информации, необходимо
полученные данные упаковать в некоторый удобный для пользователя вид.
Для этих целей удобно использовать некоторый формат, который позволит
описать правила выгрузки информации для каждого запроса независимо.
Однако, синтаксис таких правил должен учитывать предоставленные
сервером возможности хранения. Примером может служить база данных,
файл текстового формата, html-шаблон.
2.4 Правила обработки запросов
Для
большей
универсальности
системы
удобно
использовать
серверный программный интерфейс приложения (server-api), который
позволяет пользователю настраивать алгоритм обработки запроса или же
7
использовать настройки, которые заданы по умолчанию. Для связи
серверного программного интерфейса и запроса на стороне клиента будем
использовать некоторый протокол общения с указанием его версии, чтобы в
случае обновления серверных функций, протокола не допустить ошибку
выполнения запросов.
8
3 Основные требования к системе
После изучения уже имеющихся систем поиска информации при
проектировании поискового сервера были выделены основные требования к
системе, которые в дальнейшем будут поставлены в приоритет.
Все описанные ниже требования составлялись с учетом современных
запросов пользователей, языковых возможностей и доступных технических
средств.
Сформулируем некоторые основные пункты требований к системе:
3.1 Время работы поискового запроса
В зависимости от сложности поискового запроса необходимо выделять
допустимый временной диапазон, в который должна укладываться работа
серверной части. Следует учитывать возможность довольно длительной
работы поискового ядра и предоставить средства для оповещения
пользователей о завершенной работе.
3.2 Удобство организации поисковых правил, формат описания
Формат хранения поисковых запросов нужно выбирать так, чтобы
удовлетворить выполнение следующих пунктов:
– Эффективность обработки запроса сервером;
– Низкая сложность написания запроса;
– Приемлемый размер запроса для передачи его удаленному серверу;
– Возможность расширяемости поисковых правил.
3.3 Надежность работы сервера и обработка исключительных ситуаций
Во время работы сервера могут возникать различного рода ошибки,
исключительные ситуации, которые приведут к аварийному завершению
программы. Для предотвращения таких ситуаций необходимо учитывать все
возможные проблемы, которые могут возникать по различным причинам и
9
обрабатывать
их
таким
образом,
чтобы
работа
сервера
корректно
продолжалась. Также следует внедрить программные средства, которые
позволят получать сообщения об ошибках с необходимой точностью в
зависимости от роли пользователя системы.
Следует предусмотреть проблемы аппаратной части сервера и
разработать сервис проверки и тестирования работы всей системы.
3.4 Модульность системы и возможность расширения
Важно понимать, что со временем система будет подвержена
изменениям и расширению функционала, поэтому при проектировании
серверной части важно учитывать удобство расширяемости системы и
добавление в нее новых методов работы с запросами.
При проектировании будем использовать принципы модульного
программирования.
Модульное программирование – это организация программы как
совокупность независимых блоков, называемых модулями, структура и
поведения которых подчиняются определенным правилам. Использование
модульного
программирования
позволяет
упростить
тестирование
программы и обнаружение ошибок. Аппаратно-зависимые подзадачи могут
быть строго отделены от других подзадач, что улучшает мобильность
создаваемых программ. Для удобства динамического внедрения нового
функционала можно предусмотреть систему внешних модулей на различных
языках, которая позволят без перезапуска сервера учитывать очередное
обновление сервиса.
Модуль – это подпрограмма, обладающая тремя основными атрибутами:
а) модуль выполняет одну или несколько функций;
б) модуль реализует некоторую логику (алгоритм);
в) модуль используется в одном или нескольких контекстах.
10
Принципы модульного программирования позволяют получать программные
комплексы минимальной сложности. Эти принципы следующие:
а) усиление внутренних связей в каждом модуле (иначе принцип
называется повышением прочности модуля);
б) ослабление взаимосвязи между модулями (иначе этот принцип
называется ослаблением сцепления модулей).
Если рассматривать программу как набор предложений, связанных между
собой некоторыми отношениями (как по выполняемым функциям, так и по
обрабатываемым
данным),
то
применение
принципов
модульного
программирования означает, что необходимо распределить предложения
программы по отдельным модулям так, чтобы предложения внутри каждого
модуля были тесно связаны, а связь между любыми двумя модулями была
минимальной [4].
3.5 Универсальность кода под различные платформы
Для независимого запуска серверной части на любой платформе
следует подобрать программные инструменты соответствующим образом и
использовать необходимые функции, который не зависят от платформы и
выполняются одинаково на любом устройстве, которое может быть
использовано. В таком случае разработки и отладка программы будет
осуществляться также на любой платформе, где доступны соответствующие
инструменты.
11
4 Обоснование выбора инструментария разработки
4.1 Серверная часть
Для программной реализации серверной части выбор стоял между
несколькими языками: Java, Goland, C++, Python. Каждый инструмент из
списка имеет свои достоинства и недостатки, поэтому для оптимального
выбора был проведен сравнительный анализ описанных языков. После
изучения уже существующих систем были выявлены основные возможности
языков программирования, которые максимально эффективно позволят
построить поисковый сервер:
а) Типизация;
б) Ручное управление памятью;
в) Определение типов в Runtime;
г) Поддержка многопоточности;
д) Удобство интеграции сторонних расширений.
Кроме того, следует учитывать удобство и скорость разработки, а также
наличие инструментов тестирования и отладки программы или отдельной ее
части.
Результаты
анализа
приведены
в
сравнительной
таблице.
Таблица 1 – Сравнение серверных языков программирования
Возможности
Типизация
Ручное
управление
памятью
Определение
типов в Runtime
Поддержка
многопоточности
Удобство
интеграции
сторонних
расширений
Языки
Java
Статическая
Нет
Goland
C++
Статическая Статическая
Нет
Да
Python
Динамическая
Нет
Да
Нет
Нет/Да
Да
Да
Да
Да
Да
Да
Нет/Да
Нет
Да
12
На основании описанных выше необходимых возможностей языка
программирования был проведен сравнительный анализ и сделаны выводы
на основании результатов, представленных в таблице выше.
Для программной реализации был выбрал язык программирования
Java, так как он подходит для данной задачи лучше, чем остальные языки.
Кроме того, для работы сервера необходима поддержка RestApi, а значит
необходим удобный инструмент для внедрения сторонних зависимостей в
проект.
Java поддерживает автоматические сборщики проектов, которые
позволят использовать сторонние расширения максимально эффективно.
Для хранения и обработки запросов необходимо выбрать удобный
тестовый формат для хранения данных. Был проверен сравнительный анализ
среди самых популярных инструментов – JSON, XML, YAML, INI, Tree.
Оценки характеристик ведутся по пятибалльной шкале.
Таблица 2 – Сравнение текстовых форматов хранения данных
Характеристики
Человекопонятность
Удобство
редактирования
Произвольная
иерархия
Простота реализации
Скорость
парсинга/сериализации
Размер в
сериализованном виде
Поддержка поточной
обработки
Бинарная безопасность
Распространённость
Поддержка
редакторами
Поддержка языками
программирования
JSON
3
3
XML
1
1
Форматы
YAML
4
4
3
3
3
1
5
3
3
2
1
1
1
5
5
5
5
3
1
4
5
5
0
0
5
5
5
3
5
5
0
5
5
0
3
3
0
3
5
5
0
1
5
5
3
5
1
13
INI
5
5
Tree
5
5
Заметим, что языки программирования Java и Python удовлетворяют
всем необходимым требованиям, но Java помимо прочих характеристик
имеет статическую типизацию, что обеспечивает более удобную отладку для
исправления ошибок.
Для программной реализации поискового сервера нами выбран следующий
инструментарий.
Java – сильно типизированный объектно-ориентированный язык
программирования. Приложения Java обычно транслируются в специальный
байт-код, поэтому они могут работать на любой компьютерной архитектуре,
с помощью виртуальной Java-машины.
JSON – текстовый формат обмена данными, основанный на JavaScript.
За счет своей лаконичности по сравнению с XML, формат JSON может быть
более подходящим для сериализации сложных структур.
MessagePack - это эффективный формат бинарной сериализации. Он
также дает возможность обмена данными между множеством языков как
JSON. Но быстрее и компактнее. Компактные числа кодируются как байт, и
обычно
короче,
чем
строковая
запись
и
требуют
лишь
одного
дополнительного байта для хранения в таком виде.
PostgreSQL – свободная объектно-реляционная система управления
базами данных (СУБД). Базируется на языке SQL и поддерживает многие из
возможностей стандарта.
Redis – сетевое журналируемое хранилище данных типа ключ-значения
с открытым исходным кодом. Нереляционная высокопроизводительная
СУБД, хранит базу данных в оперативной памяти, снабжена механизмами
снимком и журналирования для обеспечения постоянного хранения на диске.
4.2 Пользовательский интерфейс
В следующем семестре планируется реализация пользовательского веб
интерфейса для взаимодействия с поисковым сервером.
14
Для задачи написания серверной части веб сайта выбор стоял между
следующими языками: PHP, Ruby, Python. Все три языка имеют широкое
применение, стабильную работу и большое количество модулей, написанных
сторонними разработчиками. PHP и Ruby изначально были предназначены
только для веб программирования и поэтому более приспособлены к задач
данной области.
Для программной реализации пользовательского интерфейса ресурса нами
выбран следующий инструментарий.
HTML (от англ. HyperText Markup Language — «язык гипертекстовой
разметки») — стандартный язык разметки документов во Всемирной
паутине. Большинство веб-страниц содержат описание разметки на языке
HTML. Язык HTML интерпретируется браузерами и отображается в виде
документа в удобной для человека форме.
Язык HTML создавался как язык для обмена научной и технической
документацией, пригодный для использования людьми, не являющимися
специалистами в области вёрстки.
С помощью HTML можно легко создать относительно простой, но
красиво оформленный документ. Помимо упрощения структуры документа,
в HTML внесена поддержка гипертекста.
CSS (англ. Cascading Style Sheets — «каскадные таблицы стилей») —
формальный язык описания внешнего вида документа, написанного с
использованием языка разметки. Преимущественно используется как
средство описания, оформления внешнего вида веб-страниц, написанных с
помощью языков разметки HTML и XHTML.
CSS используется создателями веб-страниц для задания цветов,
шрифтов, расположения отдельных блоков и других аспектов представления
внешнего вида этих веб-страниц. Основной целью разработки CSS являлось
разделение описания логической структуры веб-страницы от описания
внешнего вида этой веб-страницы. Такое разделение может увеличить
15
доступность документа, предоставить большую гибкость и возможность
управления
его
представлением,
а
также
уменьшить
сложность
и
повторяемость в структурном содержимом.
JavaScript
—
прототипно-ориентированный
сценарный
язык
программирования. JavaScript обычно используется как встраиваемый язык
для программного доступа к объектам приложений. Наиболее широкое
применение находит в браузерах как язык сценариев для придания
интерактивности веб-страницам.
JavaScript
является
объектно-ориентированным
языком,
но
используемое в языке прототипирование обуславливает отличия в работе с
объектами по сравнению с традиционными класс-ориентированными
языками.
Кроме
того,
JavaScript
имеет
ряд
свойств,
присущих
функциональным языкам.
jQuery – библиотека JavaScript, фокусирующаяся на взаимодействии
JavaScript и HTML. Библиотека jQuery помогает легко обращаться к
атрибутам и содержимому элементов DOM и манипулировать ими. jQuery
позволяет создавать анимацию и обработчики событий. Данная библиотека
работает со всеми браузерами, таким образом, не нужно беспокоиться о
кроссбраузерной совместимости JavaScript кода.
PHP (англ. PHP: Hypertext Preprocessor — «PHP: препроцессор
гипертекста) — скриптовый язык программирования общего назначения,
интенсивно применяемый для разработки веб-приложений.
В области программирования для сети Интернет, PHP — один из
популярных
сценарных языков благодаря
своей простоте, скорости
выполнения, богатой функциональности и кроссплатформенности. В нем
сочетаются две самые популярные парадигмы программирования
–
объектная и процедурная. Большой плюс языка PHP состоит в том, что PHPкод можно внедрять непосредственно в HTML-файлы.
16
Популярность в области построения веб-сайтов определяется наличием
большого набора встроенных средств для разработки веб-приложений.
Основные из них:
– автоматическое извлечение POST и GET-параметров, а также
переменных окружения веб-сервера в предопределённые массивы;
–
взаимодействие
с
большим
количеством
различных
систем
управления базами данных (в том числе MySQL);
– обработка файлов, загружаемых на сервер;
– работа с cookies и сессиями.
PHP-код программы выполняется на стороне сервера. После того, как
пользователь совершил на сайте некое действие, например, клик по ссылке в
меню, с целью перейти на другую страницу сайта, браузер посылает запрос
серверу на соответствующую страницу с PHP-кодом. Далее, PHP-код
обрабатывается интерпретатором PHP и генерируется HTML-код, который
возвращается серверу. Сервер в свою очередь, передаёт этот HTML-код
обратно браузеру. В результате пользователь видит отображение в браузере
новой страницы, имеющей свой HTML-код. При просмотре же исходного
кода этой страницы виден будет только HTML-код, а PHP-код остается
недоступен для просмотра [5].
MySQL – полнофункциональная свободно распространяемая система
управления реляционными базами данных. Это наиболее распространённая
открытая СУБД в мире. Она легко инсталлируется в любой системе и не
требует таких огромных ресурсов, как более крупные коммерческие СУБД,
например, продукты Oracle и IBM, и с ней легко взаимодействовать. Стоит
отметить её хорошую документированность, а также скорость работы. В
нашем случае особо важна хорошо проработанная интеграция с PHP.
AngularJS – JavaScript фреймворк с открытым исходным кодом.
Предназначен для разработки одностраничных приложений. Его цель –
расширение браузерных приложений на основе MVC-шаблона, а также
упрощение тестирования и разработки.
17
5 Проектирование серверной части приложения
Заметим, что сервер должен уметь работать с некоторым количеством
запросов одновременно. Кроме того, на каждого пользователя следует
выделить независимое пространство в памяти, которое будет использоваться
для хранения служебной информации и для быстрой обработки тех или иных
операций.
Так как вся логика работы сервера будет зависеть от запросов, которые
отправят пользователи, следует заранее описать все его этапы обработки.
5.1 Обработка запроса
а) Получение запроса сервером
Эта программная часть должна поддерживать получение запросов в
многопоточном режиме и передавать их в дальнейшую обработку
следующим модулям. Получение любых сетевых сообщений возможны
только по тем протоколам, которые изначально будут выбраны для работы.
В нашем случае используется архитектура RestAPI.
REST (Representational state transfer) – это стиль архитектуры
программного обеспечения для распределенных систем, таких как World
Wide Web, который, как правило, используется для построения веб-служб.
В зависимости от необходимых требований к серверу методы RestAPI
архитектуры будем разделять на POST (для отправки поискового запроса) и
GET (для других операций). Так как любой запрос связан с определенным
пользователем, то будем учитывать процесс авторизации и получением
пользовательских данных из базы данных. Для шифрования данных будем
использовать алгоритм MD5. Процесс запроса к серверу будем делать на
авторизацию с получением соответствующего токена, который будет
действителен некоторый ограниченный период времени и собственно запрос
к серверу с передачей связки из логина, токена. Сервер, выполняя процесс
18
аунтификации, либо запретит выполнение запроса, либо определит права
пользователя и передаст управление следующему серверному модулю с
соответствующими данными аккаунта, полученными из базы данных.
б) Разбор запроса серверным парсером
На этом этапе полученный запрос в формате json необходимо
обработать и преобразовать в объектную модель для дальнейшей удобной
обработки. Для этих целей выделим отдельный компонент – QueryParser.
Рассмотрим его основные обязанности.
– Преобразование Json-текста в объектную модель;
– Поддержка новых форматов Json-запроса;
– Обработка критических ошибок и остановка дальнейшей обработки
запроса;
– Обработка нетипичных ситуаций и предупреждение об этом.
После обработки QueryParser должен вернуть либо готовый для работы
объект запроса, либо сообщение об ошибке.
в) Обработка объект-запроса
Выделим новую сущность
для
обработки
объект-запроса
–
QueryHandler. Ее основная задача – это разделение процесса обработки на
несколько потоков, их контроль и работа с другими серверными модулями по
необходимости (Например, сохранение некоторых пользовательских данных
в базу).
Опишем методы объекта QueryHandler.
– runQuery - запускает запрос в отдельном потоке и присваивает ему
уникальный идентификатор;
– killQuery – принудительное завершение запроса по его уникальному
идентификатору (Полезно в случае критических ситуаций) ;
– getStatus – вернет статус запроса по его уникальному идентификатору.
Рассмотрим различные варианты статуса:
1) InWork – запрос на данный момент обрабатывается сервером;
2) Stopped – запрос закончил обработку успешно;
19
3) Error - запрос закончил работы с ошибкой;
4) NotFound – запрос не найден.
Кроме методов работы с запросами объект будет хранить всю информацию о
работающий и завершенных потоках и передавать необходимые данные
системе записи логов для удобной дальнейшей отладки.
5.2 Синтаксис построение поискового запроса
Так как запрос может иметь различную структуры в зависимости от
запроса, который посылает пользователь, важно выделить основные правила
формирования запроса. Определенные правила необходимы в первую
очередь для серверной обработки и преобразования json-текста к объектному
виду.
Под правилами запроса будем подразумевать название json секций, их
значений и требования к их определению.
Опишем различные варианты определения секций и их предназначение.
– resourceMode – источник поиска и обработки (см. пункт 1 – основные
критерии поискового запроса):
1) StaticMode;
2) DynamicMode.
– resourcesData – список статично заданных адресов, если resourceMode
определен как StaticMode и список правил получения запроса для
DynamicMode;
– parsingRules – правила поиска информации:
1) xpathRules – правила, основанные на поиске элементов по xpath
значению на определенном ресурсе:
а) xpath – значение xpath;
б) type – Тип получение данных:
– Text – для текстовых данных;
– Attr – для получения html атрибута;
20
в) attrValue
–
необязательный
параметр
для
указания
атрибуты поиска.
2) classidRules – правила, основанные на поиске элементов по cssклассу или css-идентификатору:
а) class – значение класса;
б) id – значение id;
в) type - Тип получение данных:
– Text – для текстовых данных;
– Attr – для получения html атрибута;
г) attrValue
–
необязательный
параметр
для
указания
атрибуты поиска.
– serverRules – некоторые параметры для контролирования процесса
обработки запроса на сервере:
1) priority – приоритет обработки запроса (Может игнорироваться в
случае недостаточных прав пользователя);
2) threadNum – попытка указать серверу на сколько потоков делить
обработку (Может игнорироваться в случае недостаточных прав
пользователя);
3) Mode – опция обработки запроса:
а) once – единоразовая обработка запроса;
б) regular – Обработка запроса по таймеру или некоторому
событию:
– timer – время повторного запуска;
– action – описание события для повторной обработки
запроса;
4) proxy – опция для задания прокси серверов;
5) timeDelay – временная задержка между запросами для избегания
блокировки
со
стороны
сторонних
серверов
(Может
игнорироваться в случае недостаточных прав пользователя).
21
Данная структура Json-запроса переводится в аналогичную структуру
объектного типа и в дальнейшем используется для обработки. Приведем
пример простого запроса:
{
"resourcesMode": "StaticMode",
"resourcesData": [
"https://www.kinopoisk.ru/news/3077443/"
],
"parsingRules": {
"xpathRules" : [
{
"xpath": "//*[@id='newsTopBox']/div[1]/a",
"type": "Text",
"attrValue": "href"
}
]
}
}
Запрос имеет один статический ресурс и одно просто правило для
обработки веб-страницы.
Для проведения тестов была сделана веб-форма для отправки запросов
на сервер посредством POST метода.
22
Рисунок 1 – Интерфейс для отправки тестовых запросов
После написания запроса и нажатия кнопки отправки, выполняется javascript
скрипт с ajax запросом к удаленному серверу. Так как данная форма сделана
исключительно для тестирования, веб-сервер и сервер приложения находятся
на одном хосте и доступны друг для друга по адресу http://localhost:8080/.
23
ЗАКЛЮЧЕНИЕ
Цель курсовой работы – проектирование расширяемого поискового
сервера – достигнута.
В рамках курсовой работы изучены принципы построения приложений с
использованием клиент-серверной архитектуры, требования к ним, а также
особенности передачи информации средствами архитектурного стиля
RestAPI.
В курсовой работе предлагается веб форма для взаимодействия с
удаленным поисковым сервером, которая позволяет отправлять тестовые
запросы без предварительной авторизации и часть серверного ядра для
поиска информации по определенным правилам.
При разработке применялся локальный веб-сервер Apache Tomcat
версии 8.5.24, браузер Mozilla Firefox и языки Java, HTML, CSS, JavaScript.
В
дальнейшем
планируется
доработка
серверной
части,
проектирование базы данных для хранения пользовательской и системной
информации, реализация веб-интерфейса для взаимодействия с поисковым
сервером посредством сетевых коммуникаций.
24
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1
Lyman P., Varian H.R. How much information. Release of the
University of California. Oct.27, 2003
2
Jawadekar, Waman S (2011), "8. Knowledge Management: Tools and
Technology", Knowledge Management: Text & Cases, New Delhi: Tata McGrawHill Education Private Ltd, p. 278, ISBN 978-0-07-07-0086-4, retrieved November
23, 2012
3
Статистические данные Яндекс.Метрика, SpyLog/Openstat,
LiveInternet, Hotlog, Рейтинг@Mail.ru на 09.11.2017 г. 10:02:09
4
Принципы модульного программирования - https://studfiles.net на
15.12.2017
5
Маклафлин Б. PHP и MySQL. Исчерпывающее руководство. 2-е
изд. - СПб.: Питер, 2014. – 543 с.
25