Горизонтальное масштабирование NodeJS

Я был разработчиком веб-приложений ruby/php в течение достаточно долгого времени, и я привык к идее горизонтального масштабирования экземпляров сервера для обработки большего количества запросов. Горизонтальное масштабирование — это означает, что отдельные экземпляры приложения, находящиеся за балансировщиком нагрузки, не имеют ничего общего и не знают друг о друге.

Главный вопрос, который у меня есть, заключается в том, что, поскольку Node.js и его акцент на evented-io позволяет одному блоку, на котором работает сервер node.js, обрабатывать «тысячи» одновременных запросов — используется ли балансировка нагрузки/горизонтальное масштабирование для масштабирования приложений nodejs ? Ограничивается ли масштабирование приложения узла вертикальным масштабированием (затрачивая больше оперативной памяти/вычислительной мощности на проблему)?

Мой второй вопрос связан с горизонтальным масштабированием node.js и веб-сокетами. Я видел довольно много руководств по чату Node.js, в которых используются веб-сокеты. (избранное: http://martinsikora.com/nodejs-and-websocket-simple-chat-tutorial)

Поскольку веб-сокеты эффективно поддерживают открытую линию связи между браузером и сервером, может ли горизонтально масштабируемая архитектура, типичная для мира PHP/Ruby, привести к тому, что приложение чата, подобное объясненному в ссылке, сломается, поскольку новые запросы на подключение к веб-сокету будут назначены разным процессам/серверам, и не будет одного центрального ресурса, отслеживающего всех подключенных клиентов?


person Casey Flynn    schedule 12.11.2012    source источник


Ответы (3)


Node.js поддерживает горизонтальное масштабирование во многом так, как вы описываете через встроенный модуль cluster.

Что касается вашего второго вопроса об использовании websockets/socket.io в этой среде, вы должны использовать что-то вроде Redis для хранения общего состояния в нескольких экземплярах вашего приложения, как описано здесь.

person JohnnyHK    schedule 12.11.2012
comment
Это старый вопрос, но я использую mongodb для хранения и извлечения всех данных приложения чата. Поскольку я хочу горизонтально масштабировать свое приложение, поскольку мое приложение для чата не работает, когда у меня более одного сервера. Что мне делать, если я полностью удаляю mongodb и использую Redis? Или есть лучшее решение. - person DragonBorn; 22.11.2017

Функциональность кластера Node.js ограничена одним сервером с несколькими процессорами. В основном он использует количество процессоров на сервере. Я думаю, что вопрос больше о сценарии, когда мы хотим горизонтально масштабироваться с несколькими серверами с фасадом балансировщика нагрузки.

person Pramma    schedule 27.02.2015
comment
И чтобы ответить на вопрос о сокете, как и любой вызов сервера, вызов создания сокета будет сбалансирован по нагрузке и, скажем, достигает узла Nx, на время жизни веб-сокета это TCP-соединение остается открытым. т. е. вся связь между браузером и сервером, сервером и браузером через веб-сокет всегда будет обслуживаться Nx. - person Pramma; 27.02.2015

Если у вас есть экземпляры node.js, распределенные по нескольким серверам (горизонтальное масштабирование), они будут служить той же цели, вам необходимо правильно запрограммировать их для поддержки этого типа установки.

person mskw    schedule 28.10.2015