2014-09-03 4 views
1

В настоящее время я работаю над проектом, где мне нужно выполнить обработку файлов в режиме реального времени. Вот рабочий процесс Я пытаюсь добитьсяУправление архитектурой, управляемой событиями

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) 

Simple Event Arch

Что я ищу? Мне нужно найти простой способ ведения событий между сервером A & Сервер B (т.е. этапы b & c). FYI Я буду использовать socket.io для связи с пользователем по шагам a & d через Интернет.

В средах, которые я буду использовать, находятся серверы Ubuntu 14.04, на которых запущены службы node.js (обратите внимание, что решение не должно быть строго узким, если есть интерфейс).

Похоже, достаточно просто? Вот где это усложняется. Каждый набор серверов (считая их теперь веб-серверами и серверами обработки) будет реплицироваться внутри облака (так много из них). Предостережение заключается в том, что, когда сервер обработки завершен, обрабатывая файл, он должен сигнализировать всем веб-серверам, что файл готов. Зачем? Каждый веб-сервер мог обслуживать запрос, ожидающий того же файла.

Cloud event arch

мне нужно решение, которое достигает этот рабочий процесс в кратчайших сроках (т.е. событие ведомого, а не опрос), который взаимодействует с Node.js и работает на Ubuntu. Любые мысли?

ответ

1

Одним из способов облегчить вашу жизнь может быть использование redis для вашего общения на веб-серверах о том, когда файл загружен и готов к работе. Redis имеет встроенную подписку на канал/обмен сообщениями и довольно прост в использовании с node.js

Итак, когда поступает запрос файла, если веб-сервер ранее слышал от redis, что файл загружен, он может получить файл и вернуть его, в противном случае сигнализировать бэкэнд для обработки файла и ждать уведомления от канала redis

+0

Redis может решить эту проблему .. однако есть две точки, которые делают его немного показательным стопором. 1 - это немного перебор, так как это полный магазин ключей/значений и 2 - он запускается с использованием централизованной модели брокера (у вас есть одна точка, которая хранит и распространяет сообщения). –

+0

Однако .. это привело меня к нулюMQ, который аналогичен к rabbitMQ (что Redis использует для обмена сообщениями), но может быть децентрализовано. Подробнее здесь http://zeromq.org/whitepapers:brokerless –

+0

Отмечая это как ответ. В итоге вы перешли на брокерскую модель zeroMQ http://zeromq.org/whitepapers:brokerless –

Смежные вопросы