Есть пулл серверов из 15-20 серверов из них один выделен для фронта, остальные для
тяжелой работы.
под тяжелой работой я подразумеваю долгие задачи использующие почти всю мощность процессора и оперативной памяти, задачи могут быть запущены параллельно на одном сервере т.е. может одновременно работать 4-8 задачи количество зависит от load overage сервера.
Так вот, пул задач хранится на фронт-сервере который принемает запросы от пользователей. Как лучше организовать распределение задач между серверами, я пока вижу 2 варианта и не могу определиться какой лучше:
(далее мастер-сервер это фронт сервер)- Каждый worker сервер, смотрить на свой load average, и до тех пока он не пиковый опрашивает мастер сервер на наличие задач, если появляется задача он ее хватает и говорит матер-серверу о том что это задача теперь его и другие серверы не должны заниматься ей впредь
- Мастер сервер смотрит по статистике которую ему передает каждый воркер, какой воркер сейчас наименее загруженный и дает задачу ему и сам рулит процессами распределения задач
Минус первого подхода в том что могут возникнуть коллизии и 2 сервера могу взять одновременно задачу на себя и будут выполнять двойную работу, по этому я больше склонен считать что 2 вариант подходит, но может я ошибаюсь или чего-то не учел? Или может есть 3 вариант?