一般互联网金融产品的系统架构和服务逻辑是相当复杂的,我们通过单元测试、集成测试、性能测试等来验证服务的稳定性也是远远不够的,因为错误可以在任何时间以任何形式发生,尤其是对分布式系统。随着微服务应用数量达到数千之多,随着服务之间的调用链路越来越复杂,故障频频发生,稳定性建设工作就成为了一项重要的工作。
当线上发生了FullGC,OOM,慢SQL,下游依赖接口超时等情况时,我们服务时如何表现的?我们是否可以进行优化?优化后我们如何验证呢?针对这个问题,常规的单元测试是很难覆盖并且模拟的,这个时候,就需要使用到混沌工程了。
混沌工程: 主动在分布式系统上进行异常实验,观察系统行为,发现系统弱点,并持续优化和实验,不断提高系统容错能力,让人们建立复杂分布式系统能够抵御突发事件的信心。
一般要实践一次混沌实验,需要进行4个步骤,我们分为:
1、定制实验计划
从业务实际场景出发,设计具体实验计划,包括实验目标、范围、故障,选取稳态指标,限定爆炸半径,控制风险。
2、实验执行并反馈结果
执行前检查事件编排,查看当前观测指标状态,确认无误后下发实验,实验过程中观测稳态指标表现,据此判断实验是否符合预期,实验结束后恢复环境,同时输出实验报告。
3、架构优化与能力提升
业务相关干系人(运维、开发、测试等人员)收到结果反馈后需对已发现问题进行review、评估整改方案、修复计划并检查同类问题,最后进行系统升级。
4、优化反馈并提交验证
根据业务的优化反馈,再次提交实验请求,验证改进是否生效,进入下一轮混沌实验环节。
故障注入的实施流程分为三步,实验前、实验中、实验后。
其中,用户仅需要参与实验前的故障场景选择和实验编排,剩余步骤混沌平台自动完成注入,监控和实验报告的产出。
目前平台支持的故障原子场景有:系统类,应用类,安全类等。
平台可以一次实验配置多个故障原子,并编排故障原子执行。
平台可以灵活配置实验的稳态指标和监控策略,包含主机,jvm,网络,接口请求数,耗时,sql调用,基础组件等监控项。
系统包含故障原子管理,稳态指标管理,实验管理以及编排,监控看板,实验报告等功能模块。
用户在平台上选择并且编排好实验之后,触发演练开始按钮,即进入以下执行流程。
目标机器挂载故障组件,提供可支持故障注入的环境,该组件会以web的形式在目标机器内启动,并暴漏对应端口。
对故障组件暴漏的web服务触发故障执行。
故障执行过程中,会同步抽取该实验配置的目标机器的监控指标数据,进行分析和汇总,产出实验报告。
平台化的实施大大缩短了一次演练的时间与人力成本,自动化的日常演练成为可能,下面是传统红蓝对抗的人效对比
测试不再仅依靠功能测试和压力测试来保障服务稳定,混沌平台拓展了新的测试方法,并且有效解决模拟线上故障场景难的问题。
通过混沌平台进行不定期的攻防演练,在演练中去发现系统中存在的问题,对系统持续优化。
锻炼团队对突发故障的应急反应能力,逐步形成一套完备的应急预案。