Узел: Scale socket.io / nowjs - масштабируется по разным экземплярам

Прежде чем приступить к написанию своего приложения, мне нужно знать, что делать, когда одного экземпляра node.js (express и (socket.io или nowjs)) больше не достаточно.

Вы можете сказать мне сейчас, что мне не нужно заботиться о масштабировании, пока не настало время, но я не хочу разрабатывать приложение и сталкиваться с проблемами, потому что вы не можете легко масштабировать socket.io или nowjs для нескольких экземпляров.

Я недавно прочитал, что socket.io теперь поддерживает способ масштабирования с использованием Redis (с которым у меня тоже нет опыта). Nowjs построен на socket.io - работает ли он так же? На сайте http://nowjs.org/ вы можете прочитать, что "распределенная версия NowJS" находится в стадии разработки и будет стоить денег.

3 ответа

Решение

Если вам нужно масштабировать узел, первое место, которое обычно начинают люди, - это установка балансировщика нагрузки перед несколькими экземплярами узла. Стандарт для этого сегодня - nginx, хотя я хотел бы проверить 'упругость' балансировщика узлов, появившуюся недавно. Вот пример использования обратного прокси-сервера nginx для управления несколькими экземплярами узлов:

Node.js + Nginx - что теперь?

Второе, что вы упоминаете, это socket.io/nowjs. В зависимости от того, как вы используете эти фреймворки, вы можете столкнуться с ситуацией, когда вы захотите обмениваться контекстом между клиентами, которые используют несколько экземпляров node.js. Если это так, я бы порекомендовал использовать постоянное хранилище, такое как redis, для преодоления разрыва между экземплярами вашего узла. Вот пример:

Как повторно использовать подключение Redis в socket.io?

Надеюсь, этого достаточно, чтобы начать чтение, дайте мне знать, если у вас есть какие-либо вопросы.

Удачного кодирования!

Еще одна полезная ссылка на "Scaling Socket.IO" https://github.com/dshaw/talks/tree/master/2011-10-jsclub (слайды и пример приложения)

В качестве пояснения к обсуждению использования nginx для обратного прокси с socket.io, как я понимаю, по крайней мере, стабильная версия nginx 1.0.x не поддерживает проксирование соединений http/1.1 (что необходимо для заставить socket.io работать с websockets). здесь есть обходной путь, описанный здесь: http://www.letseehere.com/reverse-proxy-web-sockets чтобы заставить его работать, или используйте что-то вроде этого: https://github.com/nodejitsu/node-http-proxy вместо этого прокси, ребята из nodejitsu говорят, что это должно поддерживать это.

Другие вопросы по тегам