乐于分享
好东西不私藏

分布式架构软件测试

分布式架构软件测试

一、概述

分布式架构基础定义

1. 分布式架构是分布式计算技术的应用范式,各个部分独立运行,通过接口完成数据交换。

2. 分布式架构系统是若干独立计算机的集合,这些计算机对于使用者来说就像是单个计算机系统。

3. 特征:系统的组成部分在不同的独立硬件(微处理器)上运行(而非在同一硬件上运行)。即每个部分都在独立的计算机上运行。但是对于用户来说是一个完整的系统,如汽车电子系统。

4. 分布式架构系统两大本质特点

◦ 系统内部由多个独立的计算机组成

◦ 系统外部呈现为单个的系统

5. 演进动力:复杂度高、用户数量增长是促进分布式架构演进的主要动力。

分布式架构通用基础组件

面向不同业务领域的分布式架构组件存在差异,大多数场景至少包含以下组件:

1. 分布式业务框架:为业务开发实现业务逻辑提供框架,例:互联网业务Spring Boot。

2. 分布式缓存和管理组件:为大并发和数据存取提供可高速访问的数据,保障业务数据一致性。

3. 分布式消息组件:为不同物理机上的模块/子系统提供互相通信、调用的方法,依靠远程调用实现。

4. 分布式数据库:提供大规模大数据读写、管理、查询能力。

5. 分布式文件系统:跨越物理计算机边界,将多台机器文件统一映射为完整一致文件系统。

分布式系统治理组件(互联网常用)

复杂分布式系统除基础架构外,需要治理模块管理协调各子模块:

1. 服务的管理和监控:感知服务、物理机、网络运行状态,按需自动申请/分配/释放物理资源。

2. 服务的注册和发现:模块启动后在注册中心登记,客户端通过注册中心访问接口。

3. 负载均衡:多实例服务调用分发至不同节点,均衡负载,提升系统吞吐量。

4. 服务容错:依靠断路器(熔断器)机制,调用异常服务时快速返回结果,避免长时间同步等待。

5. 服务网关(API网关):服务统一调用入口,可实现鉴权、计费、动态路由、灰度发布。

6. 分布式配置中心:统一存储、管理全系统各服务配置信息。

7. 容器:提供统一易管理运行环境,简化服务部署、实例化流程。

8. 系统安全控制(信息安全):高安全业务场景下,全局管控系统信息安全。

分布式架构优缺点与代价

(1)优点

(2)代价

(3)缺点

二、质量特性

核心质量特性划分

1. 直接关联业务价值:可靠性、性能效率、信息安全;

2. 关联企业运营成本与效率:兼容性、维护性。

分布式特有技术挑战

1. 数据一致性保障

2. 事务处理设计

3. 并发和互斥问题

4. 远程调用带来的性能下降、容错问题

功能性质量特性细分

分布式由多子系统协同完成整体功能,功能特性分为三类:

1. 功能完备性:覆盖单系统功能、模块联合功能、全系统整体功能,测试需覆盖多层级集成场景;

2. 功能正确性:存在服务水平降级特性,超负荷运行时系统降低服务能力,需验证各类负载下功能正常;

3. 功能适合性:与架构无关,由交互设计、业务使用场景决定。

CAP定理与数据一致性

1. CAP定义:分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)三者无法同时满足

◦ 一致性:全系统数据副本同一时刻数值完全相同;

◦ 可用性:部分节点故障时,系统整体可持续正常提供业务;

◦ 分区容错性:节点地理隔离、局部节点异常时,系统仍可正常提供服务、返回一致数据。

2. 数据一致性缺失带来的质量缺陷

◦ 牺牲一致性 → 业务功能缺陷;

◦ 一致性逻辑实现错误 → 功能性、可靠性缺陷;

◦ 一致性、可用性平衡设计失衡,过度追求一致性 → 降低系统容错/可靠性;

◦ 高一致性要求 → 损耗系统性能、容量。

3. 测试应对策略

◦ 尽早开展测试,参与软件设计评审;

◦ 场景法设计容错、并发数据场景;

◦ 设计专项数据测试,全覆盖一致性相关问题。

分布式事务处理

(1)两种事务实现方式

1. 嵌套式事务:多节点模块串行执行,全部步骤完成事务才算结束;

2. 分布式事务:大事务拆分为多个小事务并行执行,全部完成后汇总结果。

(2)两种事务模式对质量特性的影响

1. 嵌套式事务:可靠性保障好,但易产生性能瓶颈;

2. 分布式事务:性能、扩展性优秀,但稳定性副作用突出。

(3)测试应对方案

1. 嵌套式事务:针对性性能测试、压力测试;

2. 分布式事务:开展容错性专项测试。

高并发、互斥相关问题

(1)并发带来的质量影响根源

临界区读写不当,破坏业务数据正确性,衍生两类问题:

1. 业务区域读写错误 → 破坏功能特性;

2. 逻辑区域读写错误(循环变量、内存堆栈)→ 降低服务可靠性;

3. 过度扩大临界区规避读写错误 → 并发性能大幅下降。

(2)测试应对策略

1. 分层测试策略

◦ 单元测试:高并发模块专项测试;

◦ 集成测试:设计并发用例覆盖进程、模块并发场景;

◦ 系统测试:模拟高并发,从并发量、持续时间维度设计用例。

2. 测试左移:尽早测试、参与设计评审;

3. 测试方法:场景法、边界值、状态迁移法,针对设计弱点覆盖;

4. 单元测试:完成业务、算法逻辑的代码逻辑覆盖、功能覆盖。

远程调用与通信问题

(1)远程调用带来的负面质量影响

1. 跨机器进程调用产生额外开销、通信延迟,模块切分不合理会加剧性能损耗;

2. 跨公网远程调用,互联网无原生安全保障,产生信息安全风险;

3. 远程节点故障时,本地模块不能崩溃,对系统容错性提出硬性要求。

(2)测试应对策略

1. 强化集成测试:以业务流程为主线整合模块,使用边界值、等价类、决策表、状态迁移法覆盖完整业务;

2. 全集成层级开展性能测试;

3. 容错场景全覆盖:设计单点、多点异常,验证服务、数据灾备恢复能力;

4. 公网远程调用场景:专项信息安全测试。

运维相关非功能特性

分布式系统运维、管控、备份、灾备恢复对应以下特性:

1. 易用性:面向运维人员,系统管理运维操作便捷;

2. 信息安全:运维人员操作、访问权限管控;

3. 维护性、可移植性:模块化、服务可复用设计;

4. 兼容性(共存性):服务节点可快速替换,不影响其他模块运行。

三、质量目标

不同分布式系统对容量、容错、响应速度、弹性要求对比

四、测试策略

分布式系统分层完整测试流程:

1. 单元测试

分布式模块普遍有灵活部署、并发、性能需求,除传统功能测试、代码覆盖外,需设计部署、扩展、迁移场景用例,配合部署工具完成测试。

2. 接口测试

覆盖系统模块间接口,验证功能、性能、稳定性、信息安全四大质量特性。

3. 子系统集成测试

围绕子系统业务功能,采用等价类、边界值、场景法、状态迁移法设计正向、异常用例,充分覆盖性能、并发、容错场景。

4. 系统集成测试

多复杂子系统二次集成,偏向黑盒测试,参考系统业务流程开展用例设计。

5. 对外接口系统测试

以黑盒/规格说明测试为主,通过外部接口调用验证全系统能力。

6. 端到端应用测试

面向客户端、前端应用,基于规格说明黑盒设计用例,人工执行或自动化界面工具完成测试。