云计算·大数据 频道

农业银行混沌工程平台建设实践

  在传统的分布式系统开发、测试环节中,系统稳定性的验证方法有限,对系统是否能有效支撑业务稳定运行的验证往往不够充分。在此基础上,引入混沌工程,通过事前试验的方式,提前发现系统未知的、意料之外的故障情况,弥补传统测试的不足,验证技术运营和应急处置措施,从而提升系统抵御未知风险的能力。本专题讨论混沌工程相关技术的研究和应用实践,旨在分享农行混沌工程相关技术的探索经验。

  混沌工程是在分布式系统上进行实验的学科,旨在提升系统容错性,建立系统抵御生产环境中发生不可预知问题的信心。

  ——Chaos Engineering

  一、混沌工程建设背景

  1、需求背景

  随着云原生和分布式技术的发展和广泛应用,技术架构逐渐向微服务化演进,云上云下应用服务逐渐丰富和深化,系统建设面临新的难题:一是由于系统级联依赖增多而带来的不确定性风险成指数级增长;二是核心应用系统“云化”规模日益庞大,交易链路长,业务调用及数据流转复杂;三是随着数字化转型和分布式技术的推动,云上云下底层基础设施更加多样化,容灾及多可用区架构导致运维复杂度增加。如何解决以上难题,如何在利用好新技术的同时保障安全生产和业务稳定是农业银行及同业持续探索的问题。

  2、解决方案

  混沌工程是一种提高架构弹性能力的技术手段,能够实现软件定义故障,可通过科学的方法,更高效、智能的发现并解决系统架构、复杂类型基础设施、多可用区、应用运行等层面存在的问题,持续提升系统的稳定性和高可用能力,检验系统面对各种故障的反应,建立系统在生产环境中应对各种“不按常理出牌”场景考验的信心。混沌工程已逐渐成为业界主流解决方案,该技术目前处于快速发展期。但单纯使用脚本驱动混沌工程工具难以满足企业级需求,如体系化、规模化、自动化、一键式故障注入的能力和多样化的管理需求,因此有针对性地进行混沌工程平台建设已成为当务之急。

  二、产品调研

  目前混沌工程平台产品大部分是直接使用或者二次封装开源工具做为底层混沌引擎,渐进式推出能够适配企业级落地的混沌工程平台。项目组对部分开源混沌工具进行了离线部署安装试用,并对故障注入能力等多个维度进行了横向对比分析,开源混沌工具在故障注入功能方面都较为丰富,但在配套建设的监控分析、故障场景、可视化、自动化等方面均存在较多不足,需要通过平台化能力建设来降低使用学习成本,提升易用性,适配混沌工程的企业级落地发展需要。同时基于开源能力也衍生出不同的商业产品能力。

  图1 混沌工具产品情况

  三、同业情况

  银行业需要保障客户和银行资金安全,并提供海量高并发的交易需求,因此稳定性和时效性是金融应用系统的命脉所在。金融同业近几年也在积极开展对混沌工程技术和平台建设研究,逐步落地并不断演化。

  通过信通院公布的相关信息了解到,中国工商银行启动混沌工程故障演练方案,并建设故障演练平台,覆盖系统、应用、容器等三大类场景,提供介质下发、压测发起、故障实施、环境恢复的自动化演练能力,形成常态化故障演练机制;建设银行混沌工程通过平台化进行一站式故障演练,提供实验功能,发压监控等功能为用户提供可观测性的故障演练;北京银行对云原生技术平台进行了可靠性验证,进一步催生了自动化、场景化、工程化的测试需求,对构建具有银行业特点的分布式稳定性体系建设奠定了基础。

  四、农行实践

  农业银行也针对混沌工程技术开展了试点工作,各试点系统结合自身特点利用混沌工程技术挖掘系统隐患,在提升系统稳定性方面做出了有益探索,为混沌工程在中国农业银行的推广应用积累了宝贵经验。

  农业银行在混沌工程试点实践基础上,总结出了痛点问题和平台建设需求,结合农业银行技术风险管理的核心诉求和现有研发管理流程,以提升金融业务系统韧性为核心目标,统筹规划了构建适合农业银行的企业级混沌工程实践体系,以实现从“混沌工具”到“混沌工程”的飞跃。

  1、建设现状

  农业银行以开源的混沌工程核心能力为基础,使用行内技术框架进行了混沌工程平台的原型开发,以辅助进行需求分析,评估需求的可实现性。目前已实现开源混沌技术所提供的核心能力的集成,并按照农业银行实际需要提炼了部分建设需求,同步进行了功能优化和新需求开发。混沌工程技术是一门不断发展中的学科,相关平台化能力及建设需求也会随着农业银行以及业界发展而不断演化和提升。

  图2 混沌工程平台建设需求

  2、平台能力

  混沌工程平台主要围绕混沌工程的基本原则,以农业银行建设规划为指导,建立能够面向多集群、多环境的故障演练平台,支持Kubernetes和主机环境。其中在Kubernetes环境下支持Node、Pod、Container维度的系统和应用级故障演练,同时也需建设对应的故障场景管理、实验管理、实验演练、实验观测、演练报告、权限管控、流量模拟和实验防护等功能,以实现可视化编排、一键式故障注入等能力。平台能力视图如下图所示。

  图3 混沌工程平台能力视图

  环境管理

  平台可支持管控各类基础资源,包括对Kubernetes集群、主机的统一监管,实现多云集群管理和主机探针安装和管理,并支持多种计算架构。主机包括物理机和虚拟机,通过混沌平台将agent安装至被测终端,从而实现对被测终端后续故障注入和监控;对于Kubernetes集群,以DaemonSet方式部署operator和tool来实现对被纳管集群的故障注入和日志收集。

  故障场景管理

  平台支持故障库基础能力建设,多维度提供基础设施和应用级别原子故障,并建设支持用户自定义的实验场景,允许用户上传自定义shell、python、yaml等脚本以及文件、组合类实验场景、生产案例故障场景和特色故障场景。并提供故障的生命周期管理,为充分发挥用户的主观能动性提供“舞台”,实现故障场景的灵活多样性。

  故障演练

  在平台上可手动执行、自动或定时执行故障演练,实现一键注入故障的便捷操作。支持采集并可视化动态展示监控指标,支持演练日志和演练流程的实时更新,实验任务的自动终止、一键终止和演练重试等功能。

  实验管理

  在混沌工程演练中,将对被测对象编排好的故障场景、稳态指标、爆炸半径、实验排期等信息做成实施计划,并通过实验审批流程来控制演练的合规和风险。

  实验观测

  良好的实验观测能力可以为实验提供强有力的数据支撑,为实验结果分析、问题溯源、和根本解决故障等提供基础。包括基础资源指标观测、业务指标观测、性能指标观测、稳态指标观测,以及对应实验报告等。完善的实时观测能力是混沌实验有效开展的手段。

  报告管理

  实验演练结束后,能够基于预制的模板,并根据实验信息和执行结果,分析得出演练结果,并自动记录演练流程和对应的监控指标变化情况、压测情况、实验收益情况等,为用户自动生成演练报告,节省手工撰写的时间成本,并提供基于权限管控的报告下载能力。

  流量模拟

  混沌工程体系能够对接内部压测平台,实现生产环境的流量模拟和流量回放等功能。

  实验防护

  良好的实验防护可以防止混沌演练发生“超预期”影响,实现“实验可控”,即对于超出稳态指标阈值的实验,可以进行实验终止。包含手动终止、自动终止、以及超时终止和恢复重试等。通过多次深入演练和分析,逐步控制爆炸半径范围并收敛稳态指标。

  权限管理

  对实验人员、实验对象、实验过程以及故障资产等权限的管理,包含租户隔离、组织、角色和权限等。平台安全审计和日志展示,包含对平台中涉及安全相关的活动或者执行某些关键操作行为进行识别、记录、存储、分析。

  知识库

  前期将开源工具帮助文档集成到平台中,便于在离线环境中查找学习资源,降低学习使用成本。后期将基于实践,总结出更多的混沌工程实验开展相关的知识项,逐渐形成实用的知识体系。

  五、应用场景

  通过平台的建设,可以降低用户学习成本,提高混沌演练效率,并沉淀生产故障案例,平台可用于如下应用场景。

  1、周期化红蓝攻防演练

  在混沌工程体系建设中,本着“实战化、常态化”的思想,通过建立生产仿真环境,进行生产流量模拟回放,除常规的混沌测试外,还可以采用周期化的红蓝攻防。红蓝攻防一般是将人员分为两组,一组为“蓝方”,负责分析和设计故障注入场景方案,并且执行故障注入,制造出真实故障;另一组为“红方”,在指定事件内感知并修复故障。蓝方可以随机在系统或应用中注入故障,验证应用服务及平台系统是否具备容错能力,同时也在周期性的演练中探索系统的稳态边界;红方可以借此锤炼故障感知、定位及恢复能力,提前发掘构架或编码风险,降低平均故障发现时间(MTTI)、定位及故障平均修复时间(MTTR),自动化、周期性、有组织的进行,提升系统韧性。

  图4 混沌工程实验流程

  2、多环节渗透于软件生命周期

  软件生命周期包括项目开发、测试、运行、运维等多个环节,混沌工程平台可在各个环节中提供发现问题、降低技术风险的能力。

  开发测试环节

  传统常规的测试和发掘问题的方法已经不能全面理解和覆盖系统和应用所有可能的行为,混沌工程技术是传统测试的重要补充。除提供系统和业务级别的故障能力外,混沌工程平台还能够提供代码以及组件级别的故障注入能力,可以用来验证源代码的可靠性和鲁棒性,防止单点架构,评估系统弹性,同时也可以用来做代码测试的重要依据,进行分布式架构设计验证,生产案例场景测试,做持续交付和质量门禁,从而反哺开发环节。

  运维环节

  混沌工程可提供基础资源故障和应用级别故障,多维度覆盖主机、Kubernetes、容器、数据库、中间件等故障演练场景,结合周期性攻防演练,可以常态化以战养战,锤炼运维团队的应急能力,完善应急方案,让系统更健壮的同时,不断提升应急处置的敏捷性,激活了IT软硬件活力。

  灾备环节

  混沌工程会注入故障来模拟生产事故,因此可以使用混沌工程技术验证灾备切换预案的可用性及适用性,灾难的预设场景也会随着混沌技术的不断运用来越来越丰富,真切实练,提升业务连续性级别。

  图5 混沌工程在各环节的应用

  六、分析展望

  建设混沌工程平台建设是推进混沌工程在农行落地和发展的重要工作任务,通过集合行内工程化能力,设计和制定混沌工程的实验标准、技术规范并逐步推进技术的落地和建设,以避免在非生产环境中形式化实施。在建设过程中也发掘出如下工作要点。

  用户构建个性化场景

  混沌实验平台提供原子故障和自定义故障场景能力,用户如何使用混沌工程提升系统韧性,需要用户根据各自系统不同特征,构建个性化的故障场景。这是一个需要长期摸索和积累经验的地方,也是最凸显价值的地方。

  稳态量化

  使用混沌工程对基础设施和应用系统进行故障演练过程中,系统稳态如何合理量化,故障演练爆炸半径如何能成功触及稳态的“弱信号”边界,如何自动化、智能化的实现稳态和信号之前的平衡,是比较有挑战性的部分。

  先有后优

  实现先从无到有,再从有到优的建设。以业界标准和规范为依据,不断进行深度建设和能力扩展,推进与混沌工程相匹配的组织和文化级建设,打造业界领先的混沌工程能力,提升分布式系统的稳定性和韧性。

  图6 混沌工程两大评级参考

  七、总结

  混沌工程作为提升分布式系统韧性和稳定性的重要技术和有效手段,在金融行业的应用和落地建设符合数字化转型的战略要求,有助于进一步推动金融系统高质量发展。同时,将混沌工程能力进行平台化组合和管理,通过可视化编排、计划发布、界面化操作、场景自定义、一键式注入等方式,能够有效降低混沌实验开展难度,加速混沌工程在企业中的落地和推广使用,并有助于形成长效机制。

0
相关文章