Skip to content

Repository files navigation

Микросервисная архитектура для системы проверки работ

Описание системы

Система представляет собой микросервисную архитектуру для проверки студенческих работ с детекцией плагиата. Система состоит из трех основных сервисов:

  1. API Gateway - центральный сервис-посредник для маршрутизации запросов клиентов
  2. File Storing Service - сервис для хранения и получения файлов
  3. File Analysis Service - сервис для анализа работ и создания отчетов

Архитектура системы

Клиент → API Gateway → File Storing Service
                    → File Analysis Service

API Gateway

  • Порт: 8080
  • Принимает все клиентские запросы
  • Маршрутизирует запросы к соответствующим микросервисам
  • Обрабатывает ошибки при недоступности сервисов

File Storing Service

  • Порт: 8081
  • Хранение загруженных файлов на диске
  • Получение файлов по ID
  • Сохранение метаданных о файлах в БД

File Analysis Service

  • Порт: 8082
  • Анализ загруженных файлов
  • Создание отчетов о проверке
  • Детекция плагиата
  • Сохранение результатов анализа в БД

Технические детали

Технологии

  • C++17
  • SQLite (база данных)
  • Docker & Docker Compose
  • HTTP/REST API

Алгоритм детекции плагиата

В простейшей версии плагиат определяется следующим образом:

  • Если существует более ранняя отправка той же работы (по ID задания) другим студентом
  • Сравнение выполняется по хэш-сумме файла
  • Если хэш-суммы совпадают, устанавливается флаг плагиата

Сценарии использования

Сценарий 1: Студент отправляет работу на проверку

  1. Клиент → API Gateway: POST /api/works/submit

    {
      "student_id": "student123",
      "assignment_id": "assignment1",
      "file": "<base64 encoded file>"
    }
  2. API Gateway → File Storing Service: POST /files/upload

    • Передача файла для сохранения
    • Получение file_id
  3. API Gateway → File Analysis Service: POST /analysis/analyze

    • Запрос на анализ файла
    • Передача file_id и метаданных
  4. File Analysis Service → File Storing Service: GET /files/{file_id}

    • Получение файла для анализа
  5. File Analysis Service:

    • Выполнение анализа
    • Проверка на плагиат
    • Сохранение отчета в БД
  6. API Gateway → Клиент: Возврат статуса и submission_id

Сценарий 2: Преподаватель запрашивает аналитику

  1. Клиент → API Gateway: GET /api/works/{work_id}/reports

  2. API Gateway → File Analysis Service: GET /analysis/reports?assignment_id={work_id}

  3. File Analysis Service:

    • Запрос к БД для получения всех отчетов по заданию
    • Формирование JSON ответа
  4. API Gateway → Клиент: Возврат списка отчетов

    {
      "reports": [
        {
          "submission_id": "sub1",
          "student_id": "student123",
          "status": "completed",
          "plagiarism_detected": false,
          "created_at": "2024-01-01T12:00:00Z"
        }
      ]
    }

Обработка ошибок

  • Если один из микросервисов недоступен, API Gateway возвращает ошибку 503 Service Unavailable
  • Логирование ошибок в консоль
  • Возврат понятных сообщений об ошибках клиенту

Запуск системы

Требования

  • Docker
  • Docker Compose

Запуск

docker compose up --build

Проверка работоспособности

# Проверка статуса сервисов
curl http://localhost:8080/health
curl http://localhost:8081/health
curl http://localhost:8082/health
# Используем полученный base64 код
# Отправка работы (пример с base64 закодированным файлом)
echo "Hello World! This is a test file." | base64

curl -X POST http://localhost:8080/api/works/submit \
  -H "Content-Type: application/json" \
  -d '{"student_id":"student1","assignment_id":"assignment1","file":"SGVsbG8gV29ybGQhIFRoaXMgaXMgYSB0ZXN0IGZpbGUuCg=="}'

# Отправка второй работы другим студентом (для проверки плагиата)
curl -X POST http://localhost:8080/api/works/submit \
  -H "Content-Type: application/json" \
  -d '{"student_id":"student2","assignment_id":"assignment1","file":"SGVsbG8gV29ybGQhIFRoaXMgaXMgYSB0ZXN0IGZpbGUuCg=="}'

# Получение отчетов
curl http://localhost:8080/api/works/assignment1/reports

Тестирование детекции плагиата

  1. Отправьте работу от первого студента (см. пример выше)
  2. Отправьте ту же самую работу (с тем же base64 содержимым) от другого студента
  3. Запросите отчеты - у второй отправки должен быть флаг plagiarism_detected: true

API Endpoints

API Gateway (порт 8080)

  • GET /health - проверка здоровья сервиса
  • POST /api/works/submit - отправка работы на проверку
  • GET /api/works/{work_id}/reports - получение отчетов по работе

File Storing Service (порт 8081)

  • POST /files/upload - загрузка файла
  • GET /files/{file_id} - получение файла
  • GET /health - проверка здоровья сервиса

File Analysis Service (порт 8082)

  • POST /analysis/analyze - запрос на анализ файла
  • GET /analysis/reports - получение отчетов
  • GET /health - проверка здоровья сервиса

Структура проекта

.
├── api-gateway/
│   ├── src/
│   │   └── main.cpp
│   ├── Dockerfile
│   └── CMakeLists.txt
├── file-storing-service/
│   ├── src/
│   │   └── main.cpp
│   ├── Dockerfile
│   └── CMakeLists.txt
├── file-analysis-service/
│   ├── src/
│   │   └── main.cpp
│   ├── Dockerfile
│   └── CMakeLists.txt
├── docker-compose.yml
└── README.md

About

Ну вот как-то так, вроде даже рабочее нечто

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages