Skip to content

Архитектура программного решения

Программное решение Hi.Work должно придерживаться современных тенденций касательно разработки крупных многопользовательских приложений. Архитектура разрабатывается относительно требований заказчика:

  • кроссплатформенность - возможность использования различных устройств и операционных систем конечными пользователями
  • масштабируемость - возможность внедрения новых программных модулей
  • доступность - конечные пользователи имеют возможность получить доступ к разрешённым функциям системы в любое время
  • безопасность - в приложении реализованы правила и ограничения на доступ к функциям, а так же алгоритмы шифрования и хеширования

В связи с этими требованиями, были определены следующие основные технологические подходы:

  • Компьютерные сети - так как открывают пользователям круглосуточный доступ по стандартным каналам связи
  • WebAPI - поддерживает стандартные и распространённые протоколы HTTP и WebSocket, а так же представляет информацию в формате JSON (так же gRPC для взаимодействия между микросервисами)
  • Микросервисный подход - позволяет декомпозировать сложную систему на составные логические модули, разработку которых можно вести параллельно и с малой зависимостью
  • Реляционные базы данных - структурирование данных и индексация для быстрой выборки, управления транзакциями и
  • Документоориентированные базы данных - для хранения данных с простой структурой, малой связностью и необходимостью быстрого доступа
  • Брокеры собщений - позволяют внедрить стандартизированный канал связи для взаимодействия между сервисами приложения, оркестрации их работы и своевременном оповещении о событиях в режиме реального времени
  • WEB-ориентированность: клиентские приложения с поддержкой HTML/CSS/JS являются кроссплатформенными в связи с их распространённостью и доступностью для различных типов устройств

Программное решение реализует клиент-серверную ахитектуру:

  • Backend - функционал и бизнес-логика, доступная по запросам к серверу
  • Frontend - клиентские приложения, которые используют Backend-сервер для отправки запросов к бизнес-функциям системы

Пользователи системы

Были определены следующие роли для пользователя системы:

  • Сотрудник - пользователь, который отслеживает данные о своей карьере, получает задания, управляет своими навыками и т.п.
  • HR-менеджер - пользователь, который управляет общими данными о карьерных треках, должностях, навыках организации и т.п. - является административным
  • Куратор - пользователь, который является руководителем сотрудника и может выдавать задания, отслеживать деятельность подчинённого и т.п.

Роли определяют права, ограничения и доступ к функционалу программного решения. Важное замечание: пользователь как субъект системы может иметь несколько ролей.

Подсистемы - разграничение клиентских приложений

Для уменьшения степени монолитности программного решения, при котором весь функционал концентрируется в одном программном модуле, было принято решение о разработке нескольких пользовательских приложений, в каждом из которых доступен определённый функционал подсисистемы. Такими являются следующие:

  • Приложение для сотрудника
  • Приложение для менеджера (HR, куратор)

Серверная часть - backend-архитектура

Серверная часть приложения состоит из множества модулей, а доступ пользователей к ней реализуется через HTTP-запросы с помощью WebAPI. Основные модули:

  • Реляционная база данных - не доступна напрямую, используется только WebAPI
  • WebAPI - http-сервер с запросами, которые предназначены для внесения изменений и/или получения данных в формате JSON, а так же других ресурсов
  • ИИ-модуль - один из внешних сервисов (может быть развёрнут локально или доступен по сети интернет) для анализа данных и составления отчётов

Безопасность - доступ к функционалу и ресурсам

Доступ к ресурсам осуществляется только авторизованным пользователям, прошедшим авторизацию. Современным стандартом аутентификации и авторизации для распределённых сетевых приложений является OAuth, который описывает стандарты для подтверждения пользователя и его прав. Одной из описываемых технологий явлется JWT (Json Web Token). Так же для уменшения рисков, связанных с доступом злоумышленников к авторизационным данных пользователей, необходимо сохранять только отпечаток пароля с помощью алгоритмов хеширования. Для усложнения перебора данных при нахождении закономерностей алгоритма, в приложении реализуется "соление паролей" ("хеш-соль").

Общая схема архитектуры

Общая схема архитектуры

Технологии доставки и развёртывания

Для организованной разработки в рамках команды разработчиков, вносятся следующие технологические решения:

  • Система версионирования Git
  • Централизованный репозиторий GitHub
  • Система контейнеризации Docker
  • Система оркестрации контейнеров Docker Compose
  • Своевременная поставка изменений в контейнеры посредством GitHub Actions и GitHub Container Registry (GHCR)