如何制作分布式node.js应用程序?

Mai*_*tor 41 scalability http node.js

创建node.js应用程序非常简单.

var app = require('express')();
app.get('/',function(req,res){
    res.send("Hello world!");
});
Run Code Online (Sandbox Code Playgroud)

但是假设人们开始沉迷于你的Hello World!应用程序并耗尽你的资源.这个例子如何在实践中扩大规模?我不明白,因为是的,你可以在不同的计算机上打开几个node.js实例 - 但是当有人访问http://your_site.com/时,它直接针对那个特定的机器,那个特定的端口,那个特定的节点进程.又怎样?

Pas*_*cle 35

有很多方法可以解决这个问题,但归结为两件事:

  1. 能够为每台服务器使用更多核心
  2. 能够扩展到超过一个服务器.

节点集群

对于第一个选项,您可以使用node-cluster与seconde选项相同的解决方案. node-cluster(http://nodejs.org/api/cluster.html)本质上是一种内置的方法,可以将节点进程分成一个主服务器和多个工作服务器.通常,您需要1个master和n-1到n个worker(n是可用内核的数量).

负载平衡器

第二种选择是使用负载均衡器,在多个工作者(在同一服务器上或服务器上)之间分配请求.

这里有多种选择.以下是一些:

还有一件事,一旦你开始有多个进程提供请求,你就不能再使用内存来存储状态,你需要一个额外的服务来存储共享状态,Redis(http://redis.io)是一个受欢迎的选择,但是不是唯一的.

如果您使用cloudfoundry,heroku等服务,他们会为您设置,因此您只需担心应用程序的逻辑(并使用服务来处理共享状态)


I_D*_*ing 5

我从事节点工作已经有一段时间了,但是最近有机会尝试扩展我的节点应用程序,并且现在已经在同一个主题上进行了一段时间的研究,并且遇到了以下扩展先决条件:

  1. 我的应用程序需要在每个运行多个节点实例的分布式系统上可用

  2. 每个系统都应具有一个负载平衡器,以帮助在节点实例之间分配流量。

  3. 应该有一个主负载均衡器,该负载均衡器应在分布式系统上的节点实例之间分配流量。

  4. 主平衡器应始终处于运行状态,或者应具有可靠的重启机制以保持应用程序稳定。

对于上述条件,我遇到了以下问题:

  1. 使用诸如cluster之类的模块来启动系统中节点的多个实例。

  2. 始终使用nginx。这是迄今为止我遇到的最简单的创建负载均衡器的机制之一

  3. 使用HAProxy充当主负载平衡器。一个几个指针如何使用它,并保持它的运行下去。

有用的资源:

  1. 水平缩放node.js和websockets。
  2. 使用群集来利用多核的优势。

随着我的进步,我将不断更新此答案。