MOSN 0.2.1 性能报告
本性能报告的基准版本为 MOSN 0.2.1。
在 0.2.1 版本中,我们进行了如下一些优化手段:
- 添加内存复用框架,涵盖 io/protocol/stream/proxy 层级,减少对象分配、内存使用和 GC 压力。
- 针对大量链接场景,新增 Raw Epoll 模式,该模式使用了事件回调机制 + IO 协程池,规避了海量协程带来的堆栈内存消耗以及调度开销。
需要注意的是,由于目前 SOFARPC 和 H2 的压测工具还没有 pxx 指标的展示,我们在性能报告中选取的数据都为均值。后续需要我们自行进行相关压测环境工具的建设来完善相关指标(P99,P95……)
总览
本次性能报告在0.1.0 性能报告
的基础上,新增了若干场景的覆盖,总体包含以下几部分:
- 单核性能(sidecar场景)
- 7层代理
- Bolt(串联)
- Http/1.1(串联)
- Http/2(串联)
- 多核性能(gateway场景)
- 7层代理
- Bolt(直连)
- Http/1.1(直连)
- Http/2(直连)
- 长连接网关
- Bolt(read/write loop with goroutine/raw epoll)
单核性能(sidecar 场景)
测试环境
机器信息
机器 |
OS |
CPU |
11.166.190.224 |
3.10.0-327.ali2010.rc7.alios7.x86_64 |
Intel(R) Xeon(R) CPU E5-2640 v3 @ 2.60GHz |
11.166.136.110 |
3.10.0-327.ali2010.rc7.alios7.x86_64 |
Intel(R) Xeon(R) CPU E5-2430 0 @ 2.20GHz |
bolt client |
client 为压力平台,有 5 台压力机,共计与client MOSN 之间会建立 500 条链接 |
|
http1 client(10.210.168.5) |
ApacheBench/2.3 |
-n 2000000 -c 500 -k |
http2 client(10.210.168.5) |
nghttp.h2load |
-n1000000 -c5 -m100 -t4 |
部署结构
压测模式 |
部署结构 |
串联 |
client –> MOSN(11.166.190.224) –> MOSN(11.166.136.110) –> server(11.166.136.110) |
网络时延
节点 |
PING |
client –> MOSN(11.166.190.224) |
1.356ms |
MOSN(11.166.190.224) –> MOSN(11.166.136.110) |
0.097 ms |
请求模式
7层代理
场景 |
QPS |
RT(ms) |
MEM(K) |
CPU(%) |
Bolt |
16000 |
15.8 |
77184 |
98 |
Http/1.1 |
4610 |
67 |
47336 |
90 |
Http/2 |
5219 |
81 |
31244 |
74 |
多核性能(gateway 场景)
测试环境
机器信息
机器 |
OS |
CPU |
11.166.190.224 |
3.10.0-327.ali2010.rc7.alios7.x86_64 |
Intel(R) Xeon(R) CPU E5-2640 v3 @ 2.60GHz |
11.166.136.110 |
3.10.0-327.ali2010.rc7.alios7.x86_64 |
Intel(R) Xeon(R) CPU E5-2430 0 @ 2.20GHz |
bolt client |
client为压力平台,有5台压力机,共计与client MOSN之间会建立500条链接 |
|
http1 client(10.210.168.5) |
ApacheBench/2.3 |
-n 2000000 -c 500 -k |
http2 client(10.210.168.5) |
nghttp.h2load |
-n1000000 -c5 -m100 -t4 |
部署结构
压测模式 |
部署结构 |
直连 |
client –> MOSN(11.166.190.224) –> server(11.166.136.110) |
网络时延
节点 |
PING |
client –> MOSN(11.166.190.224) |
1.356ms |
MOSN(11.166.190.224) –> MOSN(11.166.136.110) |
0.097 ms |
请求模式
7层代理
场景 |
QPS |
RT(ms) |
MEM(K) |
CPU(%) |
Bolt |
45000 |
23.4 |
544732 |
380 |
Http/1.1 |
21584 |
23 |
42768 |
380 |
Http/2 |
8180 |
51.7 |
173180 |
300 |
长连接网关
测试环境
机器信息
机器 |
OS |
CPU |
11.166.190.224 |
3.10.0-327.ali2010.rc7.alios7.x86_64 |
Intel(R) Xeon(R) CPU E5-2640 v3 @ 2.60GHz |
11.166.136.110 |
3.10.0-327.ali2010.rc7.alios7.x86_64 |
Intel(R) Xeon(R) CPU E5-2430 0 @ 2.20GHz |
部署结构
压测模式 |
部署结构 |
直连 |
client –> MOSN(11.166.190.224) –> server(11.166.136.110) |
网络时延
节点 |
PING |
client –> MOSN(11.166.190.224) |
1.356ms |
MOSN(11.166.190.224) –> MOSN(11.166.136.110) |
0.097 ms |
请求模式
链接数 |
请求内容 |
2 台压力机,每台 5w 链接 + 500 QPS,共计10W链接 + 1000 QPS |
1K req/resp |
长连接网关
场景 |
QPS |
MEM(g) |
CPU(%) |
goroutine |
RWLoop + goroutine |
1000 |
3.3 |
60 |
200028 |
Raw epoll |
1000 |
2.5 |
18 |
28 |
总结
MOSN 0.2.1
引入了内存复用框架
,相比0.1.0
,在 bolt 协议转发
场景性能表现得到了大幅优化。在提升了20% 的 QPS 的同时,还优化了 30% 的内存占用。
与此同时,我们对 HTTP/1.1 及 HTTP/2 的场景也进行了初步的性能测试,目前来看性能表现比较一般。这主要是由于目前 HTTP 协议族的 IO、Stream 都由三方库进行处理,与 MOSN 现有的处理框架整合度较差。我们会在后续迭代进行专项优化,提升 MOSN 处理 HTTP 协议族的表现。
此外,针对大量链接场景(例如长连接网关),我们引入了 Raw Epoll + 协程池的模式来应对协程暴增的问题,从而大幅优化了该场景下的 QPS 和内存表现。
附录
版本对比
对比条件:
- 页面大小 0~10k,平均5k
- downstream 链接 1000
- upstream链接 6
- 单核压测
版本 |
QPS |
内存 |
0.1.0 |
10500 |
175M |
0.2.1 |
13000 |
122M |