查看原文
其他

蚂蚁金服开源Go语言版Service Mesh数据平面SOFAMosn性能报告

无钩 几米宋 2022-09-06

7月30号,第二届Service Mesh Meetup北京站,蚂蚁金服的高级技术专家朵晓东(奕杉)为我们分享了开源 | Service Mesh 数据平面 SOFAMosn 深层揭秘,本文是来自蚂蚁金服系统部应用网络组无钩同学对SOFAMosn 0.1.0的性能测试报告。

更多关于SOFAMosn的信息请访问SOFAMosn GitHub地址:https://github.com/alipay/sofa-mosn



以下的 性能报告为 SOFAMosn 0.1.0 在做 Bolt 与 HTTP1.x 协议的纯 TCP,转发上与 envoy 的一些性能对比数据、主要表现 在 QPS、RTT、失败率/成功率等。

这里需要强调的是,为了提高 SOFAMosn 的转发性能,在 0.1.0 版本中,我们做了如下的一些优化手段:

  • 在线程模型优化上,使用 worker 协程池处理 stream 事件,使用两个独立的协程分别处理读写 IO

  • 在单核转发优化上,在指定 P=1 的情况下,我们通过使用 CPU 绑核的形式来提高系统调用的执行效率以及 cache 的 locality affinity

  • 在内存优化上,同样是在单核绑核的情况下,我们通过使用 SLAB-style 的回收机制来提高复用,减少内存 copy

  • 在 IO 优化上,主要是通过读写 buffer 大小以及读写时机和频率等参数的控制上进行调优

以下为具体的性能测试数据

TCP 代理性能数据

这里,针对相同的部署模式,我们分别针对上层协议为 "Bolt(SofaRpc相关协议)""HTTP1.1"来进行对比

部署模式

压测采用纯代理模式部署,client 进程通过 SOFAMosn 进程作为转发代理访问server进程。其中,client 进程, SOFAMosn 进程,server 进程分别运行在属于不同网段的机器中。client 直连访问 server 网络延时为 2.5ms 左右

客户端

bolt 协议(发送1K字符串)

发送 Bolt 协议数据的客户端使用 "蚂蚁金服"内部开发的线上压力机,并部署 sofa rpc client。
通过压力机的性能页面,可反映压测过程中的QPS、成功/失败次数,以及RT等参数。

HTTP1.1 协议(发送1K字符串)

使用 ApacheBench/2.3, 测试指令:

  1. ab -n $RPC -c $CPC -p 1k.txt -T "text/plain" -k http://11.166.161.136:12200/tcp_bench > ab.log.$CPU_IDX &

mesh 运行机器规格

mesh 运行在容器中,其中 CPU 为独占的一个逻辑核,具体规格如下:

类别信息
OS3.10.0-327.ali2008.alios7.x86_64
CPUIntel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz X 1

upstream 运行机器规格

类别信息
OS2.6.32-431.17.1.el6.FASTSOCKET
CPUIntel(R) Xeon(R) CPU E5620 @ 2.40GHz X 16

Bolt协议 测试结果

性能数据

指标SOFAMosnEnvoy
QPS103500104000
RT16.23ms15.88ms
MEM31m18m
CPU100%100%

结论

可以看到,在单核 TCP 转发场景下,SOFAMosn 0.1.0 版本和 Envoy 1.7版本, 在满负载情况下的 QPS、RTT、成功数/失败数等性能数据上相差不大,后续版本我们会继续优化。

HTTP/1.1 测试结果

由于 HTTP/1.1 的请求响应模型为 PING-PONG,因此 QPS 与并发数会呈现正相关。下面分别进行不同并发数的测试。

并发20

指标SOFAMosnEnvoy
QPS56005600
RT(mean)3.549ms3.545ms
RT(P99)4ms4ms
RT(P98)4ms4ms
RT(P95)4ms4ms
MEM24m23m
CPU40%20%

并发40

指标SOFAMosnEnvoy
QPS1115011200
RT(mean)3.583ms3.565ms
RT(P99)4ms4ms
RT(P98)4ms4ms
RT(P95)4ms4ms
MEM34m24m
CPU70%40%

并发200

指标SOFAMosnEnvoy
QPS2967038800
RT(mean)5.715ms5.068ms
RT(P99)16ms7ms
RT(P98)13ms7ms
RT(P95)11ms6ms
MEM96m24m
CPU100%95%

并发220

指标SOFAMosnEnvoy
QPS3036741070
RT(mean)8.201ms5.369ms
RT(P99)20ms9ms
RT(P98)19ms8ms
RT(P95)16ms8ms
MEM100m24m
CPU100%100%

结论

可以看到,在上层协议为 HTTP/1.X 时,SOFAMosn 的性能和 Envoy 的性能 存在一定差距,对于这种现象我们的初步结论为:在 PING-PONG 的发包模型下, MOSN无法进行 read/write 系统调用合并,相比sofarpc可以合并的场景, syscall数量大幅上升,因此导致相比sofarpc的场景,http性能上相比envoy会存在差距。 针对这个问题,在 0.2.0 版本中,我们会进行相应的优化。

附录

envoy版本信息

version:1.7 tag:1ef23d481a4701ad4a414d1ef98036bd2ed322e7

envoy tcp测试配置

  1. static_resources:

  2.  listeners:

  3.  - address:

  4.      socket_address:

  5.        address: 0.0.0.0

  6.        port_value: 12200

  7.    filter_chains:

  8.    - filters:

  9.      - name: envoy.tcp_proxy

  10.        config:

  11.          stat_prefix: ingress_tcp

  12.          cluster: sofa_server

  13.  clusters:

  14.  - name: sofa_server

  15.    connect_timeout: 0.25s

  16.    type: static

  17.    lb_policy: round_robin

  18.    hosts:

  19.    - socket_address:

  20.        address: 10.210.168.5

  21.        port_value: 12222

  22.    - socket_address:

  23.        address: 10.210.168.5

  24.        port_value: 12223

  25.    - socket_address:

  26.        address: 10.210.168.5

  27.        port_value: 12224

  28.    - socket_address:

  29.        address: 10.210.168.5

  30.        port_value: 12225

  31. admin:

  32.  access_log_path: "/dev/null"

  33.  address:

  34.    socket_address:

  35.      address: 0.0.0.0

  36.      port_value: 8001


本报告也可以通过GitHub获取:https://github.com/alipay/sofa-mosn/blob/master/docs/reference/PerformanceReport.md

目前SOFAMosn 0.2.0 版本正在密集的研发中,性能仍然是重点建设目标,我们将在 0.2.0 发布后更新单核性能指标,并提供多核场景的性能报告。


点击【阅读原文】可以直接访问文中的链接。


社区网址:http://www.servicemesher.com

Slack:https://servicemesher.slack.com 需要邀请才能加入,有志于加入ServiceMesher社区为Service Mesh作出贡献的同学可以联系我。

Twitter: https://twitter.com/servicemesher

欢迎大家加入ServiceMesher社区,并在本公众号上踊跃投稿,投稿方式请访问:https://github.com/servicemesher/trans


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存