订阅软件研发RSS CSDN首页> 软件研发

百万级并发 Node.js也能行

发表于2012-08-20 15:54| 次阅读| 来源CSDN编译| 0 条评论| 作者夏梦竹

摘要:近来,Node.js正逐渐受到开发者的追捧,想知道在面对100万个并发连接情况下Node.js是如何处理的吗?Node.js说:“没什么不可以,百万级并发,我也行!”

Node.js是建立在Google V8 JavaScript引擎之上的网络服务器框架,允许开发者能够用客户端使用的语言JavaScript在服务器端编码。此前,研发频道发过一篇《程序员如何说服老板采用Node.js?》,无一不说明Node.js正逐渐受到开发者的追捧。想知道Node.js是如何处理高并发请求的吗?本文主要探讨Node.js的实战案例,在面对100万个并发连接情况下Node.js是如何处理的。

这个测试是用500台亚马逊EC2测试机组成集群,利用COMET可以发送超过~2000个活跃的长连接至单一的15GB rackspace云服务器。这对于IMO(Instant Messaging Office,互联网即时通讯办公室)来说是个重要的里程碑。通过IMO平台可以帮助那些想要使用Node.js作为大量的并发连接的开发者。因此,这对于Node开发者来说非常有利。

下图是页面上显示的链接数:

这是一个打开后的文件句柄数量(sockets are file handles):

这里显示了 “top”正在使用的系统资源的情况:

1M的连接消耗了很多16GB的内存,这很符合常理,当然也有可能被排挤掉了很多,因为在优化上我并没有花费很多精力。

下面是针对comet URL延迟测试运行:

重新调整放置在/etc/sysctl.conf (CentOS)文件里,然后重新载入“sysctl -p”:

net.core.rmem_max = 33554432
net.core.wmem_max = 33554432
net.ipv4.tcp_rmem = 4096 16384 33554432
net.ipv4.tcp_wmem = 4096 16384 33554432
net.ipv4.tcp_mem = 786432 1048576 26777216
net.ipv4.tcp_max_tw_buckets = 360000
net.core.netdev_max_backlog = 2500
vm.min_free_kbytes = 65536
vm.swappiness = 0
net.ipv4.ip_local_port_range = 1024 65535

此外,这个步骤是与我之前的博客文章中描述的步骤相同,唯一不同的是这里使用的是Node.js0.8.3版本。

这是服务器的源代码,每个连接客户端积极推送信息,目的是为了验证连接是有效的、无误的。在这并没有推送吞吐量,但是通过数据就可看出这个并不难。当16GB的内存消耗殆尽,这就意味着需要切换,也许在下一个项目中我会使用更大的内存服务器。

PS:CSDN年度技术盛宴2012 SDCC中国软件开发者大会将于2012年9月8日-9日在国家会议中心举行。届时酷壳网陈皓将分享《高并发互联网应用性能优化实践》,更多精彩议题请关注2012 SDCC中国软件开发者大会,期待您的参与(报名地址)!

英文出自:caustik

本文为CSDN编译整理,未经允许不得转载。如需转载请联系market@csdn.net

百万级并发 Node.js也能行