Масштабирование Node.JS через несколько ядер/серверов

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

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

Первый сервер будет моим веб-интерфейсом, это сервер, который будет прослушивать подключение и отвечать на запросы клиентов, этот сервер будет иметь 8 ядер и 16 ГБ RAM.

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

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

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

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

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

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

и окончательный вопрос:

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

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

Ответы

Ответ 1

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

Попробуйте посмотреть node.js cluster модуль, который является многоядерным менеджером серверов.

Ответ 2

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

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

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

Ответ 3

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

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

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

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