Данный проект это финальная задача в курсе от Яндекс по GoLang. В этом проекте представлена масштабируемая система распределительного вычислителя арифметических выражений на GoLang с графическим интерфейсом на React.
Используемые системы:
- HTTP сервер работает на фреймворке Gin
- База данных используется Postgres
- Распределение задач реализовано через брокер сообщений RabbitMQ.
- Для разворачивания системы используется Docker.
- Live обновление на React реализовано через WebSocket.
- Для разработки сгенерирован Swagger.
Данный проект требует улучшений для использования в реальных задачах.
TODO:
- Переделать Ping агентов через RabbitMQ
- Сделать систему кэша (в основном для ResolveTasks)
- Сделать распределение задачи на подзадачи
Note
В проекте предусмотрен запуск для Production и для локальной разработки.
Просто используйте docker-compose.yml
для полного разворачивания системы или docker-compose-dev.yml
для локальной разработки.
Если у вас останутся вопросы по запуску проекта, пишите в Telegram: @alegor_golang
Для легкого запуска системы советую использовать Docker
Если вы собираетесь выполнять локальную разработку, то для тестирования web интерфейса, написанного на React. Вам потребуется так же установить NodeJS
Для разработки BackEnd части проекта на GoLang потребуется установить GoLang
- Скачайте репозиторий
git clone https://github.com/xALEGORx/go-expression-calculator
- Создайте новый
.env
из.env.example
и при необходимости отредактируйте его
cp .env.example .env
- Произведите те же операции для
.env
файла в папке frontend
Tip
В файле .env нам необходимо указать только один параметр REACT_APP_API_SERVER
Укажите адрес сервера из основого .env параметр SERVER_ADDR
cd frontend; cp .env.example .env
Note
Дальнейшая установка зависит от того, собираетесь ли вы производить локальную разработку.
Production
- Запустите docker-compose из главной папки
Данный docker-compose запускает Postgres, RabbitMQ, React, Nginx и Оркестратор
docker-compose up
- Соберите билд агентов
Для Windows используйте имя сборки build\agent.exe и путь cmd\agent\main.go
В дальнейшем данный билд можно передавать на другие сервера.
go build -o build/agent cmd/agent/main.go
- Запустите первый экземпляр агента с базовыми параметрами
Для Windows используйте файл .\build\agent.exe
Более детальное объяснение параметров Настройка .env и параметры агента
build/agent -agent Agent -ping 60 -threads 10 -url amqp://guest:guest@localhost:5672 -wait 10
Локальная разработка
- Запустите docker-compose для разработки
Данный docker-compose запускает Postgres и RabbitMQ
docker-compose -f docker-compose-dev.yml up
- Запустите оркестратор
Вы можете указать аргумент
-debug
для включения режима отладки
go run cmd/orchestrator/main.go -debug
- Запустите первый экземпляр агента с базовыми параметрами
Более детальное объяснение параметров Настройка .env и параметры агента
go run cmd/agent/main.go -agent Agent -ping 5 -threads 10 -url amqp://guest:guest@localhost:5672 -wait 10 -debug
- Перейдите в папку с Frontend
cd frontend
- Установить необходимые модули
npm i
- Запустите React
npm run start
В .env
вам нужно отредактировать только эти поля, остальные поля нужны для продвинутой настройки
AGENT_TIMEOUT
- максимальное время в секундах для ожидания агента, если агент будет неактивен спустяAGENT_TIMEOUT
секунд, то он будет удален из спискаAGENT_PING
- время в секундах для отправления сигнала ping от агента, если агент не отправит в течении этого времени сообщение о пинге, то его статус будет изменен наreconnected
AGENT_RESOLVE_TIME
- максимальное время в секундах для решения одной задачи, если в течении этого времени не будет получен ответ, то задача пересоздастсяSERVER_ADDR
- IP:PORT для запуска HTTP сервераMODE
-release
илиdebug
режим запуска GinPOSTGRES_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://127.0.0.1:80 - для production
- http://127.0.0.1:3000 - для локальной разработки
Документация по HTTP серверу доступна по адресу SERVER_ADDR/swagger/index.html
Во вкладке СЕРВЕРА
вы можете увидеть список всех запущенных агентов.