Как релизаовать двустороннюю связь серверов в веб разработке?
(помогите спроектировать функционал и выбрать нужные технологии для моей личной разработки )
Описываю задачу
основной сервер получает файл с сайта , далее валидирует и из него достает несколько файлов .
все файлы сохраняются на диске и в бд с айдишником юзера
каждый файл проверяется на колличество работы .
основной сервер проверяет коннекты к серверам из базы . те что отвечают что аткивны - он берет это колво , к примеру 7
к примеру мы имеем 100% работы и они иделяться на 7 серверов и это 14 %
на каждый сервер отправляется один и тот же файл
значит первый сервер стартанет с нуля до 14%
третий с 15% до 28% процента ) каждый возьмет свою часть в работу
и так далее
В чем собственно вопросы !
юзеру нужно прокидывать
1) если один сервер закончит работу с файлом раньше чем другие - сервера остальные должны остановиться, а юзеру нужно кинуть сообщение - ну вот типо работа по первому файлу завершена
2) когда все куски файла проработаны всеми серверами и работы по файлу не успешны - тогда говорим юзеру что не успешно
3) когда юзер сам нажимает кнопку - узнать процент выполнения
Собственно главный вопрос этого всего , я не знаю как связать сервера .
1)Мне нужно чтобы главный мог общаться с другими
2)Другие могли общаься и с главным и между собой
если бы они не должны были общаться между собой то я бы просто сделал бы запросы через газл или кинул бы вебхуку
Так же я смотрел в сторону очередей ребита , но с этим тоже пришел к вопросу к банальному -как задаче поставить complete если она завершена только когда все сервера закончили работу.Вообщем вопросов много , ребята помогите
iljaGolubev, между собой для того чтобы вовремя остановить задачу на других серверах , когда один из серверов завершит брут раньше и успешно .если он завершил успешно , другие гарантировано будут бесполезно матать оперативку
iljaGolubev, а связь между серверами какая ? просто пост запросы газлом ?
а для связи серверов между собой может проще отправлять на главный реквест а с главного обходить уже все сервера ? если еще и осинхронно отправить сразу всем , тогда не будет задержки и будет хорошо
Для "общения" серверов между собой можно использовать WebSocket, gRPC, HTTP и много чего ещё. Если они в одной подсети, то это значительно упрощает их взаимодействие.
Сервер в роли диспетчера может отправлять задачи и контролировать их выполнение: отправить задачу с её идентификатором, а при получении ответа записать в СУБД, что задача Х выполнена. Там же и проверить, что если все задачи подсерверов выполнены, то перейти к следующему этапу.