Skip to content

Latest commit

 

History

History
91 lines (50 loc) · 5.55 KB

README.md

File metadata and controls

91 lines (50 loc) · 5.55 KB

☆Distributed Calculator☆

По любым вопросам и предложениям пишите в тг: @vellunnn

Запуск

Для запуска нужно установить Docker Если у вас нет докера, советую качать Docker Desktop тк в нем есть все нужное. Далее его нужно только запустить и дождаться загрузки.

Далее склонируйте репозиторий

$ git clone https://github.com/vellun/distributed-calculator

Находясь в корневой папке проекта, выполните следующую команду

$ docker-compose up

Как приложение будет готово, переходите на адрес

http://localhost:3000/

Схема работы приложения

Схема тут

Принцип работы

☆Агенты

Три горутины, раз в установленное время запрашивают по http задачу для решения у оркестратора. Получив json-ответ, содержащий задачу, отправляют ее калькулятору

☆Калькулятор

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

☆Вычислитель

Горутина, получает на вход два числа и оператор и возвращает результат операции. У каждого агента фиксированное количество вычислителей, которые могут считать одновременно, по умолчанию 5

☆Чекер здоровья(Health checker)

Раз в установленное время проверяет в цикле всех агентов.

Есть срок, по истечении которого с момента последней активности агента, его можно считать пропавшим и ему присваивается статус missing

Также есть срок, по истечении которого с момента последней активности агента, его можно считать умершим и ему присваивается статус dead, из-за чего агент больше не запрашивает задачи для решения

Чекер проверяет эти сроки и присваивает статусы, а также проверяет их, и если у агента статус dead, он заменяется новым, которому присваивается id прежнего.

☆Оркестратор

Сервер, занимающийся приемом выражений, парсингом и добавлением выражений и подвыражений в базу данных.

Также занимается обработкой запросов с фронтенда и от агентов.

Занимается всеми операциями, связанными с базой данных

Калькулятор пока может производить только бинарные операции с целыми числами и поддерживает только + - * / (при делении берет целую часть)

Интерфейс

Реализован фронтенд, предоставляющий такие страницы:

History

Все вычисления, время начала и окончания каждого

Operations

Страница, где можно редактировать время выполнения операций

Computing resources

Все агенты, их статусы и время последней активности. Можно отключить агента, нажав на кнопку disconnect напротив нужного. Ему присвоится статус dead, и как только чекер здоровья это зафиксирует, отключенный агент будет заменен новым.

Calculator

Ну и страница с самим калькулятором

Отказоустойчивость

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

Также упавшие агенты заменяются на новые во время работы приложения