创建Node.js应用程式是很简单的。
var app = require('express')();
app.get('/',function(req,res){
res.send("Hello world!");
});
但是,假设人们开始迷恋你Hello World!
应用和耗尽你的资源。 这怎么可能例子来实践扩大规模? 我不明白,因为是的,你可以在不同的计算机上打开多个node.js的情况-但是,当有人访问http://your_site.com/其直接目的是特定的机器上,该特定端口,特定节点处理。 又怎样?
有很多很多方法可以解决这个问题,但它归结为两件事情:
- 能够使用每服务器支持的内核
- 能够扩展到超过一个以上的服务器。
节点集群
对于第一种选择,可以用户node-cluster
或相同的溶液作为用于Seconde系列选项。 node-cluster
( http://nodejs.org/api/cluster.html )本质上是一个内置的方式叉节点处理成一个主机和多个工人。 通常情况下,你会想要1个主站和n-1到n的工人(n为您提供核数)。
负载均衡
第二个选择是使用分布在多个劳动者的请求负载均衡器(在同一台服务器上,或在服务器)。
在这里,你有多种选择为好。 这里有几个:
- 基于节点的选择: 加载使用HTTP代理的node.js平衡
- nginx的: Node.js的+ Nginx的-现在怎么办? (使用多于一个的
upstream
服务器) - 阿帕奇:(没有明确的有用的链接我可以使用,但一个有效的选项)
还有一两件事,一旦你开始有服务请求的多个进程,你可以不再使用内存来存储状态,你需要一个额外的服务来存储共享状态,Redis的( http://redis.io )是一种流行的选择,但由绝不是唯一的一个。
如果你使用的服务,如cloudfoundry,Heroku的,和其他人,他们将它设置为你,让你只需要担心你的应用程序的逻辑(和使用服务来处理共享状态)
我一直在与节点相当长的一段时间,但最近有机会尝试缩放我节点应用程式,现在已经研究了一段时间的同一主题和所遇到下列先决条件缩放:
我的应用程序需要提供一个分布式系统上节点的每个运行多个实例
每个系统都应该有一个负载平衡器,可以帮助跨节点实例分配流量。
应该有一个主负载平衡器,应该在分布式系统跨节点实例分配流量。
主平衡器应始终运行还是应该有一个可靠的重启机制来保持应用程序的稳定。
对于以上要求我遇到以下情况:
使用模块,如簇开始节点的多个实例中的系统。
始终使用nginx的。 这是最简单的机制之一,用于创建我经历了这么远来到负载平衡器
使用HAProxy的充当主负载平衡器。 一个几个指针如何使用它,并保持它的运行下去。
有用的资源:
- 水平扩展的Node.js和WebSockets的。
- 使用集群采取多核的优势。
我会继续更新这个答案,因为我进步。
使用多台机器的基本方法是把它们背后负载平衡器,并指出所有的流量负载均衡。 这样一来,有人要http://my_domain.com ,它会在负载均衡机点。 唯一的目的(在这个例子不管怎么说,在理论上还可以做得更多)负载平衡器的是交通委派运行你的应用程序给定的机器。 这意味着,你可以运行应用程序,但是外部机器(在这种情况下,浏览器)的机器x个可以去的负载均衡的地址,并获得其中之一。 客户端没有(和不具有)知道什么机器实际处理其请求。 如果您正在使用AWS ,这是很容易设置和管理这一点。 需要注意的是帕斯卡的回答有关于你的选择更详细的在这里。
随着节点而言,你可能想看看节点群集模块。 我真的没有与这个模块的经验很多,但它应该让你产卵一个机器上的应用程序的多个过程中的所有共享相同的端口。 此外节点,它仍然是实验,我不知道这将是多么可靠。
我建议你看看到http://senecajs.org ,对Node.js的一个微服务工具包 这是一个很好的起点,适合初学者,并开始在“服务”,而不是monolitic应用思考。
话虽如此,构建分布式applcations是很难的,需要时间来学习,需要很多的时候掌握它,而且通常你会面临很多权衡性能,可靠性,manteinance等之间