网易开源JavaScript分布式服务器架构Pomelo
中文文档
Pinus一个基于Node.js的分布式水平扩展游戏服务器轻量级强大框架 powered by TypeScript
链接
项目对服务器架构进行长久布局,采用网易的分布式游戏服务器Pomelo,需要对Pomelo性能进行压力测试
环境准备
下载pomelo chat聊天室源码,初始化后做如下修改:
- 修改
game-server/app.js
下heartbeat : 3000000
,避免压测时因心跳超时而断线 - 修改
game-server/config/servers.json
,所有服务器只保留第一个配置,我们只测试单服单进程的负载 - 修改
web-server/public/js/client.js
,代码传送门 - 修改
game-server/config/log4js.json
,将levels下所有的log配置都修改为ERROR(如下),减少后台打印量,避免大量IO影响压测1
2
3
4
5
6
7
8
9"levels": {
"rpc-debug" : "ERROR",
"pomelo" : "ERROR",
"pomelo-admin" : "ERROR",
"console" : "ERROR",
"pomelo-rpc" : "ERROR",
"rpc-log" : "ERROR",
"forward-log": "ERROR"
},
测试方法:
- 进入
http://127.0.0.1:3001/
- 聊天内容匹配
profile频率_持续时间
,则发起压测;频率为每秒发送消息数量,持续时间为压测持续时间。profile100_5表示每秒100条消息,持续压测5s - 在压测过程中可以用perf工具对node进程进行profile并生成火焰图,profile参考文档
压测数据记录情况
虚拟机压测,配置如下:
ubuntu-18.04.1-desktop-amd64
Intel(R) Core(TM) i5-8400 CPU @ 2.80GHz
RAM: 3.00G
发包频率 | connector_cpu | chat_server_cpu |
---|---|---|
0 | 0 | 0 |
10 | 1 | 1 |
100 | 5 | 1 |
500 | 28 | 6 |
1 000 | 50 | 10 |
2 000 | 85 | 20 |
2 500 | 95 | 25 |
物理机压测,配置如下:
Windows 10 专业版 x64
Intel(R) Core(TM) i5-8400 CPU @ 2.80GHz 2.81GHz
RAM: 8.00G
发包频率 | connector_cpu | chat_server_cpu |
---|---|---|
0 | 0 | 0 |
500 | 6 | 3 |
1 000 | 7 | 3 |
2 000 | 15 | 6 |
5 000 | 33 | 9 |
8 000 | 30 | 8 |
当频率=8000,持续时间=30的时候,一共用了140s才将包全部处理完毕,此时的qps为 8000 * 30 / 140 = 1714。虽然此时的cpu并不是满载,但是吞吐量上不去了,Windows下测试比较奇怪。当频率=3000,持续时间=30的时候, qps为3000。当频率=4000,持续时间=30的时候,qps=2608;
在ubuntu物理机测试结果最高qps也是3000多
在虚拟机ubuntu中,频率=1000, connector cpu=50,利用perf工具和FlameGraph生成的火焰图
perf.data文件
easy node profile
目前profile结果还未中的代码还基本未涉及到代码逻辑部分,基本是框架底层固有消耗,还做不到去优化逻辑来提高qps。
总结
在windows物理机和ubuntu物理机下,chat案例的connector最高的qps大约都在3000多
相对而言,系统的瓶颈是connector,压测中connector的cpu大约是game-server cpu的4倍
如果4个connector对应一个chat-server,chat-server qps预计能接近1W
这个这个性能作为棋牌游戏的服务器已经足够,如果作为MMO服务器则略显性能不足,需要用更高效的架构
附上官方测试文档,性能与我们测试的情况相差不大,connector cpu基本上是game-server的4倍
附pomelo rpc性能测试
附pomelo rpc zeromq性能测试