2015-09-29 1 views
4

Я хочу создать чат-серверы в nodejs с помощью express.I использовал кластерный модуль для масштабирования сервера среди нескольких ядер, но как я масштабируюсь до другой системы?Масштабирование сервера Nodejs для нескольких систем?

+1

Взгляните на https://www.amqp.org/ (также такие вещи, как zeromq, rabbitmq и т. Д.) – zamnuts

+1

взгляните на sth, как deis, flynn. это похоже на героку. масштабирование производится так же просто, как «scale processName = xx» –

ответ

1

Поскольку Node.js не поддерживает разделяемую память, распространение процессов Node.js на нескольких компьютерах обеспечивает такой же опыт, как использование кластера для распределения процессов через несколько ядер - если ваше приложение может работать как несколько независимых процессов в одном системы, то он также может быть распределен для запуска как несколько независимых процессов в нескольких системах.

Отлично, так что это еще одна вещь, о которой нужно беспокоиться! Теперь есть много инфраструктурных решений, которые позволяли бы абстрактно запускать кластеры на нескольких системах, но ваше приложение в противном случае не обращает внимания на любой, который вы можете выбрать.

Что касается вас, тем не менее, в рамках вашего приложения и любого отдельного процесса, он обнаруживает внешние службы, обмениваясь информацией с процессами по всей инфраструктуре и взаимодействуя с процессами внутри кластера. Опять же, есть много решений, которые сократят любое конкретное требование, которое ваше приложение должно решить.

До сих пор сообщество Node.js предпочитало простые подходы, которые являются высокоспециализированными для решения конкретной проблемы, а затем уходят с вашего пути.Например:

  • Клиенты и серверы веб-сокетов: низкая латентность внутри кластера; также хорошо работает во всей сети, когда вы можете просто отправить некоторые данные и продолжить свою жизнь, но это приведет к сканированию, если вам нужно синхронизировать процессы, такие как отправка некоторых данных, ожидание и бездействие до тех пор, пока результат не будет возвращается
  • Redis: кластеры легко установить, экземпляры обрабатывать открытие на их собственных, достаточно атомарных операций, чтобы обеспечить твердый подход к обмену данными между различными экземплярами и паб-суб поддержки обеспечивает для низкой латентностью IPC
  • ZMQ: хвалят за интеллектуальные высокодоступные соединения, вы можете разработать любой протокол обмена сообщениями с помощью нескольких десятков строк кода, которые следующий человек, поддерживающий ваше приложение, сможет рассуждать о
  • etcd: распределенное, согласованное хранилище ключей; низкая инфраструктурная накладная, позволяет осуществлять прямое обнаружение услуг сверху, что прекрасно сочетается с любым инфраструктурным решением.
  • Consul: на основе serf, как и т. д., но сильно упрямый, обеспечивает обнаружение сервиса на стероидах со многими дополнительными тонкостями; если вам нравится управлять делами самостоятельно и у вас есть время для инвестиций, я бы от всей души рекомендовал дальнейшее расследование.

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

0

На самом деле может быть несколько ответов на этот вопрос, потому что ответ зависит от того, как вы хотите общаться между узлами, как вы хотите назначать задачи узлам и как управлять сбоями.

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

несколько подходов:

1) Использование балансировки нагрузки в передней и распределить нагрузку между машиной. Я думаю, это самый простой подход.

2) Используйте систему обмена сообщениями, такую ​​как RabbitMQ/ActiveMQ (или любую другую систему AMQP) для связи между узлами и пусть будет пул главных узлов, который назначает задачи определенным узлам и связывается с узлом через AMQP-протокол.

0

Если вы используете диспетчер процессов, такой как PM2, он позаботится о запуске вашего приложения-узла на разных или тех же машинах, но для обработки нескольких машин вы должны посмотреть на Марионеток, Шеф-поваров или Аналогов для масштабирования. Если вы находитесь на AWS, EC2 может быть настроен так, чтобы делать это автоматически.

Смежные вопросы