高可用测试(一)

本文详细介绍了高可用性测试的关键点,包括内部组件和外部依赖故障模拟、资源满载测试、时钟同步问题以及网络故障的影响。通过具体的案例设计展示了如何测试服务在各种故障情况下的表现,并强调了测试工具如ChaosBlade和JMeter的使用。复盘部分强调了避免故障重合、精确时间统计和及时问题处理的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

先说一下,什么是高可用?高可用是分布式系统架构设计中必须考虑的因素之一。它通常是指,通过设计减少系统不能提供服务的时间。如果系统能一直提供服务,我们就说该系统的可用性是100%。

高可用测试属于非功能测试,是在功能测试完成之后做的测试。本质来看,高可用测试是测架构。在测试前期,需要充分调研被测系统的架构设计,包括系统的内部组件包括哪些,以及外部的依赖有哪些等等。

做系统高可用需要围绕两个维度:

1. 大概率不出问题;

2. 出了问题之后缩减它的故障域范围;

因此,在高可用集群测试过程中需要关注两点:

  1. 模拟系统中某个部分或者节点发生故障时,不影响系统整体向外部提供服务;
  2. 故障恢复后,系统的处理情况(即故障恢复后,能否恢复到之前的状态)

案例设计

通常,可以从以下几点考虑案例的设计:

1. 内部组件故障(单节点故障 / 集群故障):内部组件故障指的是系统自身某个组件故障(宕机)。微服务架构的系统,通常包含多个组件,这些组件间相互联系。如系统A的内部组件包括组件A-console和组件A-server,A-console为A的控制台,A-server为A处理服务的组件,这些组件之间通过一定的网络通信协议进行通讯;

2. 外部依赖故障:大的复杂的系统通常需要依赖外部系统来扩展自己的功能。而这些外部系统的开发一般都不是自己。外部依赖故障指的是系统自身依赖的外部系统故障,如系统A依赖redis,那么就要考虑redis故障(宕机)对系统A的影响;

3. CPU满:高可用部署的集群中,节点的CPU满也是我们高可用可以考虑的范围。即单个节点或者所有节点CPU被打满后,系统的处理情况(性能测试中做负载测试的时候,我们通常会模拟CPU99时,系统的表现情况。高可用测试和性能测试中CPU满的情况,关注点稍有不同);

4. 磁盘满:即服务部署的节点的磁盘空间被打满后,对服务的影响;

5. 内存满:即服务部署的节点的内存被打满后,对服务的影响;

6. 时钟不同步:时钟不同步指的是服务部署的节点的系统时间被更改,导致服务间系统时间不一致。通常我们的程序中会有一些获取系统时间的代码段。当系统时间被更改后,需要考虑对我们的服务会有哪些影响。以本次高可用测试中某个系统的测试为例:

    该系统中涉及 数据库分布式锁实现分布式系统定时任务单个执行。简单理解就是服务A需要一个定时任务定时同步数据到服务B,而考虑到服务是多节点的方式进行部署,会出现并发执行的情况,所以利用MySQL来解决分布式锁的问题。

     MySQL表中存放 最新获取锁的节点IP、最新获取锁的时间等字段。当有节点获取锁时,需要先比对数据库表中的字段信息。通过校验则获取分布式锁成功,不通过校验则获取分布式锁失败。而在做高可用测试的过程中,正是因为修改系统时间导致获取分布式锁失败,且系统时间恢复后获取分布式锁仍然失败。具体原因不再赘述,总之,时钟不同步是我们需要考虑的一个重要方向。

 (注:一般可以通过ATP工具来实现集群主机间时间同步)

7. 网络故障等:即模拟各个微服务之间网络故障(比如丢包率50%时系统的表现情况、网络延迟2s时系统的表现情况);

测试工具

混沌工程chaosblade:使用该工具来模拟故障,这款工具可以模拟CPU满、磁盘满、内存满等故障;

jmeter:在高可用测试过程中,通常会测试故障发生到故障恢复后是否会对系统的TPS产生影响,因此我们会带着压力跑,也就是模拟业务请求对中间件发起调用,来检测整个过程中对业务的影响。

复盘

  1. 高可用测试过程中应避免其他系统的干扰,测试开始后必须保证只有1个故障在模拟,避免故障重合,即A系统依赖B系统,A系统在执行高可用案例时,B系统同时也在进行,这种情况下,如果产生错误,较难复盘;
  2. 时间的统计精确到秒级,便于衡量系统处理能力(部分场景需要统计服务故障恢复的时间长短);
  3. 排期中需要预留发现问题解决问题的时间。对于组件较多较为复杂的系统,一旦出现问题,复现的成本较高,需要留出充足的时间给相应的开发和测试人员;
  4. 发现问题后及时处理,避免再做过多的改动,减少盘查问题的成本;

测试用例(未完待续)

测试项目测试目的测试步骤预期结果实际结果
内部组件故障A-console宕机1台(A-console部署4台,负载均衡策略为轮询,宕机1台不影响对外提供服务)

1. 停止1台console节点服务,观察控制台访问情况;

2. 恢复该console节点服务,观察控制台访问情况

1. console控制台可正常访问;

2. conosle控制台可正常访问;

同左
A-console全部宕机

1. 停止所有console节点服务,观察控制台访问情况;

2. 恢复一台console节点服务,观察控制台访问情况;

3.恢复其余console节点服务,观察控制台访问情况;

1.控制台访问失败;

2.控制台恢复正常;

3.控制台恢复正常

同左
A-server宕机1台

1.停止1台server所在节点;

2.恢复该server节点服务       

1.对用户调用无影响(当时正在该节点处理的请求失败);

2.对用户调用无影响;

同左
A-server全部宕机

1.模拟所有server节点宕机;

2.恢复1台server节点服务;

3.恢复其余server节点服务 

1.用户调用失败

2.用户调用恢复正常

3.对用户调用无影响

同左
...
外部依赖故障依赖的mysql宕机模拟mysql等数据库宕机观察系统中的缓存机制是否有效,是否影响业务       同左
依赖的redis宕机同左
依赖的其他中间件宕机同左
节点所在机器的磁盘/CPU/内存被打满server所在的机器CPU被打满模拟CPU打满              观察是否会出现超时或者上层的负载均衡是否会剔除该节点同左
server所在的机器磁盘被打满模拟磁盘打满观察是否会影响日志输出/其他磁盘I/O相关的任务受影响同左
server所在的机器内存被打满模拟内存打满        观察应用程序处理情况同左
节点间网络故障(网络延时、丢包等)

下文:高可用测试(二)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值