随着互联网的快速发展,传统的单工程的性能瓶颈越发明显,分布式系统的优点越发突出。分布式系统具有廉价高效的特点,利用性能相对一般的 PC 横向扩展,提升服务器性能,通过软件来保障系统的高可靠性。
由于分布式系统存在 API 接口通信、微服务架构、节点规模大等特点,增加了系统的复杂性和出错的概率,从而很难确保系统的容错机制得到充分的验证,依赖自动化工具来完成对系统端到端验证是不可避免的。
Netflix 和类似互联网企业构建的大规模的分布式系统,不可避免地会发生如机器崩溃和网络延迟等故障。为了给客户提供“永远在线”的体验,建立系统可以可靠运行的信心。需要软件能够检测、处理各种错误情况,除了少量发生概率较低的极端故障。
华为云可靠性解决方案
在业界,混沌工程被定义为“在分布式系统上进行实验, 以建立对系统抵御生产环境中失控条件的能力的信心”。
基于华为在 ICT 领域 10 多年的阿软件可靠性测试经验,以及工程师们的千万个夜以继日,华为云推出了在混沌工程领域应用实践的一套完整的解决方案。目标是沉淀通用的故障模式,从入门到精通,从研发到生产,层层推进,以在线演练和专业测评来持续暴露问题,“防止失败的最佳方法就是经常失败,在真实环境测试,而不是模拟环境”,通过线上真实的问题来推动产品全方位的改进。
全面有效的故障模式库
基于华为在 ICT 领域 10 多年的实践积累和数百产品的实际应用的沉淀,电信领域软件的高要求,我们通过正向分析、事故分析、业界案例分析三个维度建立全面的故障模式库。
精准高效的故障模拟
我们通过软件模拟各种硬件故障,对应用无侵入,而且跟应用的实现语言无关。
端到端全自动化测评
我们实现了智能识别故障对象,而且全自动化运行,自动度量 KPI,自动实现风险评估,生成测评报告,测试工程可反复执行。防止失败的最佳方法就是经常失败。在真实环境测试,而不是模拟环境。通过我们的端到端全自动化测评,可以实现这个目标。
华为云混沌工程应用场景
入门级可靠性测试:手工注入
功能:提供对 Kubernetes 集群、弹性云服务器的单业务实例、单故障模式的注入。
适用场景:开发人员针对确定故障的自验证;测试人员针对可靠性问题回归验证等。
特点:操作简单,故障注入/清除结果及系统的表现清晰可见。
手工注入是混沌工程的入门级功能,操作非常容易,结果直接清晰。
首先在服务所在的容器集群或者节点上安装探针,一键安装,秒级创建,速度很快;
然后选择注入对象和注入的故障,还可以选择设置告警、CPTS 压测工程,就可以完成一次故障注入;
再接着就是以 5 分钟为维度获取监控数据生成测试报告;
最后你就可以基于报告来评估服务可靠性的质量了。
全流程可视化操作,只用鼠标点点点就可以了;简单易用,使用门槛低,非常方便开发者和测试人员进行基本的可靠性测试。
进阶级可靠性测试:故障演练
功能:提供对单工作负载的随机故障注入,预置了多种入门级和进阶级演练场景。
适用场景:线下随机故障注入测试;线上例行故障演练、专项演练等。
特点:模型化的场景定义、灵活的编排调度、丰富的评估报告。
故障演练主要使用场景是线上例行故障演练和专项演练。相比于手工注入,故障演练会提供多种入门级和进阶级的演练场景。上图为传统的手工演练流程,与混沌工程提供的故障演练能力对比。
三、四年前我们还处于传统手工演练阶段,全流程的手工进行,后续逐步演变为现在混沌工程提供的全自动化故障演练能力,经我们自己实际使用对比,现在的自动化演练过程比手工更准确和规范,避免人为导致的差错;可靠性专项测试人员投入的时间可以减少 80%,端到端效率提升 10 倍以上。
绿色动图分割线
我们提供如下的预置模板,同时也支持自定义演练任务。
高阶级可靠性测试:自动测评
功能:提供对多工作负载全量的可靠性测评。
适用场景:云服务的全量可靠性测评;不同服务、不同版本的可靠性能力对比。
特点:智能对象识别、自动用例生成、无脚本化执行、自动 KPI 度量、丰富的评估报告。
自动测评最大的特点就是智能对象识别、自动用例生成、无需定制脚本的全自动化执行、自动 KPI 度量生成丰富的评估报告,可以对不同服务、不同版本的可靠性能力进行对比。
自动测评服务的智能对象识别能力,保证了故障对象覆盖的全面性,能有效避免人工测试出现的遗漏。自动用例生成与无脚本化执行,大幅节省了用例设计和自动化脚本编写的工作,同时降低了自动化可靠性测试对人员技能的要求。
系统预置了 3 种常见场景模板,同时支持用户自定义。既可以用预置目标快速创建任务,也可以灵活的定制任务。
测评报告
混沌工程通过结合华为云上的 CCE、ECS、CPTS、AOM、APM 等服务,提供了一套完整的端到端的可靠性测试解决方案,解决了测什么、如何测、如何评价的问题。
可靠性质量评估架构
在华为云上,云服务部署的载体要么是 ECS 的弹性云服务器,要么是 CCE 的容器集群,我们现在已经支持对 CCE 容器集群和弹性云服务器 ECS(linux)进行故障注入。
CPTS 服务可以实现对应用接口的压测,在故障注入的同时运行,通过 CPTS 的报告用来评估故障对业务的影响。
AOM 可以完成对容器、主机的资源监控,以及自定义阈值告警,故障注入后相关的监控数据和告警数据会被写入混沌工程测试任务的报告中,然后根据可靠性质量评估方法实现自动 KPI 度量,生成评估报告。
APM 提供了调用链功能,在故障注入后,利用调用链可以快速完成问题定位分析。
可靠性质量评估方法上,我们采用的是基于可靠性关键质量属性的 KPI 评估方式,如下图。从故障模式维度和测试对象维度对 KPI 进行分析,可以针对自己的服务特性,自主调整评估的参数,然后生成测评报告。
评估属性和方法
本文转载自 华为云产品与解决方案 公众号。
原文链接:https://mp.weixin.qq.com/s/G6q4U3Qultb9ZRWnTopfMg
评论