LINUX.ORG.RU

Сервер из нескольких nodejs-процессов вместо одного. Есть ли смысл?

 ,


0

1

Пишу управлялку для умного дома. Вычленил пять сервисов, мне необходимых

  • Сервис, взаимодействующий с димерами/реле (по telnet, с ПО от производителя)
  • Сервис, взаимодействующий с девайсом, управляющим кондиционерами (по rs232)
  • Сервис, отвечающий за сцены (сцена - это несколько устройств, включаемых одним нажатием. Создание, включение, выключение, редактирвание)
  • Сервис, отвечающий за события (активация устройств в зависимости от времени, температуры, освещенности, ...)
  • Web-сервис, умеющий отдавать JSON клиентам

    .

    И возникла идея сделать каждое приложение независимой сущностью отдельно запускаемым экземпляром nodejs. А взаимодействие между ними осуществлять через Redis pub/sub. Или через http.

    Но что-то терзают меня сомнения что плохо так делать и лучше все эти сервисы собрать в один node-экземпляр.

    Подскажите, почему я не прав и дайте советов мудрых как лучше поступить )

★★★★★

Последнее исправление: cetjs2 (всего исправлений: 8)
Ответ на: комментарий от makoven

Ну лень мне перфоратор осваивать.

Проще эрланга я языка не видел.

хвостатый зверек, вызывающий сам себя, и написанная фюррером инструкция

Ладно я понимаю там комбинаторов сложных бояться, монад или продолжений, но если с рекурсией проблемы то тут уже сложно помочь.

loz ★★★★★
()
Ответ на: комментарий от loz

Раньше я тоже, начитавшись ЛОРа, хватался то за Хаскель, то за Эрланг, то за, прости г-споди, Окамл, ну и всякие питоны-руби. Но как-то не давалось. Видать, умом не вышел. Решил не распыляться, а остановиться на node.js. Потомучто люблю браузеры и все что с ними связанное. И пошло дело потихоньку. Монады и котоморфизм оставил напотом, когда к успеху приду )

makoven ★★★★★
() автор топика

В вашем случае будет оверинжениринг, бессмысленный и беспощадный.

Не уподобляйтесь пионерам, которые на хелловордах пытаются дизайнить масштабируемые системы с нагрузкой в десятки миллионов хитов :)

Vit ★★★★★
()
Последнее исправление: Vit (всего исправлений: 1)
Ответ на: комментарий от makoven

Чувак, я за лисп со схемой брался раз пять. Так и не понял нифига как оно работает. Хаскель - октрыл и закрыл, хрень какая-то функциональная. А вот эрланг ты зря хаишь - там самое сложное это рекурсия с аккумулятором. Главное её освоить - дальше там как по маслу, ничего сложного нет.

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

В любом случае успехов.

nanoolinux ★★★★
()
Ответ на: комментарий от Vit

Поковыряйте документацию на connect/express. Там можно несколько компонент цеплять на общий роутер, без извращений с кучей процессов на пустом месте. Получится нормальное разделение кода с хорошей изоляцией данных. Если вдруг потом появятся __веские__ причины разносить на отдельные части - будет не трудно.

А вместо редиса возможно будет проще взять sqlite (хотя тут не уверен - недостаточно подробностей)

Vit ★★★★★
()
Ответ на: комментарий от nanoolinux

Хаскель - […] хрень

эрланг ты зря хаишь

qsort1([]) ->
    [];
qsort1([H | T]) -> 
    qsort1([ X || X <- T, X < H ]) ++ [H] ++ qsort1([ X || X <- T, X >= H ]).
qsort1 :: Ord a => [a] -> [a]
qsort1 []     = []
qsort1 (p:xs) = qsort1 lesser ++ [p] ++ qsort1 greater
    where
        lesser  = [ y | y <- xs, y < p ]
        greater = [ y | y <- xs, y >= p ]

Одно и то же ведь.

PolarFox ★★★★★
()
Ответ на: комментарий от nanoolinux

Может и зря хаю. Прочитал пол книги по ерлангу. Общаться между процессами понравилось. А все остальное - не понравилось )

makoven ★★★★★
() автор топика
Ответ на: комментарий от Vit

Не совсем понял как можно осуществить общение между компонентами через роутер express'а или через sqlite )

Единственное, что придумал для общения модулей в рамках одного процесса - Аггрегатор событий. В каждый модуль передаем один и тот же глобальный eventEmitter, и реализовываем pub/sub поверх этого дела

makoven ★★★★★
() автор топика
Ответ на: комментарий от makoven

Я думал вам надо чтобы интерфейсы наружу торчали, и состояния сохранялись. Ну тогда так:

1. Сначала посмотрите, нужны ли вам события вообще, и нельзя ли просто обойтись вызовом функций, разложенных по «библиотекам».

2. Если связность все равно высокая, попробуйте паттерн «медиатор». Но только программный, а не через редис. Библиотек навалом, будет дешево и сердито. У меня так https://github.com/nodeca/nodeca.core/blob/master/lib/system/wire.js , но там с сортировкой обработчиков по приоритетам, вам наверняка сойдет что-то попроще.

Vit ★★★★★
()
Ответ на: комментарий от ixrws

Да чо уж там, давайте сразу кролика и зоокипер втыкать.

Vit ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.