Масштабирование Node.JS на нескольких ядрах / серверах - PullRequest
13 голосов
/ 23 марта 2011

Хорошо, у меня есть идея, которую я хочу изучить, но прежде чем мне это нужно, я должен полностью понять несколько вещей.

Во-первых, я думаю, что я собираюсь продолжить работу с этой системой, чтобы иметь 3 сервера, которые описаны ниже:

Первый сервер будет моим вебом Front End , это сервер, который будет прослушивать соединение и отвечать на запросы клиентов, этот сервер будет иметь 8 ядер и 16 ГБ ОЗУ.

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

Третий сервер будет моим сервером хранения, где будут храниться загружаемые файлы.

Мои первые вопросы:

  • На моем внешнем сервере у меня 8 ядер, как лучше масштабировать узел так, чтобы нагрузка распределялась по ядрам?

Мой второй вопрос:

  • Есть ли какая-нибудь система, которую я могу включить в свою прикладную среду, которая позволит мне общаться с другими ядрами и передавать сообщения для сохранения ввода / вывода.

и последний вопрос:

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

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

Ответы [ 3 ]

11 голосов
/ 23 марта 2011

На моем сервере переднего плана у меня 8 ядер, как лучше масштабировать узел так, чтобы нагрузка распределялась по ядрам?

Попробуйте взглянуть на node.js cluster модуль, являющийся многоядерным диспетчером серверов.

3 голосов
/ 23 марта 2011

По поводу вашего первого вопроса: используйте кластер (мы уже используем его в производственной системе, работает как шарм).

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

Для вашего третьего требования я бы использовал протокол с низкими издержками, такой как NFS, или (если вы действительно сходите с ума, когда речь идет об инфраструктуре) высокоскоростной сервер SAN.

Еще один совет: используйте MongoDB в качестве базы данных. Вы можете начать с низкоуровневого оборудования и с легкостью масштабировать экземпляр базы данных, используя функции набора шардинга / репликации MongoDB (если это какое-то требование).

3 голосов
/ 23 марта 2011

Во-первых, я бы не назвал настройку, которую вы предлагаете, «масштабированием», это больше похоже на «распространение». У вас есть только один сервер приложений, обслуживающий запросы. Если вы добавите больше серверов приложений в будущем, тогда у вас будет проблема с масштабированием.

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

Я бы предложил NFS подключить каталог на сервере хранения к серверу приложений. NFS имеет относительно низкие накладные расходы. Затем вы можете получить доступ к файлам, как если бы они были локальными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...