Page 21 - 《软件学报》2021年第5期
P. 21
殷康璘 等:基于混沌工程的微服务韧性风险识别和分析 1245
得到实时的服务性能数据.在收集服务性能数据的同时,系统其他各项系统资源的性能数据也将通过 Heapster
(https://github.com/kubernetes/heapster),Zabbix(https://www.zabbix.com/)等工具采集,用于识别出韧性风险后对
韧性风险与服务降级的因果关系分析.
4.2.2 实验结果分析
案例分析中,对目标系统分别以混沌实验次数 10 次、20 次、50 次、100 次进行了韧性风险识别.由于每次
引入的系统环境扰动都是随机生成的,为了观察随机性对识别出的韧性风险数量的影响,各混沌实验次数的韧
性识别过程均实行了 3 次.表 6 展示了不同混沌实验次数下所识别出的韧性风险数量.
Table 6 Number of identified resilience risks in different chaos experiments
表 6 不同混沌实验次数下识别的韧性风险数量
混沌实验次数 第 1 次识别数量 第 2 次识别数量 第 3 次识别数量
10 0 2 0
20 2 5 3
50 5 10 18
100 20 12 24
从表 6 的验证结果可以看出,本文提出的微服务韧性需求识别方法能够识别出一定数量的目标微服务架
构系统的韧性风险.虽然在相同混沌实验次数下识别到的韧性风险数量有一定差异,但是低混沌实验次数识别
到的韧性风险数量均低于高次数混沌实验识别到的数量,说明识别过程中混沌实验的次数越多,通过混沌实验
发现的韧性风险越多.从相同混沌实验次数的风险识别结果比较中可以看出:系统扰动生成的随机性对识别出
的韧性风险数量有着较大影响,在混沌实验次数较少的情况下,有着没有识别出任何韧性风险的可能性.
由于混沌实验中的系统环境扰动是随机生成的,为了验证韧性风险识别过程中重复进行相同混沌实验的
可能性,我们对每一次识别过程中生成的系统环境扰动以及韧性风险进行了统计,统计结果见表 7.从表 7 中可
以看出:虽然在混沌实验次数较大的情况下出现了重复的系统环境扰动,重复生成的系统环境扰动数量相对整
个识别过程中生成的系统环境扰动数量可以忽略不计.
Table 7 Number of duplicate system disruptions and resilience risks in different chaos experiments
表 7 混沌实验中重复的系统环境扰动和韧性风险数量统计
混沌实验次数 重复生成的系统环境扰动数量(3 次识别过程总和) 重复识别的韧性风险数量(3 次识别过程总和)
10 0 0
20 0 0
50 1 0
100 3 0
4.3 Sock-Shop系统的韧性风险分析
限于文章篇幅,本文将以一个实际的韧性风险为例,展示对 Sock Shop 系统韧性风险的分析过程.图 11 为一
次混沌实验中订单服务每秒成功交易量的性能曲线,在混沌实验中引入的系统环境扰动为对 carts 服务的容器
的 CPU 占用率提升至 100%.图 11 中,蓝色曲线为混沌实验中收集到的性能曲线,红色曲线为通过 Holt Winters
算法以正常压力场景下的历史数据为输入得到的性能基线曲线.可以看出,图 11 中一段时间内订单服务的实际
性能明显低于其性能基线,说明订单服务由于环境扰动进入了服务降级状态,且通过计算可得知该次服务降级
的性能损失高于其性能损失阈值(500 个交易).因此,本次混沌实验中引入的系统环境扰动被认定为韧性风险.
在混沌实验的过程中,通过 Prometheus 组件实际采集到的各服务的性能指标包括服务的每秒请求数量
(qps,其中包括成功的请求量 qps(2xx)以及失败的请求量 qps(4xx))以及服务请求延时这两项性能指标.在韧性风
险识别阶段中的设立服务性能指标(表 1)将通过以上指标换算得到.如,
响应成功率=qps(2xx)/(qps(2xx)+qps(4xx))).
除了收集服务性能的监控数据外,同时会收集容器以及节点的性能数据,具体收集的性能数据见表 8.