微服务稳定性测试非混沌工程莫属

微服务稳定性测试虽然没有明确的断言,但也有一定的高可用预期。并不是所有的微服务架构进行稳定性测试都离不开混沌工程,那么为什么需要混沌工程呢什么是混沌工程呢?怎么样做好混沌工程?什么时候引入混沌工程呢

why:为什么需要混沌工程?

大家都知道分布式系统天生包含大量的交互和依赖点,可能出错的地方数不胜数,各种不可预期的突然事件是一定会发生的。任何一次处理不好就有可能导致业务停滞、性能低下或者无法预料的异常行为。在一个复杂的分布式系统,我们单靠人力并不能够完全阻止这些故障的发生,而应该致力于在这些异常行为被触发之前,尽可能更早更多地识别出会导致这些异常的、在系统中脆弱的、易出故障的环节。

混沌工程正是这样一套通过在系统基础设施上进行实验,主动找出系统中的脆弱环节的方法学。通过实验验证的方法不仅可以打造更具弹性的系统,还可以掌握系统运行时的各种行为规律。

一般测试要进行断言的:给定一个特定的条件,系统会输出一个特定的结果,测试只会产生二元的结果要么真要么假,通过真假来判断测试是否通过。严格意义上讲,有断言的测试并不能帮助我们发掘系统未知的或尚不明确的认知,只能对已知的属性可能的取值进行测验。而实验可以产生新的认知,通常能开辟出一个更广袤的认知空间。混沌工程是一种能帮助我们获得更多关于系统的新认知的实验方法。像科学家通过实验研究物理和社会现象一样,混沌工程通过实验探究的方式让我们理解系统运行时的各种行为规律

混沌工程存在的意义在于,这也是为什么需要混沌工程的原因:通过一次次的实验进行不断地探索,能让复杂系统中根深蒂固的混乱和不稳定性浮出水面,让我们更加了解系统运行时的各种行为规律,让我们可以更全面地理解这些系统的固有现象,从而有根据地在分布式系统中实现更好的设计,不断提高系统的弹性。这不是平常的测试方法所能搞定的,只有混沌工程,这个科学的方法。

此外,混沌工程适用于传统行业,比如大型金融机构、制造业和医疗机构。对于金融交易所依赖的复杂系统,有大型银行正在使用混沌工程来验证交易系统是否有足够的冗余。对于生死攸关的医疗系统,在美国,混沌工程被当作模型应用在临床实验系统,从而形成美国医疗验证的黄金标准。横跨金融、医疗、保险、火箭制作、农业机械、工具制作领域,无论数字巨头企业还是创业公司,混沌工程作为一门复杂系统改进学科,正在寻找它在各行各业中的立足点。

what:什么是混沌工程?

混沌工程是一门新兴的技术学科,初衷是通过实验性的方法,让人们建立复杂分布式系统能够在生产中抵御突发事件能力的信心。

混沌工程通过设计和执行一系列实验,帮助我们发现系统中潜在的、可以导致灾难的或让我们的用户受损的脆弱环节,推动我们主动解决这些环节的问题。

一些混沌工程实验的输入样例

强制系统节点间的时间不同步;

在驱动程序中执行模拟 I/O 错误的程序;

让一个 Elasticsearch 集群 CPU 超负荷。

很多程序的执行和逻辑依赖系统的时间,比如定时任务,程序获得系统时间后根据时间执行一些逻辑。

HOW:怎么做好混沌工程?

在一次次实验验证时,怎么样做好混沌工程呢?做好混沌工程,也就可以保证微服务稳定性测试的质量。做好混沌工程要遵守5项原则:

1) 建立稳定状态的假设;

2) 用多样的现实世界事件做验证;

3) 在生产环境中进行实验;

4) 自动化实验以持续运行;

5) 最小化爆炸半径。

做好混沌工程的关键的2个步骤:

a) 首先要找到描述稳定状态的业务指标并建立稳定状态的假设;

b) 然后采用注入多样的现实世界事件的方式验证微服务稳定性;

需要什么样的环境?

在有状态、第三方系统和外部输入的生产环境中进行验证;

验证微服务稳定性有什么策略?

从最小爆炸半径开始,采用递进方式,从小规模的扩散实验到中规模的集中实验,最后到风险最大的大规模实验。不断叠加注入事件,逐渐扩大实验的规模,打造配套的实时监控系统,稳扎稳打步步为营。

验证微服务稳定性需要不需要自动化?

自动化是最长的杠杆,只需要做一次,但能收获无数次随时随地执行自动化实验所带来的好处。混沌工程的每次实验的规范化,可能自动化一开始注入某个事件后对系统的影响检查点比较少,可以慢慢积累。

稳定性测试的2个阶段:

1) 手工时代

2) 自动化实验

3) 自动化实验的维护时期

when:什么时候引入混沌工程?

在判断你的团队是否具备实施混沌工程之前,需要回答一个问题:你的系统是否已具备一定的弹性来应对真实环境中异常事件,像某个服务异常、网络闪断或瞬间延迟提高这样的事件。

实施混沌工程的另外一个前提条件,配套监控系统,需要用它来判断系统当前的各项状态。

名词解释

弹性:系统应对故障、从故障中恢复的能力。

冗余: 系统有足够的冗余应对峰值及突发情况。

你可能感兴趣的:(微服务稳定性测试非混沌工程莫属)