我们需要在一组服务器(负载均衡器后面)上部署多个 Node/Express 应用程序。这些应用程序在功能方面完全相互独立。我将首先解释我是如何考虑这样做的,然后我正在寻找最佳实践方面的输入,如果我的设计中有任何危险信号等。
这是我正在考虑的设置:
负载均衡器后面的前端服务器将运行 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 等外部会话存储是正确的方法吗?或者将会话固定到给定的前端机器并使用内存会话存储?
更新:
自从我发布了这个问题,在与几个人交谈之后,又出现了一种方法——
我可以在我的前端机器前使用 Nginx 作为反向代理和负载均衡器。每台前端机器将只服务一个应用程序。该应用程序可以再有一台备份机器。(取决于要求)。因此,如果我有三个应用程序,我将拥有三台独立的机器,每台机器服务于不同的应用程序。Nginx 会在 80 端口接收所有请求,Nginx 反向代理会将请求路由到正确的前端机器。每台机器都将拥有 Node 集群以利用多核系统。这种方法的优点是 - 每个应用程序的部署变得更加容易。此外,我们可以单独扩展每个应用程序。
也请分享您对这种方法的看法。