分享

百万级并发?Node.js也能行!

 richsky 2012-08-21
摘要:近来,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的内存消耗殆尽,这就意味着需要切换,也许在下一个项目中我会使用更大的内存服务器。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多