Задать вопрос

Как обеспечивается согласованность данных между процессами в кластере Node.js?

Господа, я новичок в мире традиционной разработки Web-бекэнда и Node.js в частности.

Обычно я разрабатываю ПО на C/C++, где мы часто имеем многопоточные приложения, в которых все объекты расположены в общей для всех потоков памяти (а для синхронизации доступа потоков к объектам используются примитивы, такие как mutex, spinlock).

Однако, кластер Node.js не многопоточный, а многопроцессовый - из-за этого у меня возникает масса теоретических вопросов. Господа, будьте добры рассказать каковы традиционные подходы при разработке ПО для кластера Node.js относительно обеспечения согласованности информации между процессами кластера? Что я должен учитывать разрабатывая бекэнд-приложение для кластера Node.js?

Например, у нас есть несколько процессов в кластере Node.js, каждый из процессов закешировал секретный код для аутентификации HTTP-запросов некоторого пользователя посредством cookies (выбрав этот код из БД). В какой-то момент один из процессов кластера решил обновить этот секретный код. Как новый секретный код должен попасть ко всем остальным процессам? Ведь когда следующие HTTP-запросы пользователя пойдут через другие процессы, то пользователь получит отказ в доступе.

Второй пример, у нас есть несколько процессов в кластере Node.js, который обслуживает онлайн-магазин одежды. По запросу пользователя один из процессов выбрал из БД список на 500 позиций одежды, подходящих под запрос пользователя. 100 позиций этот процесс отдал пользователю в качестве первой страницы ответа, остальные позиции он закешировал (чтобы не ходить в БД снова когда пользователь запросит следующие страницы). Но запросы пользователя на следующие страницы могут пойти через другие процессы, где нет этих закешированных данных - как же с этим быть? Дублировать ли закешированный список из 500 позиций на остальные процессы? Если да, то как? Или пользователь каким-то образом должен быть привязан исключительно к первому процессу? Если да, то как?

Кроме того, являются ли мои примеры корректными, практикуется ли описанное кеширование данных в бекэнд-приложениях на Node.js?
  • Вопрос задан
  • 1997 просмотров
Подписаться 12 Оценить 2 комментария
Ответ пользователя dummyman К ответам на вопрос (3)
dummyman
@dummyman
диссидент-схизматик

Однако, кластер Node.js не многопоточный, а многопроцессовый - из-за этого у меня возникает масса теоретических вопросов. Господа, будьте добры рассказать каковы традиционные подходы при разработке ПО для кластера Node.js относительно обеспечения согласованности информации между процессами кластера? Что я должен учитывать разрабатывая бекэнд-приложение для кластера Node.js?


Все как в nix. Если вы знаете плюсы, то должны понять. Как передавать данные между процессами? Ну самое быстрое - безусловно, stdin/stdout, потом уже сокеты, базы данных особо не используют, в основном, только в случаях, что бы не допустить race conditions.

Если вы работали с плюсами, то с утечками памяти у вас проблем не будет. Просто подходите к модели потребления памяти так же как и в плюсах. Опять же, не меняйсте структуру класса, после создания объекта. - И все у вас будет.

Заметил тенденцию, текут нодовские скриптецы только у программистов PHP.

Что касается магазина одежды, я бы БД там не использовал. Как бы, хз, может мое личное субъективное мнение, но я бы сделал без БД. Ну это канеш смотря сколько сотрудников подключены к этому магазину. Если их там всего 4 менеджера и 1 директор, канеш БД - это просто лишний гемор. SQL куда менее поворотливый чем работа с массивами/объектами в js, за что как раз я его очень люблю.
Ответ написан