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

请求模式

请求内容
1K req/resp

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

请求模式

请求内容
1K req/resp

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
修改于 2022年4月28日: 修改目录结构 (#191) (61ff22e)