2013-10-10 2 views
2

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

Вот настройка, о которой я думаю:

Фронтальный сервер, расположенный за балансировщиком нагрузки, будет иметь прокси-сервер node-http-proxy, и он будет принимать входящие запросы на порт 80. Этот обратный прокси направит запросы на соответствующие узловые приложения, которые работают на разных портах этого сервера. напр:

var http = require('http'), 
    httpProxy = require('http-proxy'); 

var options = { 
    router: { 
    'myapphost.com/MyFirstApp': 'myapphost.com:3000', 
    'myapphost.com/MySecondApp': 'myapphost.com:3001' 
    } 
} 

// ...and then pass them in when you create your proxy. 
var proxyServer = httpProxy.createServer(options).listen(80); 

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

Мои вопросы:

  • Правильно ли это дизайн и стратегия?
  • Некоторые из наших приложений должны быть работоспособными. Каков наилучший способ сделать государственное управление в таком виде установки? Использование внешнего хранилища сеансов, такого как Redis, является правильным подходом? Или привязать сеанс к данному интерфейсу и использовать хранилище сеансов в памяти?

UPDATE:

Поскольку я отвечал на этот вопрос, после разговора с несколькими людьми, есть еще один подход, который пришел up--

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

Пожалуйста, поделитесь своими мыслями и по этому подходу.

ответ

0

Это правильный подход, а также вы упомянули redis, или вы можете использовать любые другие хранилища сеансов, такие как connect-mongo или любое другое хранилище сеансов.
Если вы используете Load Balancer, я думаю, у вас есть несколько экземпляров на тех же серверах? Если это так, вам нужно проанализировать производительность сеанса и то, как он будет использоваться, а затем решить, нужно ли вам обходить сеансовое хранилище/базу данных или одну отдельную машину, с которой будет работать каждый сбалансированный экземпляр.

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

Также вам нужно подумать о статических носителях, возможно, для его сохранения отдельно (S3 + CloudFront?).
Как и как вы собираетесь доставлять обновления в экземпляры и перезапускать их, сохраняя при этом согласованность логики приложений.

Эта структура, а также позволяет возможности для тестирования AB (вы можете загрузить баланс конкретных случаев с «тестированием версией» приложение. В то время как большинство будет сбалансированы по основным инстанциям.

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

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