跳转至

网关压力测试报告

本文介绍 DCE 云原生网关在不同场景下的性能表现,便于您根据需求为网关配置合适的资源。

测试环境

开始测试之前,需要部署 DCE,下载安装测试工具,并准备好用于测试的压力机。

对象 角色 说明
DCE 云原生网关 测试对象 采用一主一从的模式,部署位置:172.30.120.211
Locust 测试工具 采用 1+4 的主从分布式运行模式,四台压测机的资源配置均为 8 核 8 G
Nginx 用于测试网关性能的演示服务 通过 DCE 云原生网关访问,访问地址为:http://172.30.120.211:30296/
contour DCE 云原生网关的控制面 版本为 1.23.1
envoy DCE 云原生网关的数据面 版本为 1.24.0
全局管理 DCE 云原生网关依赖的组件 版本为 0.12.1
容器管理 DCE 云原生网关依赖的组件 版本为 0.13.1
微服务引擎 DCE 云原生网关依赖的组件 版本为 0.15.1

性能指标

  • 吞吐量(RPS):每秒处理的请求数。结合 CPU 使用率,判断 DCE 云原生网关在特定资源配置下每秒可以处理的并发请求数。 吞吐量越高,说明网关性能越好
  • CPU 使用率:测试处理特定数量的并发请求时,DCE 云原生网关实例的 CPU 使用情况。 当 CPU 使用量达到 90% 以上时,认为 CPU 接近满载,此时的吞吐量(RPS)是当前配置能够正常处理的最大并发请求数。

测试脚本

  • 在 Locust Web 机器执行如下命令,收集压测结果

    docker run -p 8089:8089 --network=host -v $PWD:/mnt/locust locustio/locust -f /mnt/locust/gateway-external-nginx.py --master
    
  • 在 Locust 压测机执行如下命令,模拟用户访问,执行压力测试

    docker run -p 8089:8089 --network=host -v $PWD:/mnt/locust locustio/locust -f /mnt/locust/gateway-external-nginx.py --worker --master-host=172.30.120.210
    
  • 压测脚本 gateway-external-nginx.py

    from locust import task
    from locust.contrib.fasthttp import FastHttpUser
    
    class ShellCard(FastHttpUser):
    
      host = "http://172.30.120.211:30296" # 被测服务的访问地址
      @task
      def test(self):
        header = {"Host": "external.nginx"}
        self.client.get("/", headers=header)
    

测试 nginx 吞吐量:三副本,不限制资源

测试结果

并发用户数 每秒吞吐量 CPU 使用量 分析
4 4300 58%——70% 资源未充分利用,理论上仍有能力处理更多请求。
8 5700 77%——83% 仍有少量资源空闲,可以尝试增加并发请求数,测试吞吐量上限。
12 6700 90%——95% 只有极少量资源空闲,CPU 接近满载,视为达到吞吐量上限。

Success

综上,当服务部署三副本且不限制资源用量时,DCE 云原生网关能够处理的最大并发请求数大约为 6000 到 7000,较同类产品而言可谓性能优异。

测试过程截图

  • 并发用户数为 4

    4 个并发用户

    4 个并发用户

  • 并发用户数为 8

    8 个并发用户

    8 个并发用户

  • 并发用户数为 12

    12 个并发用户

    12 个并发用户

探究 contour 资源配置对 envoy 的性能影响

DCE 云原生网关是在开源项目 contour 和 envoy 的基础上进一步研发优化而来。contour 充当网关的控制平面,envoy 充当数据平面。

创建 DCE 云原生网关时,系统要求必须为网关配置不低于 1 核 1 G 的资源。因此,本次测试中 contour 的资源限制最低为 1 核 1 G。

此外,为了更好地体现 contour 的资源配置的影响,将 envoy 的资源限制设置为 6 核 3 G, 保证 envoy 自身始终具有较高的性能,不会因为自身资源不足而影响测试结果。

为保证压测机器资源负载正常,默认 Locust users 为 8。

测试结果

contour 资源规格 每秒吞吐量 CPU 使用量 分析
1 核 1 G 3700 53%——69% contour 的资源配置从 1 核 1 G 到 2 核 1 G,再到 3 核 2 G,
但网关每秒吞吐量一直维持在 3700 左右,上下变动幅度只有 100。
CPU 使用率也维持在 50%——70%左右,整体变化非常小。
2 核 1 G 3600 55%——72%
3 核 2 G 3800 57%——69%

Success

这说明 contour 的资源配置对 envoy 的性能几乎没有影响。

测试过程截图

  • contour 资源 1 核 1 G

    1c1g

    1c1g

  • contour 资源 2 核 1 G

    2c1g

    2c1g

  • contour 资源 3 核 2 G

    3c2g

    3c2g

探究 envoy 资源配置对吞吐量的影响

envoy 固定为 1 副本,contour 配置为 1 核 1 G,被测试服务 nginx 配置为 3 副本,不限制资源用量。

测试结果

envoy 资源规格 并发用户数 每秒吞吐量 CPU 使用量 分析
1 核 1 G 4 1016 18%——22% 当 envoy 的资源配置不变时,即使并发用户数成倍增加,网关吞吐量也变化不大。
8 1181 19%——20%
16 1090 19%——22%
2 核 1 G 4 2103 28%——41% 并发用户数为 4 时,当资源配置从 1 核增加到 2 核,吞吐量也增加了 1000 左右。
8 2284 38%——47%
3 核 1 G 8 3355 59%——70% 并发用户数为 8 时,当资源配置从 1 核增加到 3 核,吞吐量也增加了 2000 左右。
12 3552 52%——59%
4 核 2 G 8 3497 58%——80% 并发用户数为 12 时,当资源配置从 3 核增加到 5 核,吞吐量也增加了 1000 左右。
12 4250 78%——86%
5 核 2 G 8 3573 60%——81%
12 4698 68%——78%
6 核 2 G 12 4574 78%——85% 当配置为 6 核 2 G 时,吞吐量为 5400 左右,CPU 使用量也到达了 90% 以上,接近满载。
16 5401 90%以上

Success

综上:

  • envoy 的 CPU 配置对吞吐量起决定性因素。
  • 在当前压测资源下,通过 envoy 访问 nginx 的吞吐量能够达到直接访问 nginx 的吞吐量的 80% 以上。

测试过程截图

当 envoy 配置为 1 核 1 G

  • 并发用户数为 4

    4

    4

  • 并发用户数为 8

    8

    8

  • 并发用户数为 16

    16

    16

当 envoy 配置为 2 核 1 G

  • 并发用户数为 4

    4

    4

  • 并发用户数为 8

    8

    8

当 envoy 配置为 3 核 1 G

  • 并发用户数为 8

    8

    8

  • 并发用户数为 12

    12

    12

当 envoy 配置为 4 核 2 G

  • 并发用户数为 8

    8

    8

  • 并发用户数为 12

    12

    12

当 envoy 配置为 5 核 2 G

  • 并发用户数为 8

    8

    8

  • 并发用户数为 12

    12

    12

当 envoy 配置为 6 核 2 G

  • 并发用户数为 12

    12

    12

  • 并发用户数为 16

    16

    16

评论