文档

MSE Go 探针性能测试报告

更新时间:

MSE Go 探针通过在编译时进行代码增强,实现流量防护、全链路灰度等服务治理能力,不可避免地带来了一定的应用性能开销。MSE团队采用多项技术对探针进行优化,将探针的性能开销降低,以确保应用的稳定运行。本文中我们模拟真实微服务场景测试了Go 探针在不同流量下的性能影响,您可以参考本文分析报告,在接入MSE Go微服务治理之前,基于性能影响进行充分的评估。

说明

Go 探针的实际性能影响依不同的应用实现而异,在接入完成之后,建议您在上线前对您的应用进行必要的性能测试,从而更准确的评估给您的应用带来的性能影响。

测试场景

整体服务架构如下图所示:

image

其中,Go应用A、B、C的Server侧使用Gin框架接收Web请求,Go应用A、B的Client侧采用HTTP协议发起对下游的调用,具体实现代码可参见mse-go-quickstart-demo

测试环境

  • 压测源由阿里云性能测试服务PTS提供,网络模式为公网。

  • Go应用A、B、C都部署在同一个阿里云容器服务ACK集群中,节点实例类型为ecs.c6.2xlarge,节点的操作系统版本为Alibaba Cloud Linux 3.2104 LTS 64位。

  • Go应用的Pod规格为1核2G,副本数量为2。

  • Go探针采用Aliyun GoAgent 1.1.0版本。

测试流程

  1. 在不接入微服务治理的情况下,分别使用最大QPS为100/300/500/700的请求执行压测,每次测试持续时长为1小时,压测结果将作为基线性能指标。压测过程中,初始QPS为100,每30s左右递增100,直到达到最大QPS。

  2. 为Go应用A、B、C接入微服务治理,重复第1步的压测,对比Go应用在CPU使用率、内存使用率、RT上的差异。

测试结果

基线性能指标

QPS

应用A

应用B

应用C

CPU(%)

内存(%)

RT(ms)

CPU(%)

内存(%)

CPU(%)

内存(%)

100

1.8

0.6

32

1.4

0.6

0.6

0.5

300

4.9

0.7

33

4.8

0.7

1.9

0.7

500

10.0

0.9

33

9.3

0.8

3.5

0.7

600

18.0

1.0

34

11.0

0.8

4.0

0.7

700

29.3

0.9

35

12.6

0.9

4.3

0.7

说明
  • CPU指标代表Pod使用的CPU占总CPU的百分比。

  • 内存指标代表Pod使用的内存占总内存的百分比。

  • RT指标代表请求的平均响应时间,单位:毫秒。

安装Go 探针之后的性能指标

QPS

应用A

应用B

应用C

CPU(%)

内存(%)

RT(ms)

CPU(%)

内存(%)

CPU(%)

内存(%)

100

2.6

1.3

32

2.6

1.3

0.8

1.1

300

7.9

1.4

34

8.0

1.3

2.5

1.1

500

13.9

1.5

36

15.2

1.5

3.9

1.2

600

24.6

1.6

37

18.8

1.6

4.8

1.3

700

36.5

1.7

37

21.5

1.6

5.9

1.3

性能开销

将安装Go 探针之后的性能指标结果,减去基线性能指标,能够更加直观地看到安装Go 探针之后给应用带来的额外开销。汇总结果如下所示。

QPS

应用A

应用B

应用C

CPU(%)

内存(%)

RT(ms)

CPU(%)

内存(%)

CPU(%)

内存(%)

100

+0.8

+0.7

+0

+1.2

+0.7

+0.2

+0.6

300

+3.0

+0.7

+1

+3.2

+0.6

+0.6

+0.4

500

+3.9

+0.6

+3

+5.9

+0.7

+0.4

+0.5

600

+6.6

+0.6

+3

+7.8

+0.8

+0.8

+0.6

700

+7.2

+0.8

+2

+8.9

+0.7

+1.6

+0.6

说明
  • 上述结果的计算方式是通过将使用Go Agent后的CPU使用率、内存占用率和RT与未使用Go Agent时的CPU使用率、内存占用率和RT进行相减得到的结果。

  • 不使用CPU使用率和内存占用率增长率的原因是,如果原本CPU使用率为25%,使用Go Agent后增加为30%,则CPU使用率增长率为20%;如果原本CPU使用率为50%,使用Go Agent增加为55%,则CPU使用率增长率为10%,该结果会跟随原本的CPU使用率而变化,不具有参考价值。

  • 从变化趋势上看,Go Agent带来的CPU使用率和内存占用率变化,会随着QPS的提升而线性增加,该结果更具有参考意义。

测试结论

  • Go 探针额外造成的CPU开销均在10%以内,额外造成的内存占用均在1%以内,整体带来的资源开销较小。

  • Go 探针给请求的全链路RT增加了3ms以内的延迟,几乎可以忽略不计。