Page 18 - 《软件学报》2021年第5期
P. 18
1242 Journal of Software 软件学报 Vol.32, No.5, May 2021
26. path_strings.remove(cur_string) //在最终输出链路中删除缓存链路
27. for child in node_children:
28. new_string=child.name+“→”+cur_string
//构建新的缓存链路,由于节点到节点的追溯过程具有方向性,算法在链路分析结果中把无向边当作
有向边输出
29. path_strings.push(new_string); //在最终输出中添加缓存链路
30. _build_path_string(child.children,new_string);
//递归调用链路生成方法以输出所有可能的链路
4 案例研究以及结果分析
为了验证本文提出的微服务韧性风险识别和分析方法的有效性,本文选取了由文献[77]所提出的微服务基
线测试套件 Sock-Shop(https://microservices-demo.github.io/)作为实验对象,对本文提出的方法进行案例验证.案
例研究中将验证以下研究问题.
(1) 本文提出的韧性风险识别方法是否能够自动地识别出目标系统的韧性风险?
(2) 本文提出的韧性风险分析方法是否能够有效地分析出目标系统在发生韧性风险时因果的影响链路?
4.1 目标系统以及实验环境
图 9 为 Sock-Shop 的系统架构图.整个 Sock-Shop 系统由前端(front-end)、订单服务(order)、支付服务
(payment)、用户服务(user)、商品详情服务(catalogue)、购物车服务(cart)以及邮寄服务(shipping)这几个微服务
组成,每一个微服务均可以独立运行且拥有独立的数据库.为了保证微服务技术异构性 [10] 的特点,Sock-Shop 中
不同微服务的实现语言以及使用的数据库各不相同.Sock-Shop 中,微服务之间的通信以 HTTP 通信为主,并使
用了 RESTful 的接口设计风格.
Fig.9 Sock-Shop architecture
图 9 Sock-Shop 系统架构
图 10 为案例研究中 Sock-Shop 的部署环境图,整个部署环境将由一个控制服务器和由一个 Master 节点以
及 3 个 Worker 节点所构建的容器集群管理平台 Kubernetes(https://kubernetes.io/)组成.Sock-Shop 系统被部署在
Kubernetes 集群上,Sock-Shop 中的每一个微服务均在一个或多个容器上部署.控制服务器负责韧性风险识别方
法的自动化实现.其中,Sock-Shop 系统的自动部署和混沌实验的进行由部署在控制服务器上的 Jenkins(https://
jenkins.io/)容器完成,压力测试框架 Locust(https://www.locust.io/)负责 Sock-Shop 应用压力场景的模拟,混沌测
试工具 Chaos-Toolkit(https://chaostoolkit.org/)负责系统环境扰动的实现.部署环境的各个服务器配置相同,具体