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

    请求模式

    请求内容
    1K req/resp

    7层代理

    场景QPSRT(ms)MEM(K)CPU(%)
    Bolt1600015.87718498
    Http/1.14610674733690
    Http/25219813124474

    机器信息

    部署结构

    压测模式部署结构
    直连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层代理

    场景QPSRT(ms)MEM(K)CPU(%)
    Bolt4500023.4544732380
    Http/1.1215842342768380
    Http/2818051.7173180300

    长连接网关

    机器信息

    部署结构

    压测模式部署结构
    直连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 QPS1K req/resp

    长连接网关

    场景QPSMEM(g)CPU(%)goroutine
    RWLoop + goroutine10003.360200028
    Raw epoll10002.51828

    MOSN 引入了,相比,在 场景性能表现得到了大幅优化。在提升了20% 的 QPS 的同时,还优化了 30% 的内存占用。

    与此同时,我们对 HTTP/1.1 及 HTTP/2 的场景也进行了初步的性能测试,目前来看性能表现比较一般。这主要是由于目前 HTTP 协议族的 IO、Stream 都由三方库进行处理,与 MOSN 现有的处理框架整合度较差。我们会在后续迭代进行专项优化,提升 MOSN 处理 HTTP 协议族的表现。

    附录

    对比条件:

    • 页面大小 0~10k,平均5k
    • downstream 链接 1000
    • 单核压测