Введение 6
1 Характеристика организации и экосистемы сервисов 8
1.1 Характеристика организации 8
1.2 Анализ экосистемы сервисов с точки зрения архитектуры 8
1.3 Микросервисная и реактивная архитектуры 12
1.4 Постановка задачи на разработку микросервиса 15
2 Построение микросервиса 17
2.1 Требования к разрабатываемому микросервису 17
2.2 Проектирование архитектуры микросервиса, основанного на
командах и событиях 18
2.3 Описание инструмента разработки реактивных микросервисов . 24
2.4 Доставка сообщений между сервисами экосистемы 29
2.5 Разработка диаграммы классов микросервиса 35
2.6 Архитектура микросервиса в контексте интеграции в
существующую экосистему 38
3 Разработка микросервиса 40
3.1 Выбор средств реализации микросервиса 40
3.2 Реализация основных модулей микросервиса 43
3.3 Тестирование работоспособности микросервиса 47
Заключение 50
Список используемых источников 52
Приложение А Классы, реализующие интерфейс Command 55
Приложение Б Архитектура экосистемы сервисов 56
Приложение В Реализация команд, обрабатываемых микросервисом . 58
Приложение Г Реализация событий сервиса 61
Приложение Д Фрагмент кода с методами и запросами сервиса 67
Приложение Е Фрагмент кода с реализацией методов API 68
Приложение Ж Подключение базы данных к сервису 70
Приложение И Конфигурация брокера сообщений Apache Kafka 71
Широкое распространение информационных технологий способствует их скорейшему развитию, еще 15 лет назад мы могли видеть приложения, запущенные на нескольких серверах, которые обрабатывали гигабайты данных, находящихся в состоянии покоя. Нередким был случай, когда при попытке получения доступа к какому-либо ресурсу вы могли наблюдать сообщение о недоступности сервиса и ведущихся технических работах.
В наше время люди слишком сильно полагаются на различные технологии в своей повседневной жизни, поэтому современные системы должны удовлетворять требованиям современного пользователя, быть отзывчивыми и отказоустойчивыми. Как недоступность сервисов в течение пары часов повлияет на вашу жизнь? Это может не оказать существенного влияния на вас, если вы не пользуетесь веб-сервисами на постоянной основе, но что будет, если поисковая система, такая как Google, будет отвечать на ваш запрос не за секунду, а за тридцать секунд?
Пользователи неотзывчивого программного обеспечения со временем устанут от подобных проблем и начнут смотреть в сторону конкурентов. Для решения подобных проблем существуют микросервисы на основе реактивной архитектуры.
Актуальность данной работы заключается в необходимости отказа от классических принципов построения информационных систем в пользу современных архитектурных решений, позволяющих разрабатывать высоконагруженные, отказоустойчивые, масштабируемые и отзывчивые системы.
Целью данной выпускной квалификационной работы является модернизация архитектуры, существующей распределенной информационной системы путем внедрения микросервисных технологий на основе реактивной архитектуры, что послужит основой для последующего полного перехода к микросервисной архитектуре.
Для достижения поставленной цели необходимо выполнить промежуточные задачи:
- изучить текущее архитектурное решение экосистемы сервисов в ООО «Квартплата 24»;
- описать альтернативное архитектурное решение в виде микросервисной и реактивной архитектур;
- разработать микросервис, соблюдая принципы построения реактивных микросервисов;
Объект исследования - экосистема сервисов в ООО «Квартплата 24».
Предметом исследования является построение распределенной информационной системой, разделенной на модули-микросервисы, каждый из модулей сконцентрирован не на решении комплекса задач, а одной конкретной бизнес-задаче.
Методы исследования - микросервисные и реактивные архитектуры, построение реактивных микросервисов.
Первая глава содержит описание экосистемы сервисов в ООО «Квартплата 24», характеристику текущего архитектурного решения и преимуществ микросервисной, реактивной архитектур.
Вторая глава посвящена построению микросервисного приложения на основе команд и событий, а также решению проблемы доставки данных между микросервисами.
В третьей главе описаны инструменты разработки и процесс разработки микросервиса, тестирование работоспособности.
Результаты выполнения данной выпускной квалификационной работы имеют практический интерес и могут быть рекомендованы разработчикам высоконагруженных информационных систем.
Данная выпускная квалификационная работа посвящена построению высоконагруженных, отказоустойчивых распределенных систем при помощи микросервисных технологий, основанных на реактивной архитектуре.
Соблюдение принципов построения микросервисов, основывающихся на принципах реактивных систем, позволяют разрабатывать информационные системы, соответствующие требованиям современного пользователя.
В процессе работы над выпускной квалификационной работой были решены следующие задачи:
Произведен анализ и дана характеристика существующей распределенной информационной системы, представляющую из себя группу тесно интегрированных сервисов, являющихся приложениями, построенными по принципам монолитной архитектуры. Описаны преимущества и недостатки монолитной архитектуры.
Рассмотрен альтернативный вариант проектирования приложений, описаны основные принципы построения реактивных систем, приведены преимущества микросервисов над монолитами.
Подробно разобраны основные требования к разрабатываемому микросервису. Построена архитектура разрабатываемого микросервиса на основе шаблона источника событий и фреймворка Lagom, служащего для построения реактивных микросервисов. Решена проблема передачи данных между сервисами экосистемы, в результате сравнительного анализа в качестве инструмента для доставки сообщений был выбран брокер сообщений Apache Kafka, с помощью которого разработанный микросервис был интегрирован в существующую информационную распределенную систему. Были описаны алгоритмы, по которым обрабатываются полученные сервисом команды. Представлены основные команды и события разрабатываемого сервиса, диаграмма классов-команд, архитектура распределенной информационной системы с интегрированным в нее микросервисом.
Основываясь на требованиях к данной выпускной квалификационной работе, был разработан гибкий, отказоустойчивый, горизонтально масштабируемый, реактивный микросервис, выполняющий функцию создания, изменения и закрытия договоров компании ООО «Квартплата 24» с организациями клиентами и платежными системами. Языком программирования для реализации кодовой базы микросервиса был выбран Scala.
Выполнено тестирование основного функционала разработанного микросервиса, а именно создание договора, изменение договора.
Результаты выполнения данной выпускной квалификационной работы имеют практический интерес и могут быть рекомендованы разработчикам высоконагруженных, производительных, отказоустойчивых информационных систем.