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
有很多方法可以解决这个问题,但归结为两件事:
对于第一个选项,您可以使用node-cluster
与seconde选项相同的解决方案. node-cluster
(http://nodejs.org/api/cluster.html)本质上是一种内置的方法,可以将节点进程分成一个主服务器和多个工作服务器.通常,您需要1个master和n-1到n个worker(n是可用内核的数量).
第二种选择是使用负载均衡器,在多个工作者(在同一服务器上或服务器上)之间分配请求.
这里有多种选择.以下是一些:
upstream
服务器)还有一件事,一旦你开始有多个进程提供请求,你就不能再使用内存来存储状态,你需要一个额外的服务来存储共享状态,Redis(http://redis.io)是一个受欢迎的选择,但是不是唯一的.
如果您使用cloudfoundry,heroku等服务,他们会为您设置,因此您只需担心应用程序的逻辑(并使用服务来处理共享状态)
我从事节点工作已经有一段时间了,但是最近有机会尝试扩展我的节点应用程序,并且现在已经在同一个主题上进行了一段时间的研究,并且遇到了以下扩展先决条件:
我的应用程序需要在每个运行多个节点实例的分布式系统上可用
每个系统都应具有一个负载平衡器,以帮助在节点实例之间分配流量。
应该有一个主负载均衡器,该负载均衡器应在分布式系统上的节点实例之间分配流量。
主平衡器应始终处于运行状态,或者应具有可靠的重启机制以保持应用程序稳定。
对于上述条件,我遇到了以下问题:
使用诸如cluster之类的模块来启动系统中节点的多个实例。
始终使用nginx。这是迄今为止我遇到的最简单的创建负载均衡器的机制之一
有用的资源:
随着我的进步,我将不断更新此答案。