如何制作分布式node.js应用程序?
创建node.js应用程序非常简单。
var app = require('express')();
app.get('/',function(req,res){
res.send("Hello world!");
});
但是假设人们开始沉迷于你的Hello World!
应用程序并耗尽了你的资源。这个例子如何在实践中扩大规模?我不明白,因为是的,你可以在不同的计算机上打开几个node.js实例 - 但是当有人访问,它直接针对那个特定的机器,那个特定的端口,那个特定的节点进程。又怎样?
有很多方法可以解决这个问题,但归结为两件事:
- 能够为每台服务器使用更多核心
- 能够扩展到超过一个服务器。
node-cluster
对于第一个选项,您可以使用node-cluster
或与seconde选项相同的解决方案。 node-cluster
(http://nodejs/api/cluster.html)本质上是一种内置的方法,可以将节点进程分成一个主服务器和多个工作服务器。通常,您需要1个master和n-1到n个worker(n是可用内核的数量)。
load balancers
第二种选择是使用负载均衡器,在多个工作者(在同一服务器上或服务器上)之间分配请求。
这里有多种选择。以下是一些:
- 基于节点的选项:Load balancing with node.js using http-proxy
- nginx:Node.js + Nginx - What now?(使用多个
upstream
服务器) - apache :(我没有明确有用的链接,但是有效的选项)
还有一件事,一旦你开始有多个进程提供请求,你就不能再使用内存来存储状态,你需要一个额外的服务来存储共享状态,Redis(http://redis.io)是一个受欢迎的选择,但绝不是唯一的选择。
如果您使用cloudfoundry,heroku等服务,他们会为您设置,因此您只需担心应用程序的逻辑(并使用服务来处理共享状态)