创建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个master和n-1到n个worker(n是可用内核的数量)。
第二种选择是使用负载均衡器,在多个工作者(在同一服务器上或服务器上)之间分配请求。
这里有多种选择。以下是一些:
upstream
服务器)还有一件事,一旦你开始有多个进程提供请求,你就不能再使用内存来存储状态,你需要一个额外的服务来存储共享状态,Redis(http://redis.io)是一个受欢迎的选择,但绝不是唯一的选择。
如果您使用cloudfoundry,heroku等服务,他们会为您设置,因此您只需担心应用程序的逻辑(并使用服务来处理共享状态)
我已经在节点上工作了很长一段时间,但最近有机会尝试扩展我的节点应用程序,并且已经研究了相同的主题一段时间了,并且已经遇到了以下扩展的先决条件:
对于上述要求,我遇到了以下情况:
有用的资源:
随着我的进步,我会不断更新这个答案。
使用多台计算机的基本方法是将它们置于负载均衡器后面,并将所有流量指向负载均衡器。这样,有人去http://my_domain.com,它会指向负载均衡器机器。负载均衡器的唯一目的(对于此示例,无论如何;理论上可以做得更多)是将流量委派给运行应用程序的给定计算机。这意味着您可以拥有运行应用程序的x个计算机,但是外部计算机(在本例中为浏览器)可以转到负载平衡器地址并转到其中一个。客户端不(并且不必)知道实际处理其请求的机器。如果您使用的是AWS,那么设置和管理它非常容易。请注意,Pascal的答案在此处提供了有关您的选项的更多详细信息。
有了Node,您可能需要查看Node Cluster模块。我对这个模块并没有很多经验,但是它应该允许你在一台共享同一端口的机器上生成应用程序的多个进程。还节点它仍然是实验性的,我不确定它会有多可靠。
我建议你看一下http://senecajs.org,一个Node.js的微服务工具包。对于初学者来说,这是一个很好的起点,并开始考虑“服务”而不是单一的应用程序。
话虽如此,构建分布式应用程序很难,花时间学习,花费大量时间来掌握它,通常你会在性能,可靠性,manteinance等方面面临很多权衡。