2013-10-10 187 views
2

我们需要在一组服务器上部署多个节点/快速应用程序(位于负载均衡器后面)。这些应用程序在功能上完全相互独立。我先说明我在想这样做的,然后我在最佳实践方面寻找输入,如果有在我的设计中的任何红旗等在节点群集上运行多个节点应用程序

这里是我想的设置:

负载均衡器后面的前端服务器将运行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测试(可以负载平衡与应用程序的“测试版”的具体实例。虽然多数会跨主要情况进行平衡。

这一切都取决于你的规模,以及,有时你真的不需要那么多,只是准备在将来改进和扩大规模。

相关问题