NodeJS: как запустить три сервера, действующих как одно приложение? - PullRequest
2 голосов
/ 31 августа 2011

Мое приложение построено на трех разных серверах: каждый из них служит разным целям, и они должны оставаться разделенными (по крайней мере, для использования более чем одного ядра).В качестве примера (это не совсем так) вы можете подумать об этом как об одном сервере, управляющем аутентификацией пользователя, о другом, который служит игровым движком, о другом, как сервер pubsub.По логике «приложение» только одно, и клиенты подключаются к тому или иному серверу в зависимости от их конкретной потребности.

Теперь я пытаюсь найти наилучший способ запуска такой установки в производственной среде.

Самым простым способом может быть сценарий bash, который будет запускать каждый сервер в фоновом режиме один за другим.Одна из проблем этого подхода заключается в том, что в случае, если мне нужно перезапустить «приложение», я должен был сохранить pid каждого сервера и уничтожить каждый из них.

Другим способом было бы использование процесса узла, который будет запускатьсякаждый сервер в качестве своего дочернего (используя child_process.spawn).Узел нереста узлов.Это глупо по какой-то причине?Таким образом, мне нужно будет убить один процесс, когда мне нужно будет остановить / перезапустить все приложение.

Как вы думаете?

Ответы [ 3 ]

2 голосов
/ 03 сентября 2011

Если вы работаете в Linux или другой * nix ОС, вы можете попробовать написать скрипт инициализации, который запускает / останавливает / перезапускает ваше приложение. вот пример.

1 голос
/ 06 сентября 2011

В итоге я создал сценарий оболочки / супервизора в Node, который использует child_process.spawn для выполнения всех трех процессов.

  • передает каждый процесс stdout / stderr на свой stdout / stderr
  • он перехватывает ошибки каждого процесса, регистрирует их, затем завершает работу (как если бы это была его ошибка)
  • Затем он разветвляется и демонизирует себя

Я могу все остановить, используя парадигму запуска / остановки.

Теперь, когда у меня есть надежный демон, я могу создать сценарий Unix, чтобы запускать / останавливать его при загрузке / завершении работы как обычно (как говорит @Levi)

См. Также мой другой (связанный) вопрос: NodeJS: этот код будет работать многоядерным или нет?

1 голос
/ 31 августа 2011

Используйте специальные инструменты для мониторинга процесса.Например, Monit может отслеживать ваши процессы по их pid и перезапускать их, когда они умирают, и вы можете вручную перезапустить каждый процесс с помощью monit-cmd или с их веб-интерфейсом.

Так что в вашем примере вы бы создали 3независимых процессов и скажите monit контролировать каждый из них.

...