Calc Service - это веб-сервис для распределённых вычислений, который позволяет выполнять арифметические выражения в многопользовательском режиме. Сервис использует архитектуру, состоящую из оркестратора и агентов, для эффективного выполнения задач.
Сервис доступен по адресу: http://localhost:8080
-
Убедитесь, что установлен Go (версии 1.20 или выше).
-
Установите GCC:
- Для Windows: Скачайте и установите MinGW-w64 с официального сайта по инструкции.
-
Настройте переменную окружения CGO_ENABLED:
- Установите переменную окружения
CGO_ENABLED=1для включения поддержки CGO:go env -w CGO_ENABLED=1
- Установите переменную окружения
-
Установите Protocol Buffers Compiler (protoc):
- Скачайте последнюю версию protoc для Windows: protoc-25.1-win64.zip
- Распакуйте содержимое архива в папку
tools\protocпроекта - В результате должна появиться структура:
tools/ └── protoc/ ├── bin/ │ └── protoc.exe └── include/
-
Установите Go плагины для protoc:
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
-
Скачайте зависимости проекта:
go mod tidy
-
Запустите оркестратор:
go run ./cmd/orchestrator/...
Оркестратор запустит:
- HTTP-сервер на порту 8080 (для веб-интерфейса)
- gRPC-сервер на порту 50051 (для общения с агентами)
-
Запустите агент (в отдельном окне терминала):
go run ./cmd/agent/...
-
Откройте веб-интерфейс:
- Перейдите по адресу http://localhost:8080 в браузере.
- Пройдите авторизацию.
- Введите арифметическое выражение и нажмите "Отправить".
Сервис предоставляет следующие эндпоинты:
POST /api/v1/register- регистрация нового пользователя.POST /api/v1/login- авторизация пользователя.POST /api/v1/calculate- отправка выражения на вычисление.GET /api/v1/expressions- получение списка выражений.GET /api/v1/expressions/:id- получение выражения по ID.
Сервис предоставляет следующие gRPC методы:
GetTask- получение задачи для вычисления.SubmitResult- отправка результата вычисления.
Для настройки времени выполнения операций можно задать следующие переменные окружения:
TIME_ADDITION_MS- время выполнения сложения (мс).TIME_MULTIPLICATIONS_MS- время выполнения умножения (мс).TIME_SUBTRACTION_MS- время выполнения вычитания (мс).TIME_DIVISIONS_MS- время выполнения деления (мс).
Пример настройки (Windows):
set TIME_ADDITION_MS=1000
set TIME_MULTIPLICATIONS_MS=2000
set TIME_SUBTRACTION_MS=1000
set TIME_DIVISIONS_MS=3000Unit-тесты (модульные) расположены в файлах:
internal/orchestrator/handlers_test.gointernal/orchestrator/parser_test.gointernal/orchestrator/storage_test.gointernal/agent/client_test.go
Интеграционные тесты расположены в файлах:
tests/agent_test.gotests/integration_test.gotests/parser_test.go
POST http://localhost:8080/api/v1/register
Content-Type: application/json
{"login":"test1","password":"test1234"}
###
POST http://localhost:8080/api/v1/login
Content-Type: application/json
{"login":"test1","password":"test1234"}
###
POST http://localhost:8080/api/v1/calculate
Content-Type: application/json
Authorization: Bearer <полученный.токен>
{"expression":"2 + 3 * 4"}curl -X POST http://localhost:8080/api/v1/register \
-H "Content-Type: application/json" \
-d '{"login":"test1","password":"test1234"}'
###
curl -X POST http://localhost:8080/api/v1/login \
-H "Content-Type: application/json" \
-d '{"login":"test1","password":"test1234"}'
###
curl -X POST http://localhost:8080/api/v1/calculate \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <полученный.токен>" \
-d '{"expression":"2 + 3 * 4"}'