让node.js充分利用多核服务器的性能,运用nginx做反向代理和负载均衡

之前和PHP同事讨论node.js的性能问题,看了一些node.js的相关文档,node.js除了拥有非阻塞I/O,快速开发等诸多优点外,其缺点也很明显:

1、单进程,只支持单核CPU,不能充分的利用多核CPU服务器。

2、单进程,一旦这个进程崩掉,那么整个web服务就崩掉了。(当然这个可以通过代码的健壮性来弥补)

开发环境:

vMware Red Hat 虚拟机

CPU: 两个

内存:1GB

以下有说的不对的地方还请多多指教:


近期我借助node.js开发了一套网络聊天室的应用,简单实现了大厅聊天,私聊,群聊。用户信息、群组成员信息和聊天内容等借用redis进行存储。

具体聊天室的功能请参阅我的博客:http://snoopyxdy.blog.163.com/blog/static/60117440201172510426330/

现在想要1个CPU绑定一个node.js聊天室进程,需要借助这个命令:taskset,(具体请参阅相关文档)

在linux下运行: node server.js 和 node server0.js

我设定server.js监听端口为8888,server0.js监听端口为8889.

OK,现在2个node.js聊天室程序启动起来了。但是要注意,这2个聊天室不能相互聊天,但是用户表是一个,就当他是两个不同的房间把。当然聊天室代码是一套,只是拷贝了一份server.js,在里面监听不同的端口就可以了。

然后我们要对两个node.js的进程绑定不同的CPU:(目前我的虚拟机就2个CPU)

ps -ef | grep node  (用来查看node的进程号)

root   19277  2517 15 10:12 pts/1    00:00:20 node /usr/local/node/src/chating_express/server.js

root     19283 2566 18 10:13 pts/2    00:00:20 node /usr/local/node/src/chating_express/server0.js

root     19291  2384  0 10:15 pts/0    00:00:00 grep node

找到了上述2个PID后,就利用taskset来进行CPU绑定,命令如下:(这里只写其中一个)

taskset -pc 0 19277  (其中0代表CPU0,以此类推)

pid 19277's current affinity list: 0,1

pid 19277's new affinity list: 0

出现上述信息代表绑定成功,同样方法绑定另外一个。

绑定结束后我们怎么知道他们运行在不同的CPU上呢?找另外一台虚拟机,装好webbench,分别对两个node.js聊天室端口进行压力测试,然后用top命令查看各个CPU的使用情况,(小窍门,输入TOP命令,然后按数字“1”,在压力测试时不停的按“ENTER”),结果表明在压力测试server.js端口时CPU0使用率长期保持在60%以上而CPU1则使用率长期在20%以下,而测试server0.js端口时,CPU1长期保持在60%,而CPU0则保持在20%以下,结果表明绑定成功!(之前曾经乌龙了一次,用自己的虚拟机webbench压力测试,结果发现2个CPU使用率都很高,一直检查不出问题,后来发现webbench也要使用CPU的,泪奔!!!)

然后安装nginx,对nginx进行配置,只需在配置文件中加入:(具体nginx的安装和设置请参阅相关文档)

upstream node_server_pool {

server 10.1.1.202:8888 max_fails=1;

server 10.1.1.202:8889 max_fails=1;

}

server

{

listen       80;

server_name 10.1.1.202;

location /

{

proxy_pass http://node_server_pool;

proxy_set_header Host 10.1.1.202:80;

proxy_set_header X-Forwarded-For $remote_addr;

}

然后软重启nginx服务,访问10.1.1.202这个地址80端口,就可以让nginx做反向代理了和负载均衡了。

注:上述的这些配置需要node.js服务端代码良好的支持,session的存储建议使用redis,这样可以共享session否则需要用到ip_hash了(具体nginx优化配置请参阅相关文档),在多核CPU上跑多个node.js进程他们之间的内存是不共享的,这点需要牢记啊。

由于之前曾经压力测试过node.js的空框架,发现其内存消耗并不是很高,所以理论上来说,如果4核cpu且内存8G以上,开4个node.js进程跑在一个服务器上,用nginx做负载均衡,其性能和稳定性都应该比单个node.js提升很大。

转载于:https://www.cnblogs.com/xutongle/archive/2011/11/18/2253820.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node-RED是工业网物联网的重要组成部分,我最开始接触Node-RED,也算是一个偶然的机吧,上班后领导安排我的第一个任务就是调研一下Node-RED,我之后上网查了一下,那个时候网上相对于Node-RED的资料也比较少,只知道它是IBM公司的一个开源项目。直到最近,发现许多大公司的产品都支持Node-RED,比如西门子公司的IoT2000,研华公司的WISE PaaS 网关,美国OPTO 22等设备中都安装了Node-RED,表明它在工业物联网和控制中已经广泛应用了。 那么工业物联网为什么要用它?它又处于工业物联网那个层次?它具有哪些特性?它帮助物联网解决了什么问题?为什么说它是柔性动态可重构的解决方案呢? ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 本门课程,老师将带领你从Node-RED的发展,工业物联网定位开始讲解,并带领着大家进行手把手安装Node-RED,实际操作演练Node-RED,并搭建一个物联网小平台,给大家带来更好的学习效果。  ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 为了能够让小伙伴们快速了解本门课程的结构,本门课程从以下几个方面展开:Node-RED入门Node-RED安装与配置Node-RED教学实战Node-RED的优势与不足Node-RED能为我们带来什么Node-RED总结与展望

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值