Как реализовать взаимодействие между серверами веб-разработки с обоюдной связью?

Как я могу настроить функциональность и выбрать подходящие технологии для моего собственного проекта? 
Вот задача, которую нужно выполнить: 

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

- Каждый файл проверяется на количество задач. 

- Основной сервер проверяет соединения с серверами из базы данных. Те, которые отвечают, что они активны, берут на себя часть работы. Например, если есть 7 серверов, которые могут работать, ищутся 14% работы. Каждому серверу отправляется один и тот же файл. 

- Пользователю нужно:

  1) получать сообщение, если один сервер завершает работу с файлом раньше других серверов;
  2) получать сообщение, если все серверы завершили обработку файла и ничего не было найдено;
  3) получать информацию о проценте выполнения задачи по запросу.

- Основной вопрос: как связать серверы между собой? 

  1) Нужно, чтобы основной сервер мог общаться с другими серверами.
  2) Другие серверы должны иметь возможность общаться как с основным сервером, так и между собой.

Я рассмотрел использование газели или вебхуков для запросов, но не могу решить проблему завершения задачи только после того, как все серверы закончат свою работу. Я также рассмотрел использование очередей RabbitMQ. Можете ли вы помочь мне с этим?
  • 5 октября 2023 г. 11:27
Ответы на вопрос 2
Для реализации взаимодействия между серверами с обоюдной связью вам могут понадобиться следующие технологии и подходы:

1) REST API: Создайте RESTful API на вашем основном сервере для обмена данными с другими серверами. Это позволит вашим серверам общаться между собой и с основным сервером.

2) Message Queues: Воспользуйтесь системой сообщений, например, RabbitMQ, для управления задачами и сообщениями между серверами. Когда основной сервер получает файл и генерирует задачи, он может отправлять их в очередь сообщений. Другие серверы могут подписаться на эту очередь и забирать задачи для обработки. Когда задача выполнена, сервер может отправить сообщение обратно в очередь, чтобы основной сервер знал о состоянии задачи.

3) Webhooks: Используйте вебхуки для оповещения основного сервера о событиях на других серверах. Например, когда сервер заканчивает задачу, он может отправить POST-запрос на вебхук основного сервера с информацией о завершении работы. Основной сервер может реагировать на этот запрос и обновлять информацию о состоянии задачи.

4) База данных: Используйте базу данных для сохранения информации о задачах, файлах и состоянии работы. Это поможет отслеживать выполнение задачи и предоставлять информацию о проценте выполнения. 

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

Используя комбинацию REST API, очередей сообщений и базы данных, вы можете создать решение, которое позволит серверам взаимодействовать между собой и с основным сервером для обработки задач и обмена информацией о состоянии работы и завершении задач.

Успехов в реализации вашего проекта!
WebSocket, gRPC и HTTP - это некоторые из методов коммуникации между серверами. Если серверы находятся в одной подсети, это сильно упрощает их взаимодействие. Для этого можно использовать сервер в роли диспетчера, который будет отправлять задачи и контролировать их выполнение. Например, он может отправить задачу с уникальным идентификатором и, получив ответ, записать в базу данных информацию о выполнении задачи Х. Также сервер-диспетчер может проверить, выполнены ли все задачи подсерверами, и, если да, перейти к следующему этапу.
Похожие вопросы