В настоящее время я работаю над проектом, где мне нужно выполнить обработку файлов в режиме реального времени. Вот рабочий процесс Я пытаюсь добитьсяУправление архитектурой, управляемой событиями
a. User requests a file to be processed to Server A (web)
b. Server A forwards the request to Server B
c. Server B finishes and signals Server A that it’s done
d. Server A signals the user that the file is ready (web)
Что я ищу? Мне нужно найти простой способ ведения событий между сервером A & Сервер B (т.е. этапы b & c). FYI Я буду использовать socket.io для связи с пользователем по шагам a & d через Интернет.
В средах, которые я буду использовать, находятся серверы Ubuntu 14.04, на которых запущены службы node.js (обратите внимание, что решение не должно быть строго узким, если есть интерфейс).
Похоже, достаточно просто? Вот где это усложняется. Каждый набор серверов (считая их теперь веб-серверами и серверами обработки) будет реплицироваться внутри облака (так много из них). Предостережение заключается в том, что, когда сервер обработки завершен, обрабатывая файл, он должен сигнализировать всем веб-серверам, что файл готов. Зачем? Каждый веб-сервер мог обслуживать запрос, ожидающий того же файла.
мне нужно решение, которое достигает этот рабочий процесс в кратчайших сроках (т.е. событие ведомого, а не опрос), который взаимодействует с Node.js и работает на Ubuntu. Любые мысли?
Redis может решить эту проблему .. однако есть две точки, которые делают его немного показательным стопором. 1 - это немного перебор, так как это полный магазин ключей/значений и 2 - он запускается с использованием централизованной модели брокера (у вас есть одна точка, которая хранит и распространяет сообщения). –
Однако .. это привело меня к нулюMQ, который аналогичен к rabbitMQ (что Redis использует для обмена сообщениями), но может быть децентрализовано. Подробнее здесь http://zeromq.org/whitepapers:brokerless –
Отмечая это как ответ. В итоге вы перешли на брокерскую модель zeroMQ http://zeromq.org/whitepapers:brokerless –