Как я могу настроить функциональность и выбрать подходящие технологии для моего собственного проекта? Вот задача, которую нужно выполнить: - Основной сервер получает файл с веб-сайта, валидирует его и извлекает несколько файлов. Все файлы сохраняются на диске и в базе данных с идентификатором пользователя. - Каждый файл проверяется на количество задач. - Основной сервер проверяет соединения с серверами из базы данных. Те, которые отвечают, что они активны, берут на себя часть работы. Например, если есть 7 серверов, которые могут работать, ищутся 14% работы. Каждому серверу отправляется один и тот же файл. - Пользователю нужно: 1) получать сообщение, если один сервер завершает работу с файлом раньше других серверов; 2) получать сообщение, если все серверы завершили обработку файла и ничего не было найдено; 3) получать информацию о проценте выполнения задачи по запросу. - Основной вопрос: как связать серверы между собой? 1) Нужно, чтобы основной сервер мог общаться с другими серверами. 2) Другие серверы должны иметь возможность общаться как с основным сервером, так и между собой. Я рассмотрел использование газели или вебхуков для запросов, но не могу решить проблему завершения задачи только после того, как все серверы закончат свою работу. Я также рассмотрел использование очередей RabbitMQ. Можете ли вы помочь мне с этим?
Для реализации взаимодействия между серверами с обоюдной связью вам могут понадобиться следующие технологии и подходы: 1) REST API: Создайте RESTful API на вашем основном сервере для обмена данными с другими серверами. Это позволит вашим серверам общаться между собой и с основным сервером. 2) Message Queues: Воспользуйтесь системой сообщений, например, RabbitMQ, для управления задачами и сообщениями между серверами. Когда основной сервер получает файл и генерирует задачи, он может отправлять их в очередь сообщений. Другие серверы могут подписаться на эту очередь и забирать задачи для обработки. Когда задача выполнена, сервер может отправить сообщение обратно в очередь, чтобы основной сервер знал о состоянии задачи. 3) Webhooks: Используйте вебхуки для оповещения основного сервера о событиях на других серверах. Например, когда сервер заканчивает задачу, он может отправить POST-запрос на вебхук основного сервера с информацией о завершении работы. Основной сервер может реагировать на этот запрос и обновлять информацию о состоянии задачи. 4) База данных: Используйте базу данных для сохранения информации о задачах, файлах и состоянии работы. Это поможет отслеживать выполнение задачи и предоставлять информацию о проценте выполнения. Как связать серверы между собой зависит от вашего выбора технологий и архитектуры системы. Возможные подходы включают использование API вызовов, вебхуки и очередей сообщений для передачи данных и сообщений между серверами. Используя комбинацию REST API, очередей сообщений и базы данных, вы можете создать решение, которое позволит серверам взаимодействовать между собой и с основным сервером для обработки задач и обмена информацией о состоянии работы и завершении задач. Успехов в реализации вашего проекта!
WebSocket, gRPC и HTTP - это некоторые из методов коммуникации между серверами. Если серверы находятся в одной подсети, это сильно упрощает их взаимодействие. Для этого можно использовать сервер в роли диспетчера, который будет отправлять задачи и контролировать их выполнение. Например, он может отправить задачу с уникальным идентификатором и, получив ответ, записать в базу данных информацию о выполнении задачи Х. Также сервер-диспетчер может проверить, выполнены ли все задачи подсерверами, и, если да, перейти к следующему этапу.