Skip to content

xALEGORx/go-expression-calculator

Repository files navigation


Logo

Распределенный вычислитель арифметических выражений

Финальная задача курса Yandex по GoLang

Downloads Contributors License

О проекте

image

Данный проект это финальная задача в курсе от Яндекс по GoLang. В этом проекте представлена масштабируемая система распределительного вычислителя арифметических выражений на GoLang с графическим интерфейсом на React.

Используемые системы:

  • HTTP сервер работает на фреймворке Gin
  • База данных используется Postgres
  • Распределение задач реализовано через брокер сообщений RabbitMQ.
  • Для разворачивания системы используется Docker.
  • Live обновление на React реализовано через WebSocket.
  • Для разработки сгенерирован Swagger.

Данный проект требует улучшений для использования в реальных задачах.

TODO:

  • Переделать Ping агентов через RabbitMQ
  • Сделать систему кэша (в основном для ResolveTasks)
  • Сделать распределение задачи на подзадачи

Стек технологий

GoLang React Postgres Rabbit

image

Как запустить проект?

Note

В проекте предусмотрен запуск для Production и для локальной разработки.

Просто используйте docker-compose.yml для полного разворачивания системы или docker-compose-dev.yml для локальной разработки.

Если у вас останутся вопросы по запуску проекта, пишите в Telegram: @alegor_golang

Перед установкой

Для легкого запуска системы советую использовать Docker

Если вы собираетесь выполнять локальную разработку, то для тестирования web интерфейса, написанного на React. Вам потребуется так же установить NodeJS

Для разработки BackEnd части проекта на GoLang потребуется установить GoLang

Базовые действия

  1. Скачайте репозиторий
git clone https://github.com/xALEGORx/go-expression-calculator
  1. Создайте новый .env из .env.example и при необходимости отредактируйте его
cp .env.example .env
  1. Произведите те же операции для .env файла в папке frontend

Tip

В файле .env нам необходимо указать только один параметр REACT_APP_API_SERVER
Укажите адрес сервера из основого .env параметр SERVER_ADDR

cd frontend; cp .env.example .env

Запуск

Note

Дальнейшая установка зависит от того, собираетесь ли вы производить локальную разработку.


Production
  1. Запустите docker-compose из главной папки

Данный docker-compose запускает Postgres, RabbitMQ, React, Nginx и Оркестратор

docker-compose up
  1. Соберите билд агентов

Для Windows используйте имя сборки build\agent.exe и путь cmd\agent\main.go

В дальнейшем данный билд можно передавать на другие сервера.

go build -o build/agent cmd/agent/main.go
  1. Запустите первый экземпляр агента с базовыми параметрами

Для Windows используйте файл .\build\agent.exe

Более детальное объяснение параметров Настройка .env и параметры агента

build/agent -agent Agent -ping 60 -threads 10 -url amqp://guest:guest@localhost:5672 -wait 10
Локальная разработка
  1. Запустите docker-compose для разработки

Данный docker-compose запускает Postgres и RabbitMQ

docker-compose -f docker-compose-dev.yml up
  1. Запустите оркестратор

Вы можете указать аргумент -debug для включения режима отладки

go run cmd/orchestrator/main.go -debug
  1. Запустите первый экземпляр агента с базовыми параметрами

Более детальное объяснение параметров Настройка .env и параметры агента

go run cmd/agent/main.go -agent Agent -ping 5 -threads 10 -url amqp://guest:guest@localhost:5672 -wait 10 -debug
  1. Перейдите в папку с Frontend
cd frontend
  1. Установить необходимые модули
npm i
  1. Запустите React
npm run start

Настройка .env и параметры агента

В .env вам нужно отредактировать только эти поля, остальные поля нужны для продвинутой настройки

  • AGENT_TIMEOUT - максимальное время в секундах для ожидания агента, если агент будет неактивен спустя AGENT_TIMEOUT секунд, то он будет удален из списка
  • AGENT_PING - время в секундах для отправления сигнала ping от агента, если агент не отправит в течении этого времени сообщение о пинге, то его статус будет изменен на reconnected
  • AGENT_RESOLVE_TIME - максимальное время в секундах для решения одной задачи, если в течении этого времени не будет получен ответ, то задача пересоздастся
  • SERVER_ADDR - IP:PORT для запуска HTTP сервера
  • MODE - release или debug режим запуска Gin
  • POSTGRES_HOST & RABBIT_HOST - измените на localhost только при локальной разработке!

Параметры запуска агента

  • -agent string - имя агента для отображения в списке серверов
  • -ping int - время в секундах, раз в которое будет отправляться сообщение с пингов (данный параметр должен быть меньше или равен параметру AGENT_RESOLVE_TIME из .env)
  • -threads int - количество потоков (goroutine) для параллельного решения задач на одном агенте
  • -wait int - задержка решения задач для эмуляции выполнения долгих запросов
  • -debug - включить режим отладки
  • -queue string - имя очереди RabbitMQ с заданиями, при необходимости не менять
  • -server string - имя очереди RabbitMQ для ответов, при необходимости не менять
  • -url string - DSN строка для подключения RabbitMQ, при необходимости не менять

Использование

Для использования web интерфейса перейдите по адресу

Документация по HTTP серверу доступна по адресу SERVER_ADDR/swagger/index.html

Во вкладке СЕРВЕРА вы можете увидеть список всех запущенных агентов.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published