CopyRight 2009-2020 © All Rights Reserved.版权所有: 中国海关未经授权禁止复制或建立镜像
混沌工程与可靠性测试技术研究
作者:杨硕
杨硕
摘 要 本文以混沌工程技术为核心,通过注入可定义、可控的软硬件异常,探索复杂系统中的脆弱环节,重点验证可靠性中的容错性与易恢复性。结合国家标准,提出针对容错性(通过避免宕机率、抵御误操作率等指标)和易恢复性(通过平均恢复时间、修复有效性等指标)的测试方法,并基于混沌工程平台开展实践。研究通过两类实验验证系统可靠性:网络丢包异常注入导致系统性能显著下降且未能自动恢复,暴露容错性与易恢复性缺陷;服务不可用异常注入后系统快速恢复,表明部分环节具备预期可靠性。实验遵循混沌工程最小化爆炸半径、稳态假说等五大原则,强调在生产或模拟生产环境中通过自动化手段发现薄弱环节。研究证明,混沌工程能够有效识别微服务架构中的潜在风险,为提升系统可靠性提供实践依据,同时为同类复杂系统的测试方法优化提供参考。
关键词 混沌工程;可靠性测试;容错性;易恢复性
Research on Chaos Engineering and Reliability Testing Technology
YANG Shuo 1
Abstract This paper focuses on chaos engineering, exploring vulnerabilities in complex systems by injecting definable and controllable software/hardware anomalies, with an emphasis on validating fault tolerance and recoverability. Aligned with national standards, specific testing methods are proposed for fault tolerance (measured by indicators such as downtime avoidance rate and error resistance rate) and recoverability (evaluated by indicators such as average recovery time and repair effectiveness). Practical experiments are conducted using the JD Cloud Tai Chaos Engineering Platform. The study validates system reliability through two types of experiments: network packet loss anomalies caused significant performance degradation and failed automatic recovery, exposing deficiencies in fault tolerance and recoverability; service unavailability anomalies demonstrated rapid system recovery, indicating partial reliability compliance. The experiments follow five major principles such as minimizing the explosion radius in chaos engineering and the steady-state hypothesis, emphasizing automated detection of vulnerabilities in production or simulated environments. The research proves that chaos engineering can effectively identify potential risks in microservices architectures and provide practical insights for enhancing system reliability. It also offers a reference for optimizing testing methodologies in similar complex systems.
Keywords chaos engineering; reliability testing; fault tolerance; recoverability
近年来,微服务架构凭借其松耦合、高扩展性和敏捷开发等优势,在海关信息系统建设中得到广泛应用。然而,随着服务规模与依赖关系的指数级增长,系统的复杂性也显著提升。在此背景下,如何确保分布式系统在异常场景下的可靠性(尤其是容错性与易恢复性),成为亟待提高和优化的核心问题。
混沌工程(Chaos Engineering)作为一种新兴的故障主动探测方法,为上述挑战提供了创新性解决方案。其核心理念在于通过可控的异常注入,模拟真实故障场景,系统化验证复杂系统的鲁棒性。相较于传统测试,混沌工程强调主动制造可控的故障,遵循最小化爆炸半径、稳态假说、自动化实验等五大原则,以科学实验的方式识别系统薄弱环节,推动可靠性优化。近年来,该技术已在金融、电子商务等领域成功实践,但其在海关信息化系统中的适用性仍需深入探索。
本文以海关大平台微服务系统为研究对象,结合国家标准GB/T 25000.10—2016《系统与软件工程 系统与软件质量要求和评价(SQuaRE)第10部分:系统与软件质量模型》[1]、GB/T 25000.23—2019《系统与软件工程 系统与软件质量要求和评价(SQuaRE)第23部分:系统与软件产品质量测量》[2]中对系统可靠性的定义与度量要求,提出基于混沌工程的容错性与易恢复性测试框架。通过某混沌工程平台,设计并实施网络丢包、服务不可用两类典型异常实验,量化分析系统在故障注入下的响应能力与恢复效率。研究旨在解决以下问题:(1)如何精准定位微服务架构中的脆弱节点;(2)如何通过实验数据验证容错性与易恢复性指标;(3)如何将混沌工程原则融入现有测试流程,降低系统上线风险。
1 混沌工程的意义
随着海关大平台微服务总体技术架构的推进和应用项目规模的扩大,在单一节点或实例上出现的异常产生的影响往往不会局限于该节点或实例,而是会对整个系统造成不可预知的影响。因此,测试人员需要尽可能及时地识别风险,针对性地进行加固和防范,以避免异常出现时带来的不可预知的严重后果。为此,本文引入了混沌工程技术,该项技术通过注入可定义可控制的异常,主动找出复杂系统中的脆弱环节,从而提高复杂系统可靠性,提早在测试环境中发现系统可靠性方面的问题和缺陷,降低修复成本和上线风险。
2 系统可靠性的定义和测试方法
根据GB/T 25000.10—2016的定义[1],可靠性是指系统、产品或组件在指定条件下、指定时间内执行指定功能的程度。可靠性的子特性包含成熟性、可用性、容错性、易恢复性和可靠性的依从性。
容错性的度量指标包括正常运行度、抵御误操作率,易恢复性的度量指标包括重启成功度和修复成功度,不难发现,对于混沌工程而言侧重于可靠性中的容错性和易恢复性。
目前,业界对于可靠性测试研究和实践还处于探索阶段,对于测试技术的要求较高,原因在于可靠性测试所需的部分数据难以采集,部分测试条件难以实现。例如,容错性测试中的宕机率、易恢复性测试中需要实现可控的故障和失效,都对可靠性测试方法提出了挑战。
而通过引入混沌工程技术则能够解决上述问题。在对GBT 25000.10—2016[1]和GB/T 25000.23—2019[2]进行深入探讨和研究后,结合测试理论和混沌工程技术,本文针对可靠性测试中的容错性测试和易恢复性测试提出了具体测试方法,并根据测试方法在实际项目中进行了实践。
2.1 容错性及其主要测试方法
根据GB/T 25000.10—2016[1]的定义,容错性是指在存在硬件或软件故障的情况下,系统、产品或组件的运行符合预期的程度,可用正常运行度、抵御误操作率等指标进行度量。测试内容包括软件产品在由于非法数据、非法操作、误操作等原因导致无法正确运行和参数传递出现错误的情况下,能否为用户提供相应服务器的能力。
容错性可通过避免宕机率、避免失效和抵御错误的操作率进行测试。前者的测试内容为在测试过程中,软件出现异常或故障时不应引起整个运行环境死机;后者的测试内容为软件即使在所使用的容量高达规格的极限、企图使用超出规定极限的容量、用户造成的不正确的输入等情况下,也能避免关键性或严重的失效。
2.2 易恢复性及其主要测试方法
根据GB/T 25000.10—2016[1]的定义,易恢复性是指发生中断或失效时,产品或系统能够恢复直接受影响的数据并重建期望的系统状态的程度,可用重启成功度、修复成功度等进行度量。测试内容包括产品需明确在软件发生失效的情况下,采取何种措施重建,为用户提供相应服务和恢复直接受影响数据的能力。
易恢复性可通过平均恢复时间、修复有效性进行测试。前者的测试内容为计算每次从失效起到完全恢复所花费时间的平均值;后者的测试内容为验证系统从失效中恢复后功能未受到影响,依然能维持规定的性能级别。
3 混沌工程技术研究
当前新一代架构转型由传统的面向服务的架构(Service-Oriented Architecture,SOA)向分布式架构、去中心化发展,当前还进阶到注重云化支持和异构化微服务支持的服务网格模式。一方面,由于技术异构性、具备弹性伸缩、可扩展性等优势,微服务架构得到迅速推广;另一方面,微服务架构在使用过程中又会面临诸多挑战,如由于系统级依赖增多而带来的不确定性风险指数级增长。
在微服务架构转型的驱动下,混沌工程实践方案可以通过规范化、流程化的方案对系统进行一定程度的“随机破坏”,让故障在可控范围内频繁发生,在此过程中可以深入地认知故障和系统,并达到持续改进的效果。
微服务与SOA架构的区别是微服务更强调“业务需要彻底的组件化和服务化”,其特性如客户端负载均衡、微服务容错保护、API服务网关、分布式链路跟踪等均为此服务。而传统的非功能测试方法只能覆盖到业务逻辑维度,无法覆盖和测试到上述微服务特性[3]。
混沌工程与传统测试的不同点在于传统测试用例会有“期望结果”和“实际结果”,通过将两个结果加以比较,或者对用户行为的预期,来判断测试通过或失败;而混沌实验类似于“探索性测试”,实验本身没有明确的输入,是通过对系统和服务的不同组合干预,来观察系统的“反应”。具体操作时,可以将混沌工程原则融入到测试过程中:在测试环境/准生产环境小规模模拟系统故障组合并定期自动化执行实验,通过实验结果与正常结果进行比对,观察系统对故障的承受和反应能力[4-6]。
应用系统通常运行在其最大概率的运行状态,因此常规软件测试也应处于应用系统最大概率运行状态下执行。而混沌工程通过故障注入,会导致系统进入从未经历过的状态,在这种状态下,系统是否稳定是未知的。实施混沌工程需要遵循五大原则,设计好每一个实验,以避免不可控制的风险[7-8]。
混沌工程的五大原则包括:(1)最小化爆炸半径。在生产环境中进行实验可能会引发真实的故障发生,所以在执行试验时需要确保影响范围最小化且可控。(2)稳态假说。关注可测量输出,而不是系统内部属性,建立一个围绕稳定状态行为的假说;短时间内的度量结果,代表了系统的稳定状态;验证系统是否工作,而不是如何工作。(3)真实事件。通过潜在影响或预估频率确定事件的优先级;任何能够破坏稳态的真实事件都是混沌实验的一个潜在变量。(4)生产环境。系统的行为会根据环境和流量模式而变化,为了保证系统行为的真实性与当前部署系统的相关性,混沌工程强烈推荐在生产环境中进行实验。(5)自动运行实验。手工运行实验是不可持续的工作,所以需要把实验变为自动化且持续的执行[8]。
此外,系统发生不可接受影响的原因多种多样,威胁发生后会经历从薄弱环节、异常表现的循环,直至系统产生不可接受的影响。首先,威胁一般是不可消除的,而且存在一定的发生概率,在拉长时间线后可以认为故障一定会发生,比如硬盘一定会损坏,软件缺陷一定无法完全消除。但是,测试人员可以通过强化系统中存在的一系列薄弱环节,消除系统中的异常表现,或降低其出现的概率,如磁盘做磁盘阵列(Redundant Arrays of Independent Disks,RAID),通过过程改进降低软件的缺陷逃逸率,使用网络双链路等,最终消除不可接受的影响或降低出现概率。因此,发现和识别薄弱环节对提高系统稳定性和可靠性具有重要的意义。
混沌工程理念就是尽可能从注入各种异常表现入手,从而发现系统中存在的可能导致不可接受影响的缺陷或薄弱环节,从而提高系统的稳定性和可靠性,避免在威胁真正发生时,会穿透一系列的薄弱环节,最终造成不可接受的影响。因此,测试人员不能简单地通过重启、升级、扩容等方式解决表面现象,而应直面系统中的薄弱环节,深究问题发生的根本原因和系统中的薄弱环节[4,6,8]。为此,测试人员使用专业的混沌工程平台作为本次研究混沌工程的工具,在项目中进行了实践。
4 混沌工程的项目实践
在项目实践中测试人员选择某核心系统的2个环节,分别注入2种不同的异常,进而验证这2个环节的可靠性。
4.1 网络丢包异常
首先找到集群中2个实例的位置,作为注入异常的目标。在混沌工程平台中将某核心系统中某功能模块集群中2个实例中的1个丢包率设置为100%,此时该实例的网络应为不可用状态,因为所有网络传输数据包全部丢失。之后,设定爆炸范围,避免实验导致的异常无法恢复后,混沌实验的场景设置即告完成。
正如前文所述,混沌实验不能单独存在,应在生产环境进行,如果无法在生产环境中执行,也应在测试环境中模拟生产环境。因此,必须在测试环境中模拟生产环境的日常负载,验证异常出现后对系统造成的影响。为此,测试人员使用性能测试工具模拟了100个用户访问该功能模块的操作,并在设置好混沌工程实验后启动了性能测试场景,从而得以监控系统产生的负载和流量。此时系统中产生的事务数和每秒点击数随着并发用户的增加逐步增长,随后达成了稳态,不再有大的波动。
启动混沌工程实验,验证网络异常会对该功能模块造成的影响,以及该功能模块如果产生失效,是否能够从失效中自动恢复。通过测试网络数据包的命令即可证实,与实例之间的网络丢包异常已经生效,测试网络数据包命令无法返回实时延迟。此时,在性能测试场景中,每秒事务数与每秒点击率均出现大幅下降,并报出了大量错误和失败事务,在混沌工程启动后10秒即出现了362个失败事务和1054个错误。
通过网页进入某核心系统实际功能操作界面进行操作,界面无响应,打开开发者工具可以看到后台报出了Http 504错误,即网关超时错误。此时在集群中的2个实例中只有1个实例存在网络丢包异常,如果系统的容错性满足需求,K8s注册中心应及时发现1个实例出现异常,处于不可达的状态,将系统所有流量转向正常的实例,或根据设置启动1个新的实例以保证系统功能和性能不出现问题。但根据实际测试结果,被测的功能环节并未实现以上异常处理,而是导致性能场景出现大量错误事务,实际功能操作无法进行,后台报出网关超时错误,可靠性中的容错性出现明显问题。
在混沌工程实验启动一段时间后,测试人员再次检查了性能测试场景与功能操作环节,其中功能操作共进行了5次操作,仅有1次成功,3次报出Http 504网关超时错误,1次报出Http 502无效网关错误。而在性能测试场景中,自从启动混沌工程实验,系统的每秒事务数和每秒点击率大幅下降,且一直未能恢复,同时报出的错误和失败事务不断增加,从刚启动混沌工程实验时错误1054个增长至5348个,失败事务由362个增长至2345个。
综合实际功能操作与性能测试场景不难得出结论,系统未能从异常中自动恢复,可靠性中的易恢复性出现明显问题。因此,该核心系统某查询环节的可靠性测试不能通过。
4.2 服务不可用异常
首先依然按照上文混沌工程的标准选择资源,设置服务不可用的异常,并在性能测试工具中设置性能测试场景,模拟生产环境日常负载。然后,启动混沌工程实验,向系统注入服务不可用的异常。在对性能测试场景进行验证时发现在注入异常后每秒事务数和每秒点击率均出现大幅下降,同时出现了错误与失败事务,分别出现了100个失败事务和200个错误,系统明显受到了注入的服务不可用异常影响。
但在混沌工程实验启动30 s后,系统迅速从异常中恢复,每秒事务数与每秒点击率均增加至注入异常前的水平,错误数与失败事务数也不再增加。
此时在功能界面进行操作系统能够正常响应,系统功能未受影响。因此,该核心系统某查询环节可靠性中的容错性和易恢复性均未出现问题,可靠性测试能够通过。
5 结语
本文深入探讨了混沌工程与可靠性测试技术,旨在提升海关大平台微服务架构的系统可靠性。研究表明,随着系统规模扩大,单一节点异常可能对整体系统造成不可预知的影响,传统测试方法难以满足可靠性评估需求,混沌工程应运而生。
混沌工程通过主动注入异常,模拟复杂环境中的故障场景,提前发现系统脆弱环节,验证容错性和易恢复性。与传统测试不同,混沌工程类似“探索性测试”,无明确输入和预期结果,通过系统和服务的不同组合干预观察系统反应。
在项目实践中,测试人员选择了某核心系统的2个环节,分别注入网络丢包异常和服务不可用异常,通过在某混沌工程平台进行的混沌实验,以性能测试工具模拟生产环境负载,观察系统在异常下的表现。网络丢包异常实验中,系统出现大量错误和失败事务,功能操作界面无响应,暴露了容错性和易恢复性不足。服务不可用异常实验中,系统在异常注入后迅速恢复,功能界面操作正常,验证了系统的可靠性。
综上所述,混沌工程通过主动注入异常,能有效发现系统中的薄弱环节,提高系统的稳定性和可靠性。在项目实践中,网络丢包异常实验暴露了系统某查询环节在容错性和易恢复性方面的不足,而服务不可用异常实验则验证了系统另一查询环节的可靠性。这表明混沌工程在复杂系统可靠性评估和提升方面具有显著效果,值得进一步研究和应用。同时,也强调了在面对系统异常时,应积极发现和识别系统中的薄弱环节,避免简单通过重启、升级等方式解决表面问题,与混沌工程实践的理念相契合。
参考文献
[1] GB/T 25000.10—2016 系统与软件工程 系统与软件质量要求和评价 (SQuaRE) 第10部分:系统与软件质量模型[S]. 北京: 中国标准出版社, 2016.
[2] GB/T 25000.23—2019 系统与软件工程 系统与软件质量要求和评价(SQuaRE) 第23部分:系统与软件产品质量测量[S]. 北京: 中国标准出版社, 2019.
[3]王宪刚, 孙晓璇. 分布式核心系统混沌测试探索与实践[J]. 金融电子化, 2022(2): 75-76.
[4]王蒙, 黄永厚. 基于混沌工程的数据库故障演练平台研究与实践[J]. 网络安全和信息化, 2024(10): 58-60.
[5]铁锦程. 基于混沌工程理念的数据中心稳定性体系探索与实践[J]. 网络安全技术与应用, 2023(10): 18-21.
[6]田雷, 封亮, 李海峰. 基于失效模式的软件可靠性评估模型[J]. 软件工程, 2023, 26(7): 54-57.
[7]王敏. 故障注入在智能网络管控系统测试中的应用研究[J]. 电脑知识与技术, 2023, 19(2): 75-77.
[8]凯西·罗森塔尔, 诺拉·琼斯. 混沌工程:复杂系统韧性实现之道[M]. 北京: 机械工业出版社, 2021: 125-143.
第一作者:杨硕(1980—),男,汉族,北京,本科,工程师,主要从事海关信息系统开发测试工作,E-mail: yangshuo@customs.gov.cn
1. 全国海关信息中心(全国海关电子通关中心) 北京 100005
1. National Information Center of GACC (General Administration of Customs of China), Beijing 100005