中国农业银行 HUAWEI 从理念到实战 商业银行混沌工程研究和实践白皮书 中国农业银行华为技术有限公司联合发布 编写单位及作者 招导单位 北京金融科技产业联盟混沌工程实验室 编写单位及作者 编写单位 中国农业银行研发中心华为2012服务实验室 华为云计算技术有限公司 编写委员会 专家顾问 蔡仕志闫晓林聂丽琴陈屹力贡佳炜谢友瑶许国平罗学平刘跃光邓锐龚毅贾磊刘柳明徐志华魏坤 孙虎胡玉海郭婷何亮齐泊淞 主要执第人 赵勇帅慧数刘浩彭尚峰杨易寰刘福铭李军王郁 黄容萍王海清 编写组成员 李惠婷徐进晓邱春丽刘蓉张少博张泽陈飞云王嘉良胡莉莉刘一童张慧萍王宽刚涂锐来丽晗耿鹏赵欣何学辉曹铉曾剑鹿王晓华耿鑫王振刚常佳曼刚 陈鹏飞张子阳王耀园博晟刘平郑云洲胡志远梁晓豪胡晓嘉林丽鑫曾磊刘丽产 前言 前言 二十大报告指出要加快建设数字中国,并对加快发展数字 经济做出了战略部署,具体到金融领域,《国务院关于金融工作情况的报告》明确要统筹发展与安全,牢牢守住不发生系统性金融风险的底线,坚定不移走中国特色金融发展之路,实现金融高质量发展。对于商业银行,IT系统作为数字业务的承 载,是支撑数字化转型的重要力量。随着金融创新越来越多、产品交付效率越来越高,IT系统规模愈发庞大、链路结构依赖日益复杂,这种结构性的内生复杂与不可预见的用户行为交织 在一起,对系统的稳定性提出了更高要求,稳定性建设已成为 云原生时代银行T部门的关注重点, 在此背景下,混沌工程(ChaosEngineering)作为一 种以主动注入故障方式识别和修复未知隐患的手段,已成为稳定性提升的有力抓手,本白皮书针对混沌工程在商业银行落地过程中如何构建体系化实践方法论、如何评价实践效果、如何 建设企业文化三方面挑战,给出了参考方案, 《从理念到实战一一商业银行混沌工程研究和实践白皮书》在北烹金融科技产业联盟、漏沌工程实验室指导下,由中 国农业银行研发中心、华为2012服务实验室、华为云计算技术 有限公司联合编制而成,是践行数字化转型、高质量推进业务发展过程中对于混沌工程的研究和实践集成,对同业具有较强 的参考和借鉴价值。 目录 第一章 目录商业银行混沌工程应用背景04 1.1IT系统走向分布式时代·04 06 1.2混沌工程提供了分布式系统稳定性分析和检验手段05 1.3混沌工程在商业银行快速发展 2.1如何构建混沌工程实践的体系化方法论 07 第二章混沌工程落地挑战07 2.1.1打法思路探素 07 60 2.1.2支撑平台建设 2.1.3管理机制适配09 2.2如何评价混沌工程实践效果 2.3如何建设混沌工程团队文化 3.1混沌工程基本原理研究 第三章 混沌工程落地体系研究11 -11 3.1.1从,风险到事故的“海因里帮法则” 12 3.1.2稳定性风险控制的“奶酪原理” 3.2混沌工程基本原则研究.-13 3.3混沌工程落地体系研究.13 4.1实践方法体系 16 第四章混沌工程落地体系要点16 4.1.1打法思路 4.1.2技术平台··26 4.1.3管理机制-27 29 4.2评价体系 4.3企业团队文化30 4.3.1技术认同感30 31 4.3.2数练人才培养 第五章实践案例32 第六章未来展望·37 6.1技术层面展望·37 6.1.1自动化故障场最分析37 6.1.2超大规模故障注入和回退-38 38 6.1.3请求级别的无侵入故障注入 38 6.2应用层面展望 6.2.1混沌工程信心值模型·38 -39 6.2.2领域故障场景库建设 第七章总结·39 附录术语解释 ·40 第一章 商业银行混沌工程应用背景 1.1IT系统走向分布式时代 党的二十大报告指出要加快建设数字中国,并对加快发展数字经济做出了战略部署。具体到金 融领域,《国务院关于金融工作情况的报告》明确要求统筹发展与安全,牢车守住不发生系统性金融风险的底线,坚定不移走中国特色金融发展之路,实现金融高质量发展,IT系统作为数字业务的承载,是支撑商业银行数字化转型的重要力量,随着金融创新越来越多,支付效率越来越高,传统单体IT架构已暴露出很多不适应的地方,为此商业银行广泛应用云原生,分布架构等新技术来支撑快速转型发展, 新技术在具备“高性能,高弹性,低成本”的优势同时,也伴题IT系统规模意发鹿大,暴露出风 险点位增多、依赖关系复杂等特征,这种结构性的内生复与不可预见的用户行为交织在一起,对系统的稳定性提出了更高要求,稳定性建设已成为云原生时代银行部门的关注重点 相比小型机时代的集中式单体应用,分布式系统由大量PC服务器组成,强调通过横向扩展来提升整体性能,但当前PC服务器的单点可靠性与小型机还存在差距。这意味着为了达到同等甚至更优的稳 定性水平,技术路径上须要从依赖硬件可靠性,转为主动在软件层面构建稳定性。 商业银行混沌工程应用背票 1.2混沌工程提供了分布式系统稳定性分析和检验手段 稳定性属于IT系统非功能性需求,在实际工作中存在不易验证的特点,由于单体应用故障率相对较低,所以在单 体时代,需要在软件层面关注的稳定性问题并不复杂,而在分布式时代,系统规模呈指数级上升、故障发生的频率变高,这种变化驱使软件层面必须提升系统稳定性的建设和运营能力。关于系统稳定性,业界专家积累了很多正向建设经验和原则,但缺乏有效的反向验证手段。 混沌工程作为近些年兴起的一种新理念,其通过设计并执行一系列实验,帮助发现IT系统技术架构(需求、设计、架构、代码、运维等)与运营流程方面的隐照风险和薄弱环节,从而全面提升系统稳定性,混沌工程起源于察 飞公司(Netflix)的一次停机故障,此次故障导致了DVD租赁业务中断三天,多个国家的大量用户受到影响,随后,奈飞的工程师逐步探索创建了一种名为ChaosMonkey的工具,通过随机终止在生产环境中运行的实例可以快 速了解正在构建的服务是否健壮,是否有足够的弹性可以客忍计划外的故障, 混沌工程理念一经提出便在技术领域引起了广泛的注意和讨论,相比传统测试手段,混沌工程的价值不仅仅是发现系统的风险或“暗病”,而是综合验证系统和业务健壮性、优化应急预案、锤炼技术运营和应急响应能力、提升对客响应和舆情攻关能力,最终提升业务、开发、测试、运维全条线人员对业务稳定性的信心。根据《中国混沌工程调查报告》“统计,“混沌工程使用频率”与“组织内产品可用性”是正相关的,体现了混沌工程在分布式系统稳定性提 升的价值。 都文都会害域11.11%11.11% 22.22% 55.56% 14.71% 38.244 14.71% 32.15% 每个月括会高510.133 29.11% 25.52% 35.44% 每季度滨然一次 15.094 29.25% 25.47% 30.19% 15.34% 32.9% 21.57% 29.19% 从末使用 25.8% 27.27% 2栋.36% 21.57% 鲁可用性低于99%鲁可用性在99%,99.9%之 0)用在99.9%测99.99%,2) 鲁可用性离于99.99% 图1产品可用性在不同混沌工程使用频率上的分布 稳定性测试非混沌工程首创,但传统的稳定性测试侧重点在于如何防范已知范围内系统缺陷的引入,对于需要特 定外界扰动才能触发的故障缺乏识别和修复手段,只能在系统故障发生时对故障进行被动的响应,导致故障应对的进 工程代码侵入性相对较低,很好地欢补了这个短板, (中国限工程网查报告)中国信递募·晟纯工程实险室 05 1.3混沌工程在商业银行快速发展 近年来随看对T系统稳定性要求的不断提高,混沌工程在国内呈现快速发展趋势,其中商业银行对于混沌工程的探索和实践处于“头部”位置。混沌工程受到商业银行“青陈”有着必然因素: 一是对于资金安全有着极高要求。提升系统稳定性、防范金融风险是商业银行义不客辞的责任, 二是处于技术转型深水区。技术架构、开发模式、运维模式均在变化,混工程作为稳定性提升的重要手段,必 然受到更多关注。 三是整体研发实力较强。有着良好的研究和实践基础,更容易落地混沌工程。 商业银行混沌工程发展的过程中,也针对业务稳定性提升积累了大量的特色场景和实践,以下简要列举了4类: 一是业务依赖。对于交易来说,响应时间有着比较高的要求,那么在服务链路日趋复杂的背景下,梳理清服务间的强弱依赖关系、路由关系对于业务健康发展是十分必要的。 二是业务连续性。对于极端情况下业务连续性保障,容灾建设是有效的应对措施,但是这并不是单纯的“堆设备”,需要在平时定期/不定期开展演练,检验从接入层、应用层到数据层的接管能力和时长是否符合预期,应急预案和切换步骤是否可热行、有效果。 三是营销活动。纪念币预约、信用卡营销等典型的营销活动是极具有银行特色的,不仅与单一的交易、业务条线相关,而是整个体系的“压力测试。,演练中可以通过混沌工程手段验证业务逻辑(例如错峰预约策略的合理性)和技术能力(扩缩容、熔断限流能力等),以及人员应急处置能力。 四是资金一致性。围绕着资金安全,对于交易高等验证、不完整事务发生后的处理策路、差错处理机制等的验证。 特别地,商业银行结合当前国际形势和趋势导向,从实际金融需求出发,以应用场票为牵引推动关键技术持续送代完善,在多个领域针对新技术、新产品进行攻关,以应用促提升,以应用促创新,在此过程中,混沌工程通过模拟各种故障场景,为新技术、新产品的攻关提供了更为丰富的运行观测数据,加速了经险的积累。 第二章 混沌工程落地挑战 混沌工程的理念非常吸引人,并且经过前期探索实践取得了阶段性成果,但在实践过程中,仍然 追切需要系统性的方法体系发挥指导和引领作用,以便更好、更全面地推广并真正释放技术价值,结合调研分析及自身实践,方法体系需要解决三类挑战,一是如何构建混沌工程实践的体系化方法论, 二是如何评价混沌工程的实践效果,三是如何建设团队文化。 2.1如何构建混沌工程实践的体系化方法论 与较为成熟的开发、测试及运维技术体系相比,混沌工程作为一门“年轻”的技术,在实践环节 中尚未形成通用的方法体系或最优实践,主要体现在以下3个方面。 1.如何分析故障场景? 混沌工程推广初期,不同工程师对怎样进行混沌工程实践,理解和行动上的差异很大。有的工程 师不清楚怎样进行故障实验,是在一个节点注入还是多个节点注入,是注入CPU满还是注入网络丢包,是否需要组合注入,面对灵活的注入工具反而感到迷范;有的工程师选择“随机注入”,有甚者为制造故障“不择手段”,这种做法确实会导致业务不可用,但现实中显然也很难出现这种故障,脱离了实际,使得混沌工程实践偏离目标,变成为了故障而制造故障。 以上做法与混沌工程内涵是相违背的,一般而言,混沌工程的目标是验证某个故障场景下系统的稳定性。但是到底如何分析并找出有针对性的故障场景,当前并没有很好的参考实践。 2.1.1打法思路探索 注入的目的是验证故障场景,但故障场景如何分析? CPU满 故障场景1 内存满 系统 故障场景2 内存延迟 故障场景3 ... 图2混沌工程场景分析示例 2.如何进行故障注入降维? 经过多年发展,当前故障注入工具所能模拟和注入的故障场景非常丰富,少则四五十种、多的达 到几百种。工程师在开展混沌工程时常会有疑问:这么多故障场景,是不是每个都要测一遍?IT系统模块、组件、服务、功能的复杂性叠加故障模拟和注入手段的丰富性,会导致“场景爆炸”现象发 生。 模块1 模块2 1000 .. 模块3 模块4 从故障注入角度计算,故障验证场景数量爆炸 200000+ 谢试? 内存满 CPU满 200+ 丢包故障 超时 图3故障注入“场景爆炸”示例 3.混沌工程的实验步票包括哪些环节? 完整的混沌实验应该包括哪些环节,这也是混沌工程在组织中推广面临的挑战之一,标准化的实 验步握可以统一