Проектирование архитектуры и моделирование отказов при разработке серверного программного обеспечения системы управления задачами разработки инженерно-проектной документации
ВВЕДЕНИЕ 5
1 Конструкторская часть 7
1.1 Проектирование серверного ПО на основе микросервисной архитектуры 7
1.1.1. Архитектура доступа к данным 8
1.1.2. Проектирование микросервисов на основе многопоточности 10
1.1.3. Обзор микросервисов 12
1.1.3.1. Микросервис mpserver 12
1.1.3.2. Микросервис mpj ournalserver 13
1.1.3.3. Микросервис mpfileserver 13
1.2. Применение протоколов сетевого взаимодействия в серверном ПО 15
1.2.1. Организация потоков сетевого взаимодействия на основе HTTP API 15
1.2.2. Недостатки схемы взаимодействия на основе HTTP API 21
1.2.3. Внедрение потоков сетевого взаимодействия на основе протокола WebSocket 22
1.3. Реализация механизма оповещений на основе протокола WebSocket 28
1.3.1. Разработка микросервиса mprouter 28
1.3.2. Внедрение поддержки механизма оповещения в существующие микросервисы...31
1.3.3. Протокол обмена данными между микросервисами в рамках механизма
оповещения 35
1.4. Преимущества использования гибридной схемы сетевого взаимодействия 37
1.5. Сравнительный анализ архитектур серверного ПО с точки зрения устойчивости к
нагрузкам 38
1.5.1. Постановка задачи сравнительного анализа 38
1.5.2. Разработка классов сущностей имитационной модели ИС 39
1.5.2.1. Класс Request 41
1.5.2.2. Класс Client 43
1.5.2.3. Класс Device 44
1.5.2.4. Класс ServerDevice 44
1.5.2.5. Класс Nginx 45
1.5.2.6. Класс Simulation 46
1.5.3. Построение имитационных моделей на основе разработанных классов 50
1.5.4. Сбор исходных данных для моделирования 55
1.5.5. Определение достоверности результатов моделирования 60
1.5.6. Сравнительный анализ результатов моделирования 61
2. Технологическая часть 64
2.1. Обзор протокола HTTP 64
2.2. Обзор протокола WebSocket 66
2.3. Обзор инструментов разработки серверного ПО 69
2.3.1. Использование языка С++ в разработке высоконагруженных приложений 69
2.3.2. Использование фреймворка Ultimate++ в разработке 72
2.3.2.1.Обзор класса TcpSocket 73
2.3.2.2.Обзор класса HttpRequest 75
2.3.2.3.Обзор класса WebSocket 75
2.4. HTTP-сервер Nginx 77
2.5. Обзор архитектур серверного ПО 80
2.5.1. Монолитная архитектура 80
2.5.2. Микросервисная архитектура 82
ЗАКЛЮЧЕНИЕ 86
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 87
ПРИЛОЖЕНИЕ А 88
В настоящее время активно развивается такая область информационных технологий, как исЛ-технологии. Существует большое количество исЛ-приложений, представляющих собой информационные системы в различных предметных областях. Это, как правило, многозвенные приложения, в которых взаимодействия между клиентской и серверной частями происходит на основе сетевых протоколов. Одной из основных проблем при создании таких систем является проблема организации эффективной и надежной работы серверной части с большим количеством клиентов.
Наиболее распространенным подходом к проектированию серверного ПО является организация монолитной архитектуры программного обеспечения. Такой стиль проектирования позволяет организовать эффективное взаимодействие между компонентами ПО, однако имеет ряд проблем, среди которых можно выделить рост уровня сложности в сопровождении кода ПО по мере развития продукта, неэффективное использование метода горизонтального масштабирования, повышенные требования к организации отказоустойчивости системы.
В противовес монолитному стилю проектирования в настоящее время активно выступает микросервисный стиль. Микросервисная архитектура, как правило, подразумевает наличие задержек во взаимодействии между компонентами, но позволяет снизить требования к отказоустойчивости системы за счет изоляции компонентов ПО. В добавок к этому, архитектура хорошо масштабируется на кластере серверов, что способствует повышению производительности системы.
Целью данной выпускной квалификационной работы является исследование двух вопросов:
1. Какая из представленных выше архитектур серверного ПО применительно к разрабатываемой информационной системе является наиболее устойчивой к отказам в обслуживании клиентских запросов?
2. Какие изменения в существующей архитектуре серверного ПО поспособствуют повышению производительности при обработке клиентских запросов?
Для изучения первого вопроса были разработаны дискретно-событийные имитационные модели серверного ПО, спроектированного в микросервисном и монолитном стилях. Выбор был сделан в пользу реализации имитационных моделей, поскольку аналитические решения задачи моделирования представляются более сложными в виду стохастической природы процессов, протекающих в исследуемой системе. К тому же, имитационные модели не имеют существенных ограничений, влияющих на достоверность результатов моделирования.
Сравнительный анализ результатов моделирования дает представление о том, какая из моделей является наиболее устойчивой к отказам. Сравнение результатов моделирования со статистическими данными о работе реального серверного ПО позволяет определить, насколько корректно составлены модели. Результаты моделирования позволяют оценить, насколько правильным является выбор, сделанный в пользу реализации серверного ПО на основе микросервисной архитектуры.
Исследование второго вопроса заключается в анализе схемы сетевого взаимодействия между клиентской и серверной частями, а также внутри серверной инфраструктуры. Данная схема основана на протоколе сетевого взаимодействия HTTP.В данной схеме были выделены недостатки, препятствующие эффективному использованию ресурсов сервера программным обеспечением для обработки клиентских запросов. Для устранения недостатков была предложена и реализована новая схема сетевого взаимодействия, особенностью которых является наличие персистентных сетевых соединений на основе протокола WebSocketкак внутри серверной инфраструктуры, так и между клиентской и серверной частями.
Данная выпускная квалификационная работа является результатом систематизации знаний, полученных при исследовании вопросов о подходе к проектированию и оптимизации серверного ПО.
В результате сравнительного анализа дискретно-событийных имитационных моделей серверного ПО на основе монолитной и микросервисной архитектур был сделан вывод о том, что в контексте разрабатываемого приложения реализация микросервисной архитектуры ПО является более устойчивой к отказам в обслуживании клиентских запросов.
На основе сравнения результатов моделирования работы микросервисного ПО со статистическими данными о работе реального серверного ПО был сделан вывод о том, что модель корректно отражает процессы, протекающие на серверной части разрабатываемого приложения, поэтому может считаться достоверной. Погрешность результатов моделирования не превышает 9.5%.
В существующее серверное ПО были внедрены изменения, касающиеся схемы сетевого взаимодействия в серверной инфраструктуре. Как результат, на клиентской части отпала необходимость в генерации большого количества HTTP-запросов на синхронизацию состояния сущностей ИС, появилась возможность для более эффективной реализации системы уведомлений. На серверной части уменьшилось общее число неэффективных входящих HTTP-запросов, большая часть интенсивного сетевого трафика с оповещениями теперь проходит через персистентные WebSocket-соединения. Вопрос о том, насколько эффективной является новая схема взаимодействия по отношению к предыдущей, в настоящее время исследуется, поэтому не рассматривается в данной выпускной квалификационной работе. В частности, разрабатывается новая имитационная модель, отражающая работу серверного ПО на основе микросервисной архитектуры с гибридной схемой сетевого взаимодействия.
В ходе выполнения работы были получены знания о сетевых протоколах обмена данными, об устройстве ядра операционной системы UNIXкасательно организации сетевой инфраструктуры; были получены некоторые сведения из теории массового обслуживания касательно организации систем массового обслуживания; были усовершенствованы навыки программирования на объектно-ориентированном языке высокого уровня C++ с использованием фреймворка Ultimate+ + ;были получены навыки работы с некоторыми утилитами командной строки в операционной системе FreeBSD.
1. Голуб, А.И. Правила программирования на С и C++ / А.И. Голуб. — 2-е изд. — М.: Бином-Пресс, 2001. — 171 с.
2. Страуструп, Б. Язык программирования C++ / Б. Страуструп. — 4-е изд. — М.: Бином, 2015. — 1136 с.
3. Айвалиотис, Д. Администрирование сервера NGINX / Д. Айвалиотис. — М.: ДМК Пресс, 2013. — 288с.: ил.
4. Кельтон, В. Имитационное моделирование / В. Кельтон, А. Лоу. — 3-е изд. — СПб.: Издательская группа BHV, 2004. — 847 с.: ил.
5. Таненбаум, Э. Компьютерные сети / Э. Таненбаум, Д. Уэзеролл. — 5-е изд. — СПб.: Питер, 2016. — 960с.: ил.
6. Стивенс, Р. TCP/IP Illustrated: the protocols/ Р. Стивенс. — СПб.: БХВ-Петербург, 2003. — 338с.:ил.
7. Документация Ultimate++[Электронный ресурс] / https://www.ultimatepp.org/
8. Документация FreeBSD Handbook[Электронный ресурс] / https://www.freebsd.org/doc/handbook/
9. Электронный справочник FreeBSD Manual Pages[Электронный ресурс] / https://www. freebsd.org/cgi/man.cgi
10. Протокол WebSocket[Электронный ресурс] /https://en.wikipedia.org/wiki/WebSocket
11. Протокол HTTP[Электронный ресурс] / https://en.wikipedia.org/wiki/HTTP