|
|
|
# 1 Архитектура сервиса
|
|
|
|
## 1.1 Описание архитектуры приложения
|
|
|
|
Архитектура приложения представляет собой набор микросервисов, общающихся через внутреннюю сеть по протоколам HTTP/REST. Каждый микросервис выполняет определенную задачу – сбор обратной связи, обработка данных одного сервиса Цифрового МИЭМа, предоставление API внешним сервисам. Схема взаимодействия микросервисов представлена на рисунке.
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
Каждый прямоугольник на рисунке 2 представляет собой отдельный Docker контейнер. Границей приложения является пунктирная линия. Все контейнеры запускаются и управляются через Docker Compose.
|
|
|
|
|
|
|
|
За счет использования различных вариантов docker-compose.yml файлов возможно создание нескольких вариантов конфигураций для запуска приложения. В свою очередь, использование контейнерной виртуализации Docker позволяет снизить количество проблемных ситуаций при развертывании приложения на серверах, так как все приложение работает в изолированной, заранее подготовленной и настроенной виртуальной среде.
|
|
|
|
|
|
|
|
Красным прямоугольником обозначен главный контейнер – «Competence Search». Это HTTP/REST сервер проекта, распространяющий публичный REST API. Он принимает извне поисковые запросы, затем делегирует исполнение запросов микросервисам-обработчикам, собирает их ответ, обрабатывает и выдает результат поиска обратно. Данный микросервис также занимается приемом запросов на сохранение обратной связи, обработку этих запросов он делегирует микросервису «Gtable».
|
|
|
|
|
|
|
|
Фиолетовым прямоугольником обозначен микросервис «Zulip bot». Это чат-бот в корпоративном чате Zulip, который является интерфейсом для взаимодействия с сервисом для обычных пользователей. Данный микросервис получает всю необходимую информацию в процессе взаимодействия с микросервисом «Competence Search» по открытому REST API.
|
|
|
|
|
|
|
|
За счет наличия открытого API, сервис может быть использован и другими сервисами, позволяя интегрировать функционал данного приложения в другие сервисы. Данная особенность отражена на рисунке 12 в виде облака «External service» в правой части.
|
|
|
|
|
|
|
|
В нижней части рисунка располагаются три контейнера. Каждый из них представляет собой микросервис-обработчик, который обрабатывает данные из одного сервиса. Внутри этих контейнеров располагаются два процесса, работающих параллельно в одном контейнере.
|
|
|
|
|
|
|
|
Верхние процессы являются локальными HTTP/REST серверами, которые принимают запрос на поиск по данным своих сервисов от главного сервера по локальному закрытому API, а также возвращают результат. В их оперативной памяти хранится экземпляр модели обработки данных, которая производит поиск.
|
|
|
|
|
|
|
|
Нижние процессы являются программами, которые по заданному расписанию собирают данные с соответствующих сервисов, обрабатывают их, а затем обучают модель на этих данных. По завершении обучения программы отправляют запрос на соответствующий им верхний процесс, сообщая ему, что новая версия модели сохранена в общей файловой системе и может быть загружена в оперативную память. Процессы-серверы получают бинарные файл модели из общей папки внутри контейнера.
|
|
|
|
Такой подход позволяет обеспечить работу обработчиков во время их обучения – сервисы не будут переставать отвечать на запросы во время обновления, так как обновлением занимается отдельный параллельный процесс. Сервис будет недоступен только во время короткого промежутка времени (по сравнению с обучением модели) загрузки модели из файловой системы в оперативную память.
|
|
|
|
|
|
|
|
Зеленый контейнер – микросервис «Gtable». Этот микросервис является HTTP/REST сервером, принимающим данные об отзывах пользователей и записывающим их в специальную Google Таблицу.
|
|
|
|
|
|
|
|
Все контейнеры взаимодействуют друг с другом с помощью REST API. В данной архитектуре существует два типа REST API запросов:
|
|
|
|
- Открытые;
|
|
|
|
- Локальные.
|
|
|
|
|
|
|
|
Запросы открытого типа предоставляет лишь микросервис «Competence Search», так как эти запросы могут быть использованы внешними сервисами. Остальные микросервисы используют только локальные запросы, недоступные извне, так как они являются служебными и служат лишь для работы внутри самого приложения.
|
|
|
|
|
|
|
|
Описанная архитектура приложения позволяет легко добавлять новые сервисы – достаточно написать микросервис-обработчик на подобие уже написанных, а также внести новый сервис в список обработчиков в главном микросервисе «Competence Search». При необходимости также стоит добавить отображение данных нового сервиса в чат-бот.
|
|
|
|
Архитектура проекта описана на странице по [ссылке](Архитектура-проекта).
|
|
|
|
|
|
|
|
## 1.2 Описание алгоритма работы системы
|
|
|
|
Алгоритм работы системы можно описать следующей последовательностью действий:
|
| ... | ... | |