Skip to content

vellun/distributed-calculator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

☆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, которую сможет найти в базе данных. Так что если агент падет, не успев решить задачу, она попадет к другому агенту.

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

About

Task for Yandex Lyceum golang course

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published