首页IT科技node如何利用多核(master + worker模式的node多核解决框架——nodecluster)

node如何利用多核(master + worker模式的node多核解决框架——nodecluster)

时间2025-08-04 17:26:23分类IT科技浏览7466
导读:8 回复...

8 回复

#1 kongwu

期待性能数据!

kongwu 在 2012-2-2 00:42回复

#2 pengchun

在一台超线程可见 5 * Intel(R) Xeon(R) CPU E5620 @ 2.40GHz 的虚拟机上用siege2.7本机压测                ,demo/main.js 下的33749端口                       ,与node原生的http模块进行对比               。由于基本不涉及IO操作        ,保证压测时工作进程CPU吃满                ,结果如下:

*connection: keep-alive模式下(长连接):siege -b -c2 -t1m *

原生HTTP                       ,时长59.76s        ,QPS:8486.93        ,请求数507179                       ,可用率100.00%; node-cluster               ,时长59.64s        ,QPS:8424.51                        ,请求数502438               ,可用率100.00%;

*connection: close模式下(短连接):siege -b -c1000 *

原生HTTP,时长24.15s                        ,QPS:4907.33                       ,请求数118512,可用率99.93%; node-cluster                ,时长20.71s                       ,QPS:3864.61        ,请求数80036                ,可用率100.00%;

结论如下:

长连接模式下HTTP协议无性能损失                        。这个容易理解                       ,一旦连接建立        ,之后的请求就与master无关了;

短连接模式下        ,node-cluster封装之后有20%的QPS损失        。在短连接模式下                       ,操作系统的文件句柄数首先达到瓶颈       。在测试之前               ,手工通过ulimit -n调整 max opend files为65535        ,并且在TIME_WAIT状态的TCP连接数小于100的情况下开始压测                        。

普遍而言                        ,node的HTTP模块在短连接模式下               ,比长连接有接近50%的QPS损失                。这一点要根据node的使用场景来判断用那种模式       。在node做中间层服务时,我们建议采用keep-alive方式                       。

pengchun 在 2012-2-2 08:13回复

#3 pengchun

话说虚拟机真弱啊                        ,在我的mac上                       ,上边的测试,轻轻松松抛出两倍的QPS

pengchun 在 2012-2-2 09:13回复

{2}

suqian

mac上的文件句柄数设置搞掂了?

suqian 在 2012-2-2 10:00回复

pengchun

大概搞掂了                ,用的zsh                       ,ulimit -n 就可以

pengchun 在 2012-2-2 10:23回复

#4 suqian

admin. transact()admin.release() 要使用者自行判断在那里调用?这样的使用体验不好啊                。

应该让用户对这些没感觉才好        ,让他们使用起来就像普通的处理逻辑一样。

suqian 在 2012-2-2 10:13回复

{1}

pengchun

要是不想要平滑重启                ,能容忍少量的请求丢失                       ,那么不要调这两个方法也可以

pengchun 在 2012-2-2 10:24回复

#5 suqian

@pengchun

function listenAt(obj, port){var server =new TCP(); server.bind(0.0.0.0, port); server.listen(/dev/null);

server.listen(/dev/null); 有具体含义吗?

suqian 在 2012-2-13 17:42回复

{1}

pengchun

没啥意义

pengchun 在 2012-2-15 10:17回复

#6 fish

@pengchun 同求解 :)

fish 在 2012-2-13 22:54回复

#7 snoopy

我想问下        ,多进程内存共享后台有自动同步吗?比如我想同步一些json数据        ,但是又不想借助如redis                       ,mongodb等的第三方缓存                       。

snoopy 在 2012-2-14 10:23回复

{1}

pengchun

木有的               ,数据量大的话我还是建议用这些东西共享

pengchun 在 2012-2-15 10:18回复

#8 mackjoner

master.register(8080, app.js);

我想添加的是unix socket file        ,这个能做到吗                        ,就是结合socket和node-cluster
var cluster =require(node-cluster);var master =new cluster.Master(); master.register(8080,app.js); master.dispatch(); varHttp=require(http);var cluster =require(node-cluster);var admin =new cluster.Worker();var server =Http.createServer(function(req, res){ admin.transact(); res.writeHead(200,{Content-Type:text/plain;charset=utf-8}); res.end(hello world); admin.release();}); admin.ready(function(socket){ server.emit(connection, socket);});

*connection: keep-alive模式下(长连接):siege -b -c2 -t1m *

原生HTTP               ,时长59.76s,QPS:8486.93                        ,请求数507179                       ,可用率100.00%; node-cluster,时长59.64s                ,QPS:8424.51                       ,请求数502438        ,可用率100.00%;

*connection: close模式下(短连接):siege -b -c1000 *

原生HTTP                ,时长24.15s                       ,QPS:4907.33        ,请求数118512        ,可用率99.93%; node-cluster                       ,时长20.71s               ,QPS:3864.61        ,请求数80036                        ,可用率100.00%;

长连接模式下HTTP协议无性能损失                        。这个容易理解               ,一旦连接建立,之后的请求就与master无关了;

短连接模式下                        ,node-cluster封装之后有20%的QPS损失。在短连接模式下                       ,操作系统的文件句柄数首先达到瓶颈               。在测试之前,手工通过ulimit -n调整 max opend files为65535                ,并且在TIME_WAIT状态的TCP连接数小于100的情况下开始压测                        。

普遍而言                       ,node的HTTP模块在短连接模式下        ,比长连接有接近50%的QPS损失        。这一点要根据node的使用场景来判断用那种模式               。在node做中间层服务时                ,我们建议采用keep-alive方式                        。

声明:本站所有文章                       ,如无特殊说明或标注        ,均为本站原创发布        。任何个人或组织        ,在未征得本站同意时                       ,禁止复制               、盗用                        、采集        、发布本站内容到任何网站       、书籍等各类媒体平台       。如若本站内容侵犯了原著者的合法权益               ,可联系我们进行处理                        。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
网站seo搜索引擎优化(深度解析SEO收录:网站优化的关键之道) 做seo有发展前景吗(深度探讨:SEO还能赚钱吗?)