Node.js多核利用模块cluster负载均衡_第1页
Node.js多核利用模块cluster负载均衡_第2页
Node.js多核利用模块cluster负载均衡_第3页
Node.js多核利用模块cluster负载均衡_第4页
Node.js多核利用模块cluster负载均衡_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Node.js多核利用(lìyòng)模块cluster辅助(fǔzhù)均衡共十四页回顾(huígù)Node内置的cluster模块Node.js固有的单线程模型经常被认为是它的一个软肋。不管你的机器上有多少CPU内核,Node.js能用上的也仅仅是其中之一(某些操作会被有条件地卸载到线程池中。大多数程序只是在CPU的总时间上分了一杯羹,所以更好地利用可用的处理能力并不能起到多大作用(zuòyòng))。所以Node.js从v0.8开始,新增加了一个内置的‘cluster’模块。你可以用cluster模块设置一个主进程作为管理者,由一或多个工人进程完成实际工作。cluster模块最神奇之处在于所有工人线程都可以绑定到相同的请求处理端口和地址上。另外,它可以确保接进来的连接会被均匀地分配给监听着的工人线程...最起码理论上是这样的。共十四页用现实检验(jiǎnyàn)理论从操作系统的角度来看这是可以理解的:上下文切换(挂起一个进程,然后重新激活另一个)是相当昂贵的操作。如果你有n个进程全都等在同一个socket上,那么(nàme)唤醒最近被阻塞的进程是明智之举,因为那样可以最大限度地避免上下文切换。(当然,调度器是一种复杂而又多变的野兽;上面只是对真实情况泛泛的解释。基本前提是那些得到优待的进程会仍然受到优待)。共十四页Node.jsv0.8和v0.10中分配连接的算法(suànfǎ)很简单。当工人进程调用http.Server#listen()或net.Server#listen()时,Node.js会给主进程发送一条消息,让它创建一个服务器socket,绑定好,并分享给这个工人进程。如果已经有绑定好的socket了,主进程就会跳过“创建和绑定”那一步,只需分享已有的socket就可以了Node.jsV0.12新特性之Cluster轮转法负载均衡cluster模块换成了round-robin方式共十四页在Nodejs中使用集群还是不容易的。Javascript的单线程属性让nodejs下的应用很难使用现代机器的多核特性。比如下面的代码实现了一个http服务器的主干部分。这部分代码只会执行(zhíxíng)在一个线程上,不管这段代码运行的机器是单核的cpu还是1000个内核的cpu。共十四页varhttp=require("http");varport=parseInt(process.argv[2]);http.createServer(function(request,response){console.log("Requestfor:"+request.url);response.writeHead(200);response.end("helloworld\n");}).listen(port);共十四页使用(shǐyòng)多核特性只需要一点修改,上面的代码就可以(kěyǐ)把cpu的所有核心都用起来。上面的示例代码将使用cluster模块重构。cluster模块可以(kěyǐ)让你很容易的创建多个分享端口的进程。每一个进程使用一个系统核心,也就是代码中的numCPUs变量中cpu核心的一个。每一个子进程都实现了HTTPserver,并监听指定的端口。共十四页共十四页在Node.js这里,增加(zēngjiā)更多CPU核数其实也不难做到,使用PM2如下命令:pm2startapp.js-imax(无需修改任何代码从单核垂直扩展到多核)共十四页多机器(jīqì)的均衡使用cluster模块,你就可以更高效的使用硬件。然而,你还是被限制在单一的机器上。如果你的应用有客观的访问量,你最终还是把负载分部在不同的机器上。使用reverseproxyserver可以把并发的访问负载到不同的服务器上。Nodejitsu开发了node-http-proxy模块,一个开源的nodejs应用代理服务。使用以下命令可以安装(ānzhuāng)这个模块:npminstallhttp-proxy实际的使用可以参考以下代码。在这里例子中负载被分发到两台服务器上。首先测试反转代理,确保HTTPserver运行在8080和8081两个端口上。接下来,运行反转代理,然后用浏览器访问这个代理。如果一切正常的话,你会发现请求被两个服务器交替处理。当然,这个例子只使用了一台机器。然而,如果你有多台机器的话,你可以在一台机器上运行反向代理服务器,其他的机器上运行HTTPserver。共十四页共十四页使用nginx负载(fùzài)均衡使用nodejs写的反向代理有一个好处是你使用的技术都是一样的。但是,在生产环境下,更多使用的是nginx来处理负载均衡。nginx是一个开源的HTTPserver和反向代理工具,尤其擅长处理静态文件,比如:CSS和HTML。因此(yīncǐ),nginx常被用于处理站点的静态文件,和分发动态请求到nodejs的服务器上。要实现nginx的负载均衡,只需要安装nginx,之后把nodejs服务器作为upstreamresource添加在配置文件中。配置文件的路劲一般是{nginx-root}/conf/nginx.conf,{nginx-root}是nginx安装的根目录。整个的配置文件请参考下面的示例。当然,我们只需要用到其中的一小部分。Nginx并不支持单机同一个端口的负载平衡共十四页本教程旨在介绍如何把单线程的Nodejs应用运行在多台机器的多个核心上。你也可以学到如何使用nodejs或者nginx建立一个负载均衡。当然本文不是深入的介绍如何在产品环境下运行的。因此(yīncǐ),如果你使用的是nginx,还有很多其他的可以做的,比如缓存,来提高系统性能。你也会需要使用forever,如果崩溃的话这个工具可以重启你的nodejs进程。共十四页内容(nèiróng)总结Node.js多核利用模块cluster。另外,它可以确保接进来的连接会被均匀地分配给监听着的工人线程...最起码理论上是这样的。Javascript的单

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论