**МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ** **Новгородский государственный университет имени Ярослава Мудрого** **Политехнический институт** **Кафедра Информационных Технологий и Систем** ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №14 Разработка распределенной системы обмена сообщениями реального времени (аналог Discord) Minor для кафедры Программного Обеспечения и Вычислительной Техники НовГУ Версия v0.1 **Выполнили:** * Студент Ильин Д.А. группы № 3093 * Студент Распопов С.И. группы № 3093 Великий Новгород 2026 г. --- # Аннотация В данном документе представлено подробное руководство пользователя распределенной системы обмена сообщениями реального времени **«Minor»** (версия 0.1). Система разработана для оптимизации информационного обмена на кафедре Информационных Технологий и Систем (ИТИС) НовГУ. Она представляет собой суверенный аналог коммуникационных платформ Discord и Slack, функционирующий на базе микросервисной архитектуры с использованием технологий Go, Cassandra, PostgreSQL, Redis и NATS JetStream. Руководство пользователя составлено в строгом соответствии с требованиями межгосударственного стандарта **ГОСТ 19.502-90** (Единая система программной документации. Описание применения) и регламентирует структуру, системные требования, процессы установки, тестирования и повседневной эксплуатации системы как в десктопной (веб-клиент), так и в мобильной версиях. --- # Содержание - [1. Введение](#1-введение) - [1.1. Область применения](#11-область-применения) - [1.2. Краткое описание возможностей](#12-краткое-описание-возможностей) - [1.3. Уровень подготовки пользователя](#13-уровень-подготовки-пользователя) - [1.4. Перечень эксплуатационной документации](#14-перечень-эксплуатационной-документации) - [2. Назначение и условия применения](#2-назначение-и-условия-применения) - [2.1. Назначение программы](#21-назначение-программы) - [2.2. Системные требования и условия применения](#22-системные-требования-и-условия-применения) - [3. Подготовка к работе](#3-подготовка-к-работе) - [3.1. Состав и содержание дистрибутивного носителя](#31-состав-и-содержание-дистрибутивного-носителя) - [3.2. Порядок загрузки данных и программ](#32-порядок-загрузки-данных-и-программ) - [3.3. Порядок проверки работоспособности](#33-порядок-проверки-работоспособности) - [4. Описание операций](#4-описание-операций) - [4.1. Регистрация и аутентификация пользователя](#41-регистрация-и-аутентификация-пользователя) - [4.2. Главное меню программы](#42-главное-меню-программы) - [4.3. Управление профилем и настройки](#43-управление-профилем-и-настройки) - [4.4. Навигация по серверам и создание каналов](#44-навигация-по-серверам-и-создание-каналов) - [4.5. Обмен сообщениями](#45-обмен-сообщениями) - [4.6. Завершение работы с программой](#46-завершение-работы-с-программой) - [5. Аварийные ситуации](#5-аварийные-ситуации) - [6. Рекомендации по освоению](#6-рекомендации-по-освоению) - [7. Термины и сокращения](#7-термины-и-сокращения) - [Лист регистрации изменений](#лист-регистрации-изменений) --- # 1. Введение ## 1.1. Область применения Распределенная информационная система реального времени **Minor** предназначена для использования на кафедре Информационных Технологий и Систем НовГУ имени Ярослава Мудрого. Основными пользователями системы являются: - Студенты бакалавриата и магистратуры, координирующие выполнение групповых проектов и лабораторных работ. - Преподавательский состав кафедры, использующий систему для проведения консультаций, выдачи заданий и контроля успеваемости. - Администраторы кафедры, управляющие распределением прав и доступом к учебным ресурсам. Программа функционирует в корпоративной сети университета с возможностью внешнего доступа через защищенные каналы связи. Внедрение Minor позволяет исключить риски потери данных в облачных зарубежных сервисах и перевести внутреннее взаимодействие на суверенную инфраструктуру. ## 1.2. Краткое описание возможностей Программный продукт предоставляет пользователям следующий набор функциональных возможностей: - **Аутентификация и авторизация:** безопасный вход в систему по корпоративным учетным записям, защита сессий при помощи токенов JWT (Access и Refresh). - **Управление серверами:** организация изолированных пространств для различных академических дисциплин, курсов или проектных групп. - **Каналы коммуникации:** деление серверов на текстовые каналы (для обсуждений, публикации учебных материалов и файлов) и голосовые каналы (для проведения онлайн-семинаров и аудиосвязи в реальном времени с минимальной задержкой). - **Обмен мгновенными сообщениями:** отправка текстовой информации (длиной до 2000 символов) по протоколу WebSocket с задержкой доставки менее 100 мс. - **Профили пользователей:** кастомизация личных данных (ФИО, академическая группа, аватар) и системных настроек (звуки, уведомления, выбор темы оформления). - **Уведомления и статусы:** автоматическое отслеживание статуса присутствия участников ("В сети" / "Не в сети") и индикация непрочитанных сообщений в каналах. ## 1.3. Уровень подготовки пользователя Для работы с пользовательскими интерфейсами системы Minor (веб-клиент, мобильное приложение) от пользователя не требуется специальной технической подготовки. Достаточно обладать базовыми навыками работы на персональном компьютере или смартфоне под управлением Android/iOS и уметь использовать стандартные интернет-браузеры. Для администраторов системы, осуществляющих развертывание, конфигурацию и техническую поддержку серверной части, необходим следующий уровень квалификации: - Системное администрирование операционных систем семейства Linux (Ubuntu Server). - Навыки контейнеризации приложений с использованием Docker и оркестрации через Docker Compose. - Базовые знания языков запросов SQL (для PostgreSQL) и CQL (для Apache Cassandra). - Опыт конфигурирования брокеров сообщений (NATS) и шлюзов API (Traefik). ## 1.4. Перечень эксплуатационной документации В состав пакета эксплуатационной документации программного продукта Minor входят следующие документы: - **Техническое задание** ([ТЗ-Minor.docx](file:///Users/odner/Desktop/morkin/ТЗ-Minor.docx)): определяет исходные цели разработки и технические рамки. - **Спецификация требований к программному обеспечению** ([LAB7-Minor.docx](file:///Users/odner/Desktop/morkin/LAB7-Minor.docx)): детально описывает логику работы микросервисов и схемы баз данных. - **Руководство пользователя** ([LR14-Minor.docx](file:///Users/odner/Desktop/morkin/LR14-Minor.docx)): текущий документ, содержащий руководство по установке и эксплуатации. --- # 2. Назначение и условия применения ## 2.1. Назначение программы Программа Minor предназначена для автоматизации процессов обмена сообщениями, координации совместной проектной деятельности студентов и проведения оперативных онлайн-консультаций преподавателями в рамках образовательного процесса кафедры ИТИС НовГУ. ## 2.2. Системные требования и условия применения Для стабильного функционирования серверной части распределенной системы Minor в условиях средней нагрузки (до 500 активных WebSocket-соединений одновременно) должны быть обеспечены следующие минимальные параметры окружения: **Аппаратные требования к серверу:** - **Процессор:** x86_64 или ARM64 с тактовой частотой не менее 2.5 ГГц, количество ядер — не менее 4. - **Оперативная память:** не менее 8 Гб (рекомендуется 16 Гб для стабильной работы СУБД Cassandra в Java Virtual Machine). - **Дисковая подсистема:** твердотельный накопитель SSD объемом не менее 50 Гб со скоростью чтения/записи не ниже 500 Мб/с. - **Сетевой интерфейс:** гигабитный сетевой адаптер (1 Gbps Ethernet). **Программные требования к серверу:** - **Операционная система:** Ubuntu Server 22.04 LTS или аналогичный Linux-дистрибутив (ядро версии 5.15 и выше). - **Платформа контейнеризации:** Docker Engine версии 24.0.0 и выше. - **Инструмент оркестрации:** Docker Compose v2.20.0 и выше. **Требования к клиентским устройствам:** - **Персональный компьютер:** ОС Windows 10/11, macOS 12+ или Linux; установленный браузер Google Chrome 110+, Mozilla Firefox 100+, Apple Safari 15+ с поддержкой HTML5 и WebSockets. - **Мобильное устройство:** смартфон под управлением Android 10.0+ или iOS 15.0+; стабильное подключение к сети Интернет или интрасети НовГУ (Wi-Fi/4G). --- # 3. Подготовка к работе ## 3.1. Состав и содержание дистрибутивного носителя Программное обеспечение Minor поставляется в виде Git-репозитория. В соответствии со структурой проекта, состав дистрибутивного пакета содержит следующие компоненты: | Путь в репозитории | Описание | Тип | | :--- | :--- | :--- | | `/backend/` | Корневая директория бэкенд-компонентов системы. | Каталог | | `/backend/services/` | Каталог микросервисов системы (`api_gateway`, `auth_service`, `chat_service`, `gateway_service`, `guild_service`, `notification_service`, `presence_service`, `sfu_service`, `signal_service`, `upload_service`, `user_service`). | Каталог | | `/backend/shared/` | Общие библиотеки (`pkg`) и protobuf-определения API (`api`). | Каталог | | `/deploy/` | Скрипты и файлы для развертывания инфраструктуры. | Каталог | | `/deploy/docker-compose.yaml` | Конфигурация Docker Compose для запуска всех сервисов и баз данных. | YAML-файл | | `/docs/` | Техническая документация проекта. | Каталог | | `/frontend/` | Исходный код клиентской веб-панели (React/Vite). | Каталог | ## 3.2. Порядок загрузки данных и программ Развертывание программного продукта на сервере производится в соответствии со следующим пошаговым алгоритмом: 1. **Шаг 1. Получение дистрибутива:** Склонируйте репозиторий с исходным кодом в локальную директорию на сервере: ```bash git clone http://172.20.7.4:3000/minor-chat/minor.git /opt/minor ``` 2. **Шаг 2. Конфигурирование системы:** Перейдите в каталог нужного сервиса бэкенда (например, `chat_service`) и создайте рабочий файл конфигурации окружения `.env` на основе шаблона: ```bash cd /opt/minor/backend/services/chat_service && cp .env.example .env ``` Отредактируйте параметры подключения к БД, секретный ключ JWT для шифрования токенов и порты. 3. **Шаг 3. Подготовка баз данных:** Перейдите в каталог развертывания `deploy`, запустите контейнеры баз данных (PostgreSQL и Cassandra) и примените файлы миграций схем данных: ```bash cd /opt/minor/deploy && docker-compose up -d postgres cassandra ``` Убедитесь, что порты доступны, и выполните: ```bash migrate -path ../backend/services/chat_service/migrations -database "postgres://postgres:secret@localhost:5432/minor?sslmode=disable" up ``` 4. **Шаг 4. Запуск всех компонентов:** Запустите сборку образов микросервисов и разверните всю распределенную систему Minor: ```bash cd /opt/minor/deploy && docker-compose up --build -d ``` ## 3.3. Порядок проверки работоспособности Для верификации корректности развертывания распределенной системы выполните следующие действия: 1. Выполните HTTP-запрос к эндпоинту проверки состояния микросервиса авторизации: ```bash curl -i http://localhost:8080/api/v1/auth/health ``` Сервер должен вернуть статус `200 OK` и JSON-тело `{"status": "healthy"}`. 2. Проверьте логи шлюза API Traefik на отсутствие критических ошибок маршрутизации: ```bash cd /opt/minor/deploy && docker-compose logs | grep -E "(ERROR|FATAL)" ``` 3. Убедитесь в активности очередей в брокере сообщений NATS JetStream, выполнив команду в контейнере: ```bash cd /opt/minor/deploy && docker-compose exec nats nats stream info server_messages ``` 4. Откройте веб-браузер на клиентском компьютере, перейдите по настроенному доменному адресу (например, `http://minor.novsu.ru`) и убедитесь в отображении стартовой страницы авторизации. --- # 4. Описание операций ## 4.1. Регистрация и аутентификация пользователя При первом обращении к системе пользователь видит экран авторизации. - Если учетная запись еще не создана, необходимо нажать на ссылку **«Регистрация»** и ввести адрес корпоративной почты, имя пользователя и надежный пароль. - Для входа в систему введите e-mail и пароль в соответствующие поля ввода формы (Рисунок 1). - После успешной аутентификации Auth Service сгенерирует токен, который запишется в защищенные cookie браузера, и клиент будет автоматически перенаправлен на главный рабочий экран. | *Рисунок 1 – Авторизация* | | :----------------------------------------------: | | ![Рисунок 4 – Главный экран](./media/image1.png) | ## 4.2. Главное меню программы Главный интерфейс Minor разделен на несколько функциональных зон (Рисунок 2): - В нижней части мобильного приложения (или в левой части веб-версии) отображаются круглые иконки доступных серверов (гильдий), а также кнопка быстрого перехода к личным сообщениям. - В центральной области выводится текущий выбранный чат. - Панель поиска сверху позволяет выполнять полнотекстовый поиск по истории личных сообщений (Рисунок 3). | *Рисунок 2 – Главный экран* | *Рисунок 3 – Поиск в главном меню* | | :----------------------------------------------: | :-----------------------------------------------------: | | ![Рисунок 2 – Главный экран](./media/image2.png) | ![Рисунок 3 – Поиск в главном меню](./media/image3.png) | ## 4.3. Управление профилем и настройки Нажав на иконку настроек профиля, пользователь попадает в меню конфигурации (Рисунок 4). В данном разделе доступны: - Настройка приватности и доступа. - Управление системными звуковыми уведомлениями. - Переключение цветового оформления интерфейса (Светлая тема / Темная тема). | *Рисунок 4 – Настройки* | | :----------------------------------------------: | | ![Рисунок 4 – Главный экран](./media/image4.png) | ## 4.4. Навигация по серверам и создание каналов При переходе на один из серверов в левой панели отображается список доступных каналов (Рисунок 5): - **Текстовые каналы** (помечаются знаком `#`) используются для обмена сообщениями и учебными файлами. - **Голосовые каналы** (помечаются значком динамика) служат для мгновенного подключения к голосовой связи. Достаточно кликнуть на канал для начала аудиообщения. | *Рисунок 5 – Экран сервера* | | :----------------------------------------------: | | ![Рисунок 5 – Экран сервера](./media/image5.png) | ## 4.5. Обмен сообщениями Для отправки сообщения выберите нужный текстовый канал, введите текст в поле ввода внизу экрана и нажмите клавишу **Enter** (или кнопку **«Отправить»**). - Для отправки файлов воспользуйтесь кнопкой со скрепкой. - Для записи голосового сообщения удерживайте кнопку с изображением микрофона. - Интерфейс личной переписки с другим пользователем представлен на Рисунке 6. Окно чата в текстовом канале сервера представлено на Рисунке 7. | *Рисунок 6 – Личная переписка* | *Рисунок 7 – Переписка в канале* | | :---: | :---: | | ![Рисунок 6 – Личная переписка](./media/image6.png) | ![Рисунок 7 – Переписка в канале](./media/image7.png) | ## 4.6. Завершение работы с программой Для корректного выхода из системы и предотвращения несанкционированного доступа к аккаунту с текущего устройства откройте настройки профиля и нажмите на кнопку **«Logout»** (Рисунок 4). В результате сессия будет аннулирована, а авторизационные токены удалены из памяти устройства. --- # 5. Аварийные ситуации В процессе эксплуатации распределенной системы Minor возможны сбои программного и аппаратного характера. Ниже представлены сценарии реагирования на нештатные ситуации: **Временная потеря сетевого соединения клиентом:** - *Поведение системы:* Пользовательский веб-клиент автоматически переходит в режим ожидания. На экране отображается сообщение *«Соединение потеряно. Попытка переподключения...»*. - *Действия пользователя:* Проверить физическое подключение к сети Интернет или интрасети НовГУ. При восстановлении связи клиентское приложение восстановит WebSocket-сессию автоматически без потери истории сообщений. **Отказ базы данных истории сообщений (Apache Cassandra):** - *Поведение системы:* При попытке отправки или получения старых сообщений интерфейс выдает ошибку *«Не удалось загрузить сообщения. Пожалуйста, попробуйте позже»* (HTTP-статус 500). Работа авторизации и голосовых каналов при этом сохраняется (отказоустойчивость). - *Действия администратора:* Подключиться к серверу по SSH, проверить логи контейнера базы данных: ```bash docker-compose logs cassandra ``` В случае необходимости выполнить перезапуск службы: ```bash docker-compose restart cassandra ``` **Истечение времени действия сессии (JWT токена):** - *Поведение системы:* При выполнении любого действия (отправка сообщения, переход в канал) система перенаправляет пользователя на форму входа. - *Действия пользователя:* Повторно пройти процедуру авторизации, введя логин и пароль. **Сбой брокера сообщений NATS JetStream:** - *Поведение системы:* Сообщения сохраняются в БД, но перестают приходить другим участникам в реальном времени до момента ручного обновления страницы. - *Действия администратора:* Проверить статус контейнера NATS и очистить зависшие сообщения в очереди при переполнении диска. --- # 6. Рекомендации по освоению Для быстрого и эффективного начала работы с системой Minor рекомендуется придерживаться следующих шагов: - **Изучение интерфейса:** Основное расположение элементов управления (серверы, каналы, настройки) аналогично популярным мессенджерам Discord и Slack. Освоение базового функционала занимает у среднего пользователя не более 10–15 минут. - **Групповая координация:** Рекомендуется создавать отдельные серверы для каждой учебной дисциплины, а внутри них группировать каналы по типам заданий (например, текстовые каналы `#лекции`, `#лабораторные` и голосовой канал `Консультации` для созвонов с преподавателем). --- # 7. Термины и сокращения Таблица 2 – Термины и сокращения | Термин / Сокращение | Расшифровка | Описание | | :--- | :--- | :--- | | **БД** | База Данных | Организованная структура для хранения системной информации. | | **СУБД** | Система Управления Базами Данных | Специализированное ПО для управления реляционными и нереляционными данными. | | **JWT** | JSON Web Token | Стандарт токенов для безопасной передачи claims (утверждений) между сторонами. | | **NATS JetStream** | Брокер сообщений | Распределенная система обмена сообщениями, обеспечивающая доставку событий в реальном времени. | | **UUIDv7** | Universally Unique Identifier | Уникальный 128-битный идентификатор, генерируемый с использованием временной метки (timestamp-first). | | **API** | Application Programming Interface | Программный интерфейс взаимодействия между клиентами и бэкенд-службами. | | **gRPC** | Google Remote Procedure Call | Фреймворк для быстрого межсервисного взаимодействия с использованием Protocol Buffers. | | **WebSocket** | Протокол связи | Протокол двусторонней полнодуплексной связи поверх TCP-соединения для Real-time обмена. | | **Гильдия / Сервер** | Тематическое сообщество | Изолированное коммуникационное пространство внутри Minor, содержащее каналы и участников. | --- # Лист регистрации изменений | Номер изменения | Тип изменения | Дата изменения | Описание внесенных изменений | Автор изменения | | :-------------: | :----------------: | :------------: | :---------------------------------------------------------------------- | :-------------------------- | | **0.1** | Создание документа | 20.05.2026 | Разработка первичной версии руководства пользователя по ГОСТ 19.502-90. | Ильин Д. А., Распопов С. И. |