IT系统建设在经历过单机、集中、分布式的演变历程后,系统运维演练、故障模拟测试的复杂度也不断提高。在复杂的分布式系统中,基础设施、应用平台都可能产生不可预知的故障,在不能确知故障根源的情况下,我们无法阻止故障的发生。更恰当的思路是致力于这些风险发生之前,模拟和演练故障触发的场景,识别和了解故障触发的规律和影响,再有针对性地进行加固、防范,从而规避故障发生所造成的严重后果。基于混沌工程技术开展的混沌工程测试,更加系统化模拟了真实场景下可能出现的故障(或故障组合),能够达到检测、验证、分析被测分布式应用环境的健壮性和边界,尤其在当前全栈全域技术自主可控趋势的背景下,复杂故障的场景组合选取就成为迫切需要解决的痛点问题。
01 混沌工程演练的场景探索
为了能更加系统化模拟真实场景下可能出现的故障,解决全栈全域技术信创趋势背景下,复杂故障的组合场景选取的痛点,混沌工程平台产品在技术能力、实践方法论及故障设计方面可以进行如下针对性的探索。
■ 在技术能力方面。混沌工程平台应在具备IaaS、PaaS、SaaS三个系统层级故障模拟能力的基础上,进一步完成服务支撑层的整合搭建,例如引入压测全流程管理、可视化监控能力、自动化混沌测试等模块,使得产品功能更加丰富;可以支持架构选型、全链路压测、混沌工程测试、运维红蓝对抗演练四大重点业务场景;另外应开展自动化混沌工程技术的落地实践,为行业客户提供功能更加完备的智能化平台。
■ 在混沌工程实践方法论层面。以成熟的流程制度牵引混沌工程的实施过程,流程需涵盖测试、开发单位、架构、需求、运维等多个专业部门在实施过程中的分工与责任落实。中电金信在整个混沌工程测试的实施过程中,总结出混沌实施七步法,包含目标确定、稳态指标制定、故障设计、流程编排、实验执行、结果分析、修复验证,这个七步法贯穿了整个流程,保障了实施过程的高效有序。在七步法中,最关键的一步是“故障设计”这个环节——决定了我们要测试哪些故障案例,按照什么优先级的顺序,测试的方法步骤是什么。
■ 在故障设计方面。需要以完备的框架来牵引场景挖掘和故障设计。根据多年的实践经验,中电金信沉淀出故障设计指南,引入FMEA理念指导具体系统、具体场景风险优先级的评估,并结合金融领域混沌工程标准用例集和指标评估体系,使得混沌工程的落地不必从0到1开始,极大地降低了实施门槛,实现了在对具体系统定制化故障场景设计的同时,可以应用更少的故障场景发现更多的系统风险隐患。
02 典型案例
以华南某银行新手机银行项目为例,具体分析如何实施针对分布式银行核心业务系统的混沌工程实验——如何制定目标、设计故障、有效执行、关注指标以及效果评估。
■ 项目概述。华南某银行个人手机银行系统于2012年规划建设,基于“传统单体架构”,手机银行承载了账户管理、贷款、理财等基本功能和客户服务能力。面临客户量增长、客户快速变化的多元化需求以及信创相关安全问题,客户决定于2023年启动新一代手机银行系统建设,新系统基于全栈信创的金融交易云底座,部署于K8s容器云环境。手机银行属于重要对客系统,对系统稳定性提出了更高要求,因此在上线前,通过混沌工程保障和提升手机银行系统的稳定性能力,通过在测试环节对手机银行系统进行高可用能力准出,验证和提高系统的韧性,验证容器编排合理性,保障新手机银行系统平稳上线。
■ 实施方案。主要采用两步走的方法进行系统测试。
(1)平台搭建,主要工作为建立混沌测试系统化的流程,为系统上线沉淀经验。搭建一套混沌工程测试系统用于进行各类故障的模拟,并编写故障测试案例用于场景适配。本项目中所搭建的混沌工程平台涵盖基础设施、平台、应用各层进行故障注入的同时实现测试过程、结果的可视化展示,平台部署架构如图所示。
图 平台部署架构
平台主要由基础管理模块和功能模块组合。基础管理模块:包括环境管理、系统管理、事件管理等,涵盖机器管理、应用管理、部署单元管理、K8s集群管理、用户管理、权限管理、角色管理、菜单管理、系统资源实验事件和应用实验事件管理等子模块。功能模块:包括测试管理、演练管理等子模块,其中测试管理模块支持测试计划的管理编排,支持发压脚本、常规实验场景、实验任务执行队列、压力机资源、监控跟踪、实验报告信息查看、测试场景信息统计分析、并发实验监控、可观测性及压测全流程管理、自动化故障设计和实验案例生成、自动化实验报告生成等功能。
(2)故障模拟,主要工作为模拟各类故障,暴露隐患和缺陷。仿真模拟硬件故障/软件故障/网络故障/人为故障/异常/攻击等状态,观测系统在CPU/内存/网络等故障发生时处理状态。
实际项目推进中,通过需求调研,选取了16支高频交易提供压力注入,通过源启混沌工程平台的压力发起能力进行交易数据模拟,针对系统响应时间、TPS、成功率等业务指标和CPU、内存、网络、IO等系统指标进行采集,经由平台集成的监控体系予以图形化展示,并最终形成阶段性测试报告,对系统画像进行呈现。
其中,针对该手机银行系统的PaaS底座和SaaS服务中的机制与特性,共设计编写超过150个案例,涉及的故障场景包括:进程拉起服务的启停、系统宕机、宕网卡、停应用、停服务、进程挂起、JVM异常、Druid数据库连接池打满、模拟机房故障后的集群切换等。
以上所有案例均由源启混沌工程平台执行,有效验证了容器环境下的多项系统高可用能力。
■ 应用成效。在自主可控软硬件运行环境中,源启混沌工程平台完成了对部署于K8s容器云平台的分布式架构新手机银行完备的可用性测试,对增强系统稳定性、提高系统质量,具备实际效益和重要意义。通过本次测试,验证了容器环境下的集群高可用性、负载均衡有效性、故障转移有效性、服务注册&服务发现有效性、服务自我拉起、超时有效性、强弱依赖有效性、数据库集群有效性、批量服务高可用能力。
另外在混沌测试执行过程中,发现了一系列与K8s容器相关的问题,涵盖PaaS组件以及SaaS应用等。根据发现的问题,后期编制形成符合高可用等要求的项目上线规定,对上线的K8s容器管理的组件、业务应用的探活方式以及探活的各配置参数都有了指导性建议。
截至目前,共执行实验场景150余项,累计实验500多次,编制混沌测试结果分析明细报告12份,总计1000页+,汇总编制混沌测试汇总报告1份,发现系统问题58项,并给出相应的优化建议或解决方案。
■ 创新经验。以高可用测试的具体能力项(如负载均衡有效性、强弱依赖有效性)为基本单元,按照测试场景需求,将原子混沌工程故障场景进行有效组合。并应用混沌工程平台完成多个维度的高可用能力项测试工作。
实现对测试缺陷管理的全过程管理,支持测试缺陷全过程的跟踪、状态修改,对测试缺陷进行管理和汇总。
在测试工作中引入自动化能力,将系统架构内置于平台库中,并基于高可用专家库模板功能,实现自动化故障设计和实验案例生成,并在实验执行完成后自动化生成实验报告。报告维度包括:测试案例、测试实验、业务指标观察、系统资源指标观测、实验结果分析、测试缺陷的关键环节数据依据等。有效降低人工重复的工作内容,大幅提高混沌工程的实施效能。