Page 20 - 《软件学报》2021年第5期
P. 20
1244 Journal of Software 软件学报 Vol.32, No.5, May 2021
案例研究中使用的部署环境是实验环境而非实际生产环境,且 Sock-Shop 本身为开源系统并未对性能和容
错方面有严格的设计.通过观察在实验环境中引入各种系统环境扰动后环境的服务降级情况,并参考 ETSI 标准
中韧性测试的建议值 [78] ,对 Sock-Shop 中所有的系统服务的响应时间以及响应成功率这两项服务性能指标的
基线值的设置也相对实际生产环境适当放宽,分别为 5s 以及 90%.通过对目标系统的压力测试发现:在没有引入
系统环境扰动的情况下,目标系统每分钟能最多能接受约 200 个用户请求.因此,以每分钟 200 个请求的系统峰
值和 Sock-Shop 整体的业务流程为依据,案例研究中设计了表 3 中的系统压力场景,并把在这些压力场景下收集
到的系统服务性能数据作为系统性能基线.压力场景中,对用户操作的模拟是通过编写脚本访问对应 HTTP 接
口实现.用户行为模拟脚本会被压力测试工具 Locust 在每分钟并行地触发,以实现系统环境压力的模拟.
Table 3 Workload scenarios of Sock-Shop
表 3 Sock-Shop 的压力场景
压力场景 压力场景说明
每分钟有 50 个用户完成登录→查看商品→添加商品至购物车→提交订单的
普通场景
过程.其中,浏览以及添加至购物车的商品数量为 1~5 之间的一个随机值
普通场景 每分钟有 100 个用户完成登录→查看商品→添加商品至购物车→提交订单的
(高压力) 过程.其中,浏览以及添加至购物车的商品数量为 1~5 之间的一个随机值
促销活动 每分钟有 200 个用户提交订单的请求
促销活动前期 每分钟有 200 个用户完成登录→查看商品→添加商品至购物车的过程
在对表 2 中的 Sock-Shop 各服务性能指标设立韧性目标的过程中,平均响应时间和响应成功率这两项通用
服务性能指标的韧性目标设立,包含性能降级程度以及降级恢复时间这两个维度.对于不同服务各自的服务性
能指标,服务韧性目标的维度选取将考虑到各个服务各自的业务特点.表 4 为 Sock-Shop 各服务性能指标的具体
服务韧性目标.为了分析混沌实验次数与识别的韧性风险数量之间的关系,案例研究中,对目标系统分别以混沌
实验次数 10 次、20 次、50 次、100 次进行韧性风险识别过程.考虑到每次混沌实验中 Sock-Shop 的自动构建、
部署过程和自动销毁过程,每次混沌实验的实验最大时长被设置为 30 分钟.对 Sock-Shop 混沌实验中的系统压
力场景的模拟将随机选择表 3 中的一个压力场景.在混沌实验中引入的系统环境扰动所涉及的系统资源以及
系统资源对应的系统环境扰动事件见表 5.
Table 4 Service resilience goals of Sock-Shop
表 4 Sock-Shop 各服务的韧性目标
服务 服务性能指标 性能降级程度 降级恢复时间 降级损失
全部服务 响应时间 10s 5s −
− 响应成功率 20% 5s −
订单服务 每秒成功交易量 − − 500 交易
商品信息服务 每秒执行事务数量 − 5s −
用户登录服务 登录成功率 20% − −
Table 5 System environment disruptions events of different system resource types
表 5 各个系统资源类型的系统环境扰动事件
系统资源类型 系统环境扰动事件
CPU CPU 资源占用至 100%
内存 内存占用至 100%
磁盘 磁盘 I/O 阻塞
网络 包传递延时/包损坏
进程 进程被杀死
容器 容器被关闭
服务器 服务器宕机
混沌实验过程中各个服务的服务性能数据将通过两个方式收集:① 对于响应时间和响应成功率等通用的
服务性能数据,使用监控工具 Prometheus(https://prometheus.io/)组件进行数据收集;② 对于各个服务中针对业
务的服务性能数据,利用系统压力模拟工具在压力模拟的同时收集各个请求的返回结果,对返回结果进行统计