MOSN 0.2.1 性能报告
在 0.2.1 版本中,我们进行了如下一些优化手段:
- 添加内存复用框架,涵盖 io/protocol/stream/proxy 层级,减少对象分配、内存使用和 GC 压力。
- 针对大量链接场景,新增 Raw Epoll 模式,该模式使用了事件回调机制 + IO 协程池,规避了海量协程带来的堆栈内存消耗以及调度开销。
需要注意的是,由于目前 SOFARPC 和 H2 的压测工具还没有 pxx 指标的展示,我们在性能报告中选取的数据都为均值。后续需要我们自行进行相关压测环境工具的建设来完善相关指标(P99,P95……)
- 多核性能(gateway场景)
- 7层代理
- Bolt(直连)
- Http/1.1(直连)
- Http/2(直连)
- 长连接网关
- Bolt(read/write loop with goroutine/raw epoll)
单核性能(sidecar 场景)
机器信息
部署结构
压测模式 | 部署结构 |
---|
串联 | 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 |
机器信息
部署结构
压测模式 | 部署结构 |
---|
直连 | 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 |
长连接网关
机器信息
部署结构
压测模式 | 部署结构 |
---|
直连 | 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 引入了,相比,在 场景性能表现得到了大幅优化。在提升了20% 的 QPS 的同时,还优化了 30% 的内存占用。
与此同时,我们对 HTTP/1.1 及 HTTP/2 的场景也进行了初步的性能测试,目前来看性能表现比较一般。这主要是由于目前 HTTP 协议族的 IO、Stream 都由三方库进行处理,与 MOSN 现有的处理框架整合度较差。我们会在后续迭代进行专项优化,提升 MOSN 处理 HTTP 协议族的表现。
附录
对比条件:
- 页面大小 0~10k,平均5k
- downstream 链接 1000
- 单核压测