# 网关压力测试报告
本文介绍 DCE 5.0 云原生网关在不同场景下的性能表现,便于您根据需求为网关配置合适的资源。
## 测试环境
开始测试之前,需要部署 DCE 5.0,下载安装测试工具,并准备好用于测试的压力机。
| 对象 | 角色 |说明
| -------------- | ------------------------------ | ---|
| DCE 5.0 云原生网关|测试对象|采用一主一从的模式,部署位置:172.30.120.211 |
|Locust|测试工具|采用 1+4 的主从分布式运行模式,四台压测机的资源配置均为 8 核 8 G|
|Nginx|用于测试网关性能的演示服务|通过 DCE 5.0 云原生网关访问,访问地址为:http://172.30.120.211:30296/|
| contour | DCE 5.0 云原生网关的控制面 |版本为 1.23.1|
| envoy | DCE 5.0 云原生网关的数据面 |版本为 1.24.0|
| 全局管理 | DCE 5.0 云原生网关依赖的组件 |版本为 0.12.1|
| 容器管理 | DCE 5.0 云原生网关依赖的组件 |版本为 0.13.1|
| 微服务引擎 | DCE 5.0 云原生网关依赖的组件 |版本为 0.15.1|
## 性能指标
- 吞吐量(RPS):每秒处理的请求数。结合 CPU 使用率,判断 DCE 5.0 云原生网关在特定资源配置下每秒可以处理的并发请求数。
吞吐量越高,说明网关性能越好
- CPU 使用率:测试处理特定数量的并发请求时,DCE 5.0 云原生网关实例的 CPU 使用情况。
当 CPU 使用量达到 90% 以上时,认为 CPU 接近满载,此时的吞吐量(RPS)是当前配置能够正常处理的最大并发请求数。
## 测试脚本
- 在 Locust Web 机器执行如下命令,收集压测结果
```bash
docker run -p 8089:8089 --network=host -v $PWD:/mnt/locust locustio/locust -f /mnt/locust/gateway-external-nginx.py --master
```
- 在 Locust 压测机执行如下命令,模拟用户访问,执行压力测试
```bash
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`
```python
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 5.0 云原生网关能够处理的最大并发请求数大约为 6000 到 7000,较同类产品而言可谓性能优异。
### 测试过程截图
- 并发用户数为 4
![4 个并发用户](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway01.png)
![4 个并发用户](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway02.png)
- 并发用户数为 8
![8 个并发用户](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway03.png)
![8 个并发用户](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway04.png)
- 并发用户数为 12
![12 个并发用户](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway05.png)
![12 个并发用户](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway06.png)
## 探究 contour 资源配置对 envoy 的性能影响
DCE 5.0 云原生网关是在开源项目 contour 和 envoy 的基础上进一步研发优化而来。contour 充当网关的控制平面,envoy 充当数据平面。
创建 DCE 5.0 云原生网关时,系统要求必须为网关配置不低于 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](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway07.png)
![1c1g](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway08.png)
- contour 资源 2 核 1 G
![2c1g](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway09.png)
![2c1g](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway10.png)
- contour 资源 3 核 2 G
![3c2g](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway11.png)
![3c2g](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway12.png)
## 探究 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](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway13.png)
![4](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway14.png)
- 并发用户数为 8
![8](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway15.png)
![8](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway16.png)
- 并发用户数为 16
![16](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway17.png)
![16](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway18.png)
#### 当 envoy 配置为 2 核 1 G
- 并发用户数为 4
![4](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway19.png)
![4](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway20.png)
- 并发用户数为 8
![8](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway21.png)
![8](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway22.png)
#### 当 envoy 配置为 3 核 1 G
- 并发用户数为 8
![8](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway23.png)
![8](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway24.png)
- 并发用户数为 12
![12](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway25.png)
![12](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway26.png)
#### 当 envoy 配置为 4 核 2 G
- 并发用户数为 8
![8](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway27.png)
![8](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway28.png)
- 并发用户数为 12
![12](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway29.png)
![12](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway30.png)
#### 当 envoy 配置为 5 核 2 G
- 并发用户数为 8
![8](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway31.png)
![8](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway32.png)
- 并发用户数为 12
![12](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway33.png)
![12](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway34.png)
#### 当 envoy 配置为 6 核 2 G
- 并发用户数为 12
![12](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway35.png)
![12](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway36.png)
- 并发用户数为 16
![16](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway37.png)
![16](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/skoala/images/test-gateway38.png)