2013-09-24 4 views
0

Я создаю службу, которая позволяет клиентам запускать отдельные рабочие процессы «в сети». Процессы предназначены для работы в течение очень долгого времени и подачи новых заказов примерно каждую минуту (событие управляется). Процессы предназначены для продолжения работы, даже если новых заказов нет и все заказы были обработаны. -> 1 процесс на одного клиента.Statful Processes as a Service (Java)

Я требую следующую «функциональность»:

  • Начать новый процесс
  • Завершение процесса (по требованию, никогда автоматически)
  • Следите за процессами/пользователь
  • Получать новые «порядок» для процесса (идентифицировать процесс по идентификатору клиента)
  • Сообщите заказчику, когда его заказы не могут быть обработаны, в случае, если его/ее процесс закончился (например, произошло исключение, кто-то убил сервер ...)

Я ищу модели или лучшие практики, которые позволяют мне решить следующие задачи: - Управление процессов в рамках одного сервера (например, используя статический список или singleton-pattern, что-то вроде этого, чтобы отслеживать отображение между идентификатором пользователя и процессом) - Управление процессами на многих серверах (масштабируемость): Один сервер может запускать 100-200 процессов, если я получу больше клиентов, как бы я помню, на каком сервере выполняются процессы?

Я уверен, что есть и другие, которые сталкивались с этими проблемами раньше и, конечно, есть «правильные» и «неправильные» способы сделать это. Любые подсказки приветствуются!

ответ

0

Я настоятельно рекомендую вам создать постоянное централизованное хранилище данных, чтобы сохранить список клиентов -> процессов. Особенно, когда вы говорите о минутах между запросами.

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

Таким образом, вы получаете довольно хорошее масштабирование при отказе. С любой машиной, способной отправить любой другой. Вам понадобится один мастер, работа которого должна контролировать другие машины для отказа (прочитайте централизованную таблицу и выполните ping каждый процесс (просто сделайте это другим видом порядка).