Система представляет собой микросервисное приложение для безопасного выполнения пользовательского кода. Состоит из нескольких компонентов:
- Task Service - REST API для взаимодействия с пользователями, управления задачами и аутентификации
- Code Processor - микросервис для непосредственного выполнения кода в изолированной среде
- RabbitMQ - брокер сообщений для асинхронной коммуникации между сервисами
- PostgreSQL - база данных для хранения информации о пользователях и задачах
- Redis - хранилище для управления сессиями пользователей
- Prometheus и Grafana - система мониторинга производительности
Приложение построено с использованием принципов чистой архитектуры и разделено на следующие слои:
- API - обработка HTTP запросов и взаимодействие с клиентами
- Domain - бизнес-модели и бизнес-правила
- Usecases - реализация бизнес-логики
- Repository - слой доступа к данным (PostgreSQL, Redis, RabbitMQ)
Обработка задач происходит следующим образом:
- Пользователь отправляет код через REST API
- Task Service проверяет аутентификацию и добавляет задачу в очередь RabbitMQ
- Code Processor получает задачу из очереди и выполняет код в изолированном Docker-контейнере
- Результат выполнения сохраняется в базу данных
- Пользователь получает результат через REST API
- Docker и Docker Compose
- Go 1.19 или выше (для локальной разработки)
- Git
# Сборка и запуск всех сервисов
make build_and_run
# Просмотр запущенных сервисов
docker compose ps
# Остановка всех сервисов
make stop
make run_tests
-
POST /register
- Регистрация нового пользователя- Тело запроса:
{"username": "user", "password": "password"}
- Тело запроса:
-
POST /login
- Аутентификация пользователя и получение токена- Тело запроса:
{"username": "user", "password": "password"}
- Тело запроса:
-
POST /task
- Загрузка задачи на выполнение- Требуется аутентификация:
Authorization: Bearer <token>
- Тело запроса: JSON с кодом и параметрами выполнения
- Требуется аутентификация:
-
GET /status/{task_id}
- Получение статуса задачи- Требуется аутентификация:
Authorization: Bearer <token>
- Ответ:
{"status": "in_progress"}
или{"status": "ready"}
- Требуется аутентификация:
-
GET /result/{task_id}
- Получение результата выполнения задачи- Требуется аутентификация:
Authorization: Bearer <token>
- Требуется аутентификация:
Grafana доступна по адресу http://localhost:3000
(логин: admin, пароль: admin)
Prometheus доступен по адресу http://localhost:9090
├── code-processor/ # Микросервис для выполнения кода
├── task-service/ # REST API для работы с задачами
├── pkg/ # Общие пакеты для всех сервисов
├── tests/ # Тесты для API
├── docker-compose.yml # Конфигурация для запуска всех сервисов
└── Makefile # Команды для управления проектом
- Golang - основной язык разработки
- PostgreSQL - хранение данных пользователей и задач
- Redis - управление сессиями
- RabbitMQ - брокер сообщений для асинхронной обработки
- Docker - контейнеризация сервисов и изоляция выполнения кода
- Prometheus и Grafana - мониторинг системы
- Swagger - документирование REST API