MSE Java 探针性能压测

MSE 微服务治理Java探针在应用运行时进行字节码增强,实现微服务治理能力。本文模拟了真实的使用场景,测试了MSE微服务治理Java探针在不同业务流量下带来的性能开销,有助于您在接入MSE微服务治理前,基于性能影响进行充分的评估。

测试环境

  • 压测源由阿里云性能测试PTS提供。

  • Java应用、MySQL、Redis都部署在同一个阿里云容器服务ACK集群中,节点实例类型为 ecs.u1-c1m2.2xlarge,节点的操作系统版本为 Alibaba Cloud Linux 3.2104(当前版本20231219)

  • Java应用的Pod规格为1核2GB,双副本。

  • MSE Java探针使用 Aliyun JavaAgent 4.1.6 版本。

Demo 代码库:https://github.com/aliyun/alibabacloud-microservice-demo/tree/master/mse-simple-demo

测试场景

Java应用架构如下所示:

PTS -> zuul/A/a -> sc-A/a -> sc-B/b -> sc-C/c。

Java应用基于Spring MVC框架编写,请求${gateway}/A/a

测试流程

  1. 在不安装MSE Java探针的情况下,使用基于 500 QPS,发起3次压测,每次的持续时长为20分钟,每次压测前都先基于100 QPS压测流量对Java应用进行3分钟预热,压测结果将作为基线性能指标。

  2. 安装MSE Java探针,并设置应用的微服务治理规则,对比Java应用在CPU开销、内存开销、RT(响应时间)上的差异。

说明
  • ARMS 应用监控开启,采用默认采样率10%。

  • 设置全链路灰度泳道,条件为header: [aa] == bb

  • 对于每个接口,设置接口限流,限流阈值为10000 QPS。

基线性能指标

每秒处理查询次数(次/秒)

CPU开销

内存开销

RT(响应时间)

500 QPS

  • zuul:27%

  • A:50%

  • B:50%

  • C:15.5%

  • zuul:530M

  • A:304M

  • B:323M

  • C:316M

14ms

开启MSE&ARMS能力后的性能指标

每秒处理查询次数(次/秒)

CPU开销

内存开销

RT(响应时间)

500 QPS

  • zuul:46.5%

  • A:49.4%

  • B:49%

  • C:27%

  • zuul:884M

  • A:503.5M

  • B:495M

  • C:492.5M

17ms

探针性能开销

每秒处理查询次数(次/秒)

CPU

内存

RT(每跳增加)

500 QPS

+7.3%

+220M

0.75ms

分析结论

  • MSE Java 探针额外造成的CPU开销,都在10%以内, 内存增加200M。

  • MSE Java 探针对于RT(请求响应时间)的影响非常小,在500 QPS的情况下最大增加了1毫秒。