您的浏览器禁用了JavaScript(一种计算机语言,用以实现您与网页的交互),请解除该禁用,或者联系我们。[北京金融科技产业联盟]:金融级混沌测试平台建设能力研究报告 - 发现报告
当前位置:首页/行业研究/报告详情/

金融级混沌测试平台建设能力研究报告

金融级混沌测试平台建设能力研究报告

金融级混沌测试平台建设能力研究报告 北京金融科技产业联盟2023年10月 版权声明 本报告版权属于北京金融科技产业联盟,并受法律保护。转载、编摘或利用其他方式使用本白皮书文字或观点的,应注明来源。违反上述声明者,将被追究相关法律责任。 编制委员会 主任 聂丽琴 编委会成员 王璐张海燕 编写组成员 崔杰杜昆鹏李博文李振栾琪肖晶王耀强毋文涛张翔叶强林 编审 黄本涛张蕾 参编单位: 北京金融科技产业联盟 中国建设银行股份有限公司 平凯星辰(北京)科技有限公司 北京国家金融科技认证中心有限公司北京同创永益科技发展有限公司 摘要 混沌工程是通过主动向系统中引入软件或者硬件的异常状态(扰动),制造故障场景并根据系统在各种压力下的行为表现确定优化策略的一种系统稳定性保障手段。应用混沌工程可以对系统抵抗扰动并保持正常运作的能力(稳定性)进行校验和评估,提前识别未知隐患并进行修复,进而保障系统更好地抵御生产环境中的失控条件,提升整体稳定性。 本报告以混沌测试工具集为基础,采用开源云原生模式 构建自动化混沌工程平台,针对分布式系统的复杂性特点,设计不同层次的故障进行模拟。平台除提供应用层以及实际物理环境故障模拟外,还提供较为完善的故障编排功能,以便监控分布式系统状态,找出项目潜在的风险。本报告所述的混沌工程平台相对完整,可为国内金融行业构建混沌测试验证平台,提供实践经验和可行的参考方案。 目录 一、混沌测试平台建设背景与目标1 (一)建设背景1 (二)建设目标2 二、混沌测试平台建设要求3 (一)功能要求3 (二)适配性要求7 (三)集成要求7 三、混沌测试平台建设情况8 (一)系统构成8 (二)技术架构9 (三)功能模块10 (四)故障种类12 四、混沌平台测试方案与测试实践13 (一)测试目标13 (二)测试内容14 (三)测试过程15 五、混沌测试平台建设实践27 一、混沌测试平台背景与目标 (一)建设背景 随着数字化转型,金融行业加快了新一代架构转型的步伐,由传统的SOA架构向分布式架构、去中心化发展,当前还进阶到注重云化支持和异构化微服务支持的服务网格模式。 系统规模日益庞大,交易链路长、数据流转复杂,微服务架构由于技术异构性、具备弹性伸缩、可扩展性等优势,得到广泛推广;同时微服务架构在使用过程中又面临诸多挑战,由于系统级依赖增多而带来的不确定性风险指数级增长;通过传统手段进行高可用验证、代码健壮性审查、加大测试范围、提高监控敏感度等手段,都无法有效发现系统潜在风险。在微服务架构下,系统的风险管理越来越重要,提高系统韧性成为必然发展趋势。 微服务架构转型的驱动下,“混沌工程”实践可以通过规范化,流程化的方案对系统进行一定程度的“随机破坏”,让故障在可控范围内频繁发生,在此过程中可以深入地认知故障和系统,并达到持续改进的效果。混沌工程是通过向系统中引入软件或硬件的异常状态(扰动),制造故障场景并根据系统在各种压力下的行为表现确定优化策略的一种系统稳定性保障手段。其原则是可量化的稳定状态、可反映真实场景,但风险未知的假设、影响最小化。混沌工程利用实验提前探知系统风险,通过架构优化和运维模式的改进来解决系统风险,真正提升系统架构韧性,增强故障免疫力。 混沌工程是在分布式系统上进行实验的学科,首次提出是在2008年8月,由网飞公司(Netflix)提出。2012年ChaosMonkey在SimainArmy项目中开源,SimianArmy成为首个开源的混沌工程工具集。2019年开始,国内企业纷纷引入并实践混沌工程。 混沌工程通过主动向系统中引入软件或者硬件的异常状态 (扰动),制造故障场景并根据系统在各种压力下的行为表现确定优化策略。应用混沌工程可以对系统抵抗扰动并保持正常运作的能力进行校验和评估,还可以提前识别未知隐患并进行修复,进而保障系统更好地抵御生产环境中的失控条件。 目前国内混沌工程领域主要集中在一些大型互联网企业,应用领域和范围较小,商业化程度不高。金融行业建行、兴业、中原、浦发、招行等国有和商业银行均成立了内部的混沌工程团队,并开展混沌实验。例如,建信金科混沌工程故障演练平台应用于分布式平台相关组件,如应用路由、配置中心、分布式缓存、分布式消息、索引维护服务、分布式数据库等;在场景方面,建信金科在两地三中心多AZ故障、银行核心冲正交易异常时序、代收代付慢交易、应用路由服务治理、应用路由堵塞问题模拟等场景中。 (二)建设目标 1.业务目标 为丰富微服务和分布式系统的故障测试手段,解决分布式系统故障高发且难以预测的问题,通过研发自动化水平高、通用性 好、易用性强的混沌工程测试平台,帮助金融机构提升开展混沌实验的效率,降低开展混沌实验的成本,不断提升分布式系统的稳定性和容错能力。在现有研究基础上,重点突破全类型故障模拟、可视化操作、串并行故障编排、自动化监测告警等关键技术,在金融行业不同业务场景开展示范应用,进一步推动混沌工程方法普及,促进软件产业健康发展。混沌实验是指在混沌工程测试平台上面向复杂系统开展故障模拟、故障编排、故障注入、状态监测和故障恢复等一系列操作的集合。 2.技术目标 研究故障编排引擎、深入底层的故障注入、有效控制最小爆炸半径等关键技术,在混沌测试平台上提供混沌实验设计、实验编排、故障注入、状态检查、监控告警、实验报告等功能,实现高度自动化和可视化的操作,做到故障对应用无侵入,减少组件依赖,构建完整的混沌工程闭环生态。 二、混沌测试平台建设要求 (一)功能要求 主要功能应包括混沌实验模块、故障模拟发压模块、可观测性模块、权限管理模块、专家库模块5大部分。混沌实验模块支持对待测底层设施物理机/虚拟机、容器进行管理;故障模拟发压模块支持对混沌实验的过程进行管理,同时还对演练过程混沌实验事件进行标注;可观测性模块支持对实验全过程的监测和分析;权限管理模块支持进行混沌实验人员管理。专家库模块支持 沉淀典型故障业务场景,提供平台人员使用产品的效率。各个功能模块具体如下描述: 1.混沌实验模块 混沌实验调度组件。该组件基于自定义资源对象CRD设计,可以用来创建、配置和管理多种类型的混沌实验,组件接收到混沌实验对象的创建、更新等事件后,获取到具体混沌实验的最新配置。在通过解析调度规则以及实验配置后,执行具体的混沌实验。使用该组件,用户可以通过YAML文件的方式自定义混沌实验的目标、攻击对象、调度规则等。组件使用完全云原生的方案,实现完全无侵入的故障注入,并且提供了很强的拓展性,用户可以直接在此组件上增加新的故障注入类型。 故障注入组件。组件提供不同类型原子故障的注入和恢复功 能,以DaemonSet方式运行在每一个物理节点上,在接受来自调度组件的故障注入请求后,按照故障请求的配置,修改具体容器的cgroup,或者进入具体Pod命名空间下,通过tc、iptables、ipset等工具干扰具体的网络资源对象。同时该组件使用eBPF提供了内核故障注入的能力。 物理节点(虚拟机)编排引擎。该引擎提供多节点混沌实验编排的能力,用户将目标节点注册到该组件后,可以使用该引擎对已注册的节点执行各类故障注入。用户可以直接使用该引擎自定义混沌实验的步骤,配置检查程序等,并且提供复用已有的混沌实验场景能力。该引擎包含任务定义、任务调度、任务执行模 块,将基于KubernetesCRD事件机制和Golang语言开发,将每个可调度的物理节点和编排任务抽象为具体的CRD对象并使用Watch机制监控任务的具体变化,并实现特有的controller组件去处理具体的事件变化,并按照具体的配置解析成具体的任务交给任务执行模块,任务由入口任务和节点任务组成,入口任务会被最先调度,后根据入口任务内定义的子任务调度具体的节点任务,直到所有的任务都被执行过后,整个编排任务执行结束。 插件系统。不同应用由于环境不同会产生完全不同的故障场 景,很难在一个平台中涵盖所有可能的故障。为了能够重复利用社区的力量,以及收集实现世界中可能出现的场景,插件系统提供了用户自定义故障类型能力。用户可以使用此插件系统来定制化自己的混沌故障类型,如RabbitMQChaos、TiDBChaos等。插件系统是整个混沌工程生态中关键部分,用户将自定义的插件提交到插件库,这样其他用户可以直接复用此插件,很大程度降低了用户使用混沌实验的成本,避免重复的工作。 2.故障模拟发压模块 故障模拟发压模块以命令行工具方式提供服务,用户可以在物理节点或者虚拟机节点上直接运行相关命令,该工具会根据提供的命令配置,解析成对应的故障规则,随后执行具体操作。使用该组件,用户可以方便的在单物理节点或者虚拟机节点上,随机杀或者暂停指定的进程,模拟各种网络异常,模拟磁盘压力,CPU繁忙,内存压力等,同时提供历史查询,故障恢复等功能, 方便用户快速的实现故障的模拟。该故障工具基于Golang语言和SQLite3开发。 3.可观测性模块 可观测性模块进一步降低简化混沌实验的步骤和提供对混沌实验的可观测性,让用户可以通过鼠标和填写简单的表单实现混沌实验和场景的设计,并且在可观测性模块上提供方便的混沌实验检查机制和完整的实验报告。整个可观测性模块包括独立混沌实验的定义,需要支持定义混沌实验范围,实验具体行为,并且支持暂停和恢复操作。可观测性模块还包含设计整个混沌实验场景,需要满足应用状态定义,展示应用监控信息,多个混沌实验场景的编排,以及告警规则设置和报告信息设置等。 可观测性模块同时还提供服务监控和健康检查服务。在进行 混沌实验过程中,首先需要确认系统的稳态,并且基于稳定状态提出假设。为了简化用户进行混沌实验操作步骤,本方案计划在混沌工程平台中提供定义应用系统稳定状态方式,支持用户在自定义任务通过HTTP状态接口或者访问健康系统的指标方式判断系统的稳定状态。具备的应用系统稳态的判断能力,标志着混沌系统平台具备了混沌工程操作闭环的能力。 4.权限管理模块 权限管理模块。混沌实验要求能够有效的控制最小爆炸,并且不同用户之间有一定的隔离,只有提供有效的安全保障,用户才能放心的开展自己的混沌实验。为了达到此目标,权限管理模 块构建自己的权限机制,用户可以根据混沌实验的范围分配实验人员和实验环境的权限,有效的控制混沌实验的范围和保障混沌实验的安全。同时用户可以使用此权限系统进行混沌实验人员管理,可以创建不同角色的实验人员,如可以分配至具有查看权限的观察者角色等。 5.专家库模块 专家故障库模块。可以编辑与展示录入实验过程中发现的问题,作为平台的知识积累;具有实验流程说明,可指导进行实验设置与执行演练计划。沉淀各种典型故障测试场景,用户在创建场景时可以直接导入故障场景,降低故障创建复杂度和提供产品使用效率。 (二)适配性要求 混沌测试平台运行环境应该运行在开放的软硬件平台之上,更加贴近国内客户生产环境需求,适配多种架构与类型分布式数据库,支持X86、C86、ARM硬件平台,支持Windows、统信、麒麟等软件平台。 (三)集成要求 混沌工程与被测系统、监控系统、上层应用、底层设施等模块的整体集成部署逻辑分为管控组件和执行组件,管控组件需要独立部署,支持集成部署在独立的物理环境和Kubernetes环境,执行组件需要部署在应用运行环境,并且与控制组件保持网络互通,测试人员只需要通过控制组件即可完成混沌实验。 三、混沌测试平台建设情况 (一)系统构成 混沌测试平台各个模块之间通过一定的调用关系来完成每次故障的演练模拟。其中,权限管理模块是一个比较独立的模块,主要管理整个平台的用户权限;场景管理模块是整个故障演练的入口,串联起发压监控、混沌实验一系列故障演练的步骤;对于有价值的故障场景则可以通过推送沉淀到专家库,并开放给所有用户共享使用;实验报告模块为已结束的实验提供了可视化的聚合报告;环境管理模块则是发压监控的前置工作,用户可以在此上传压测脚本、被测环境以及发压插件,保证后续发压步骤的顺利执行。 通过打造混沌测试平台,可以实现混沌实验与压测、