Skip to content

alej4ndrol/balancer

Repository files navigation

Balancer

Тестовое задание

Задача: написать серверное приложение (aka микросервис) Balancer.

Балансер умеет:

· принимать запрос на размещение процесса

· принимать запрос на удаление процесса

· принимать запрос на добавление work-машины

· принимать запрос на удаление work-машины

· распределять процессы между work-машинами, обеспечивая равномерную нагрузку, выполняя ребалансировку в случае добавления или удаления машин/процессов.

После размещения процесс работает вечно, пока не будет удален запросом на удаление.
Процесс характеризуется необходимым кол-вом процессора и памяти.
Машина характеризуется: процессором и памятью. Одно ядро берем за 100, если у машины 6 ядер, считаем для простоты, что её процессор - 600.

Покрытие тестами опционально, но приветствуется.

Список технологий к использованию: PHP 7+ Symfony Mysql / Redis или любого иного персистентного хранилища.

Задание необходимо выполнить с учетом MVC паттерна, принципов SOLID, DRY.

Реализация

Реализован как API (рест?)

Балансировщик принимает запросы на удаление/добавление машины/процесса и возвращает ответ в формате JSON.
В случае запроса на добавление процесса сервер находит минимально загруженную машину и добавляет процесс в нее (связывает новый процесс и существующую машину в бд)
В случае запроса на удаления процесса он просто удаляется
В случае запроса на добавление машины ребалансировка существующих процессов не производится т.к. это подразумевает необходимость удаления как минимум части запросов и их последующего добавления (могу легко реализовать, но это малоэффективно)
В случае запроса на удаление машины ребалансировка выполняется (необходимо перенести активные процессы с нее на другие машины)

Добавлены исключения к ответам и их логгирование

Добавлены тесты (юнит, интеграционные, функциональные)

Использован PHP 8.1, PostgreSQL 14, Symfony 6

installation

$ composer install
$ docker-compose -f docker-compose.yaml up -d

connect to db

$ symfony var:export --multiline > .env.local
$ php bin/console make:migration
$ php bin/console doctrine:migrations:migrate
$ php bin/console doctrine:fixtures:load --purge-with-truncate


image

telegram

About

API for balancing processes

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published