Skip to content

kostenbl4/code-tasks

Repository files navigation

Платформа для удаленного выполнения кода

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

  • Task Service - REST API для взаимодействия с пользователями, управления задачами и аутентификации
  • Code Processor - микросервис для непосредственного выполнения кода в изолированной среде
  • RabbitMQ - брокер сообщений для асинхронной коммуникации между сервисами
  • PostgreSQL - база данных для хранения информации о пользователях и задачах
  • Redis - хранилище для управления сессиями пользователей
  • Prometheus и Grafana - система мониторинга производительности

Архитектура проекта

Приложение построено с использованием принципов чистой архитектуры и разделено на следующие слои:

  • API - обработка HTTP запросов и взаимодействие с клиентами
  • Domain - бизнес-модели и бизнес-правила
  • Usecases - реализация бизнес-логики
  • Repository - слой доступа к данным (PostgreSQL, Redis, RabbitMQ)

Обработка задач происходит следующим образом:

  1. Пользователь отправляет код через REST API
  2. Task Service проверяет аутентификацию и добавляет задачу в очередь RabbitMQ
  3. Code Processor получает задачу из очереди и выполняет код в изолированном Docker-контейнере
  4. Результат выполнения сохраняется в базу данных
  5. Пользователь получает результат через REST API

Требования

  • Docker и Docker Compose
  • Go 1.19 или выше (для локальной разработки)
  • Git

Быстрый старт

Запуск проекта

# Сборка и запуск всех сервисов
make build_and_run

# Просмотр запущенных сервисов
docker compose ps

# Остановка всех сервисов
make stop

Запуск тестов

make run_tests

API Endpoints

Аутентификация

  • 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published