Вы можете попробовать использовать RabbitMQ для обмена сообщениями.
RabbitMQ - очень мощная концепция при создании приложений, которые необходимо масштабировать. При построении распределенных систем обычно используется рабочая очередь, которая отделяет производителей работы от потребителей (работников).
- Сообщения отправляются производителями
- Сообщения доставляются потребителям
- Сообщения проходят через канал
Существует много шаблонов обмена сообщениями, которые были написаны о тошноте. Два заслуживающих внимания шаблона обмена сообщениями в контексте RabbitMQ - это «Конкурирующие потребители» и «Удаленный вызов процедур».
Использование Rabbit MQ с системой обмена сообщениями конкурирующих потребителей
В качестве иллюстрации рассмотрим пользователя, которому необходимо импортировать большой объем данных. Обработка этих данных требует много ресурсов процессора. Наивная реализация может быть:
- Пользователь загружает данные (запрос)
- Сервер обрабатывает данные
- Ответить пользователю с результатом (ответить)
Если вы попытаетесь обработать эти данные напрямую, используя процесс Node.js, вы заблокируете цикл обработки событий. Любые запросы, поступающие во время обработки данных, должны будут ждать, что не очень хорошо. Система не отвечает. Лучшим подходом было бы:
- Пользователь загружает данные (запрос)
- Сервер отправляет сообщение в очередь
- Пользователь отправляет ответ с сообщением о том, что данные были успешно получены и будут обработаны (ответ).
Сообщение, которое было отправлено в очередь, содержит всю необходимую информацию (информацию о пользователе, местоположение файла и т. Пользователь будет уведомлен после обработки данных. Этот подход («забей и забудь») имеет несколько преимуществ:
- Сервер может обрабатывать другие запросы немедленно
- Обработка задерживается, если на данный момент нет доступных ресурсов
- Обработка повторяется, если не удается в первый раз
В приведенном выше примере мы применили модель конкурирующего потребителя. Когда в очереди есть сообщение, его может получить любой из потребителей. Проще говоря, потребители конкурируют друг с другом, чтобы быть получателем сообщений.