Введение 5
1. Постановка задачи 6
2. Обзор 7
2.1. Распределенная система 7
2.1.1. Микросервисная архитектура 7
2.1.2. Межпроцессное взаимодействие 9
2.2. Кэширование 11
2.2.1. Политика записи 11
2.2.2. Политика промаха записи 12
2.2.3. Согласованность кэша 13
2.3. Кластеризация 14
2.4. Высокопроизводительные вычисления 15
2.5. Используемые технологии 16
2.5.1. Java 16
2.5.2. Spring Framework 16
2.5.3. PostgreSQL 17
2.5.4. Apache Ignite 18
3. Архитектура системы 21
3.1. Функциональные требования к системе 21
3.2. Модули системы 21
3.3. Описание API 23
3.3.1. Схема обработки задания 23
3.3.2. Схема обработки команд 24
3.3.3. Схема обработки запросов 24
4. Реализация системы 25
4.1. Описание API заданий 25
4.1.1. Описание запроса на создание задания 25
4.1.2. Описание ответа о выполненном задании 27
4.2. Описание API команд 27
4.3. Описание API запросов 29
4.4. Модуль взаимодействия с клиентом 30
4.5. Модуль обработки аудиофайлов 30
4.5.1. Задания voice модуля 30
4.5.2. Команды voice модуля 32
4.5.3. Запросы voice модуля 33
4.5.4. Работа с кэшом 34
4.5.4.1. Горячие списки 34
4.5.4.2. База идентификации 35
5. Тестирование 36
Заключение 38
Список литературы 39
Когда-то люди писали программы, которые выполнялись на одной машине и к которым также осуществлялся доступ с этой машины. Сейчас почти каждое приложение представляет собой распределенную систему, работающую на нескольких машинах и доступную множеству пользователей со всего мира.
Распределенная система — это совокупность автономных вычислительных элементов, которая представляется своим пользователям как единая связная система. На данный момент почти каждый разработчик является разработчиком или потребителем (или и тем и другим) распределенных систем [14].
С развитием технологий количество пользователей, количество данных, а также требования по скорости работы приложений растут. Для удовлетворения данных условий система должна быть масштабируемой. Следовательно, любое приложение, которое сейчас разрабатывается, должно создаваться с расчетом на масштабирование в ответ на увеличивающийся спрос. Эти ограничения и требования означают, что почти каждое разрабатываемое приложение, будь то мобильная клиентская программа или сервис обработки платежей, должно быть распределенной системой [8].
Таким образом, актуальной является задача создания системы распределенной обработки аудиофайлов, позволяющей создавать модели и сравнивать их между собой.
В ходе данной работы были достигнуты следующие результаты:
• Исследована предметная область.
• Спроектирована и разработана распределенная система, позволяющая
— построить голосовую модель по аудиофайлу;
— сравнивать между уже построенными голосовыми моделями;
— выполнять задания, исходя из их приоритета.
• Разработан сервис взаимодействия системы с внешними клиентами, позволяющий
— отправлять запросы на обработку голосовой модели;
— получать информацию об уже построенных моделях;
— получать информацию о кластере.
• Проведено тестирование и апробация реализованной системы.
В дальнейшем планируется добавить сервис взаимодействия системы с внешними клиентами через AMQ, а также добавить в систему модули обработки изображений, видеофайлов.