distributed-calculator

module
v0.0.0-...-047884f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 20, 2024 License: MIT

README

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

Это система, предназначенная для выполнения арифметических операций над большими выражениями, разделяя их на более мелкие части, которые могут быть обработаны параллельно на нескольких компьютерах или вычислительных узлах.

Состоит из 2 элементов:

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

Вычислитель, который может получить от оркестратора задачу, выполнить его и вернуть серверу результат. Далее будем называть его агентом.

Оркестратор

Сервер, который имеет следующие endpoint-ы:

Добавление вычисления арифметического выражения.

Получение списка выражений со статусами.

Получение значения выражения по его идентификатору.

Получение списка доступных операций со временем их выполения.

Настройка времени выполения операций.

Агент

Демон, который получает выражение для вычисления с сервера, вычисляет его и отправляет на сервер результат выражения. При старте демон запускает несколько горутин, каждая из которых выступает в роли независимого вычислителя. Количество горутин регулируется переменной среды.

Деплой

На ПК должен быть установлен docker актуальной версии.

Настроить переменные среды можно изменив файл конфигурации:

Создайте образы и поднимите контейнеры:

$ docker compose up --build

API

Получение выражения по его идентификатору
Request
GET http://localhost:8080/expression?id=1
Parameter Type Description
id int Required. идентификатор выражения
Response
{
    "ID": 1,
    "Expression": "2+2*2",
    "Result": "6",
    "Status": "ok",
    "CreatedAt": "2024-02-16T17:48:15.446296Z",
    "EvaluatedAt": "2024-02-16T17:48:15.450403Z"
}
Добавление вычисления арифметического выражения
Request
POST http://localhost:8080/expression
{
    "expression": "2+2*2"
}
Response
Приняли к обработке
id: 1
Получение списка выражений со статусами
Request
GET http://localhost:8080/expressions
Response
[
    {
        "ID": 1,
        "Expression": "2+2*2",
        "Result": "6",
        "Status": "ok",
        "CreatedAt": "2024-02-16T17:48:15.446296Z",
        "EvaluatedAt": "2024-02-16T17:48:15.450403Z"
    },
    {
        "ID": 2,
        "Expression": "2+2*2",
        "Result": "6",
        "Status": "ok",
        "CreatedAt": "2024-02-16T17:52:01.050951Z",
        "EvaluatedAt": "2024-02-16T17:52:01.052477Z"
    }
]
Получение списка доступных операций со временем их выполения
Request
GET http://localhost:8080/operations
Response
[
    {
        "operator": "+",
        "execution_time": 10
    },
    {
        "operator": "-",
        "execution_time": 10
    },
    {
        "operator": "*",
        "execution_time": 10
    },
    {
        "operator": "/",
        "execution_time": 10
    }
]
Настройка времени выполения операций
Request
POST http://localhost:8080/operations
{
    "add_time": 10,
    "sub_time": 10,
    "mul_time": 10,
    "div_time": 10
}

Directories

Path Synopsis
cmd
http
internal
pkg
db

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL