一、分布式架构概述
(一)概念
1、分布式架构
在一个分布式系统中,一组独立的计算机展现给用户一个统一的整体。
2、分布式架构本质上的两大特点
- 内部有很多计算机组成
- 外部呈现给用户一个统一的系统,看不出是由多个计算机协同工作的
3、分布式架构的组件
- 分布式业务框架
- 分布式缓存和管理组件
- 分布式消息组件
- 分布式数据库
- 分布式文件系统
(二)互联网业务系统的治理组件
(三)优点、代价和缺点
1、优点
- 支持大量并发用户
- 容错和灾备能力
- 可灵活扩展
2、缺点
- 高维护成本
- 数据/事务处理上的一致性难题
- 逻辑耦合强,定位问题困难
3、代价
- 额外的复杂性
- 接口数量的爆炸增加
- 容易出现强耦合导致维护性差
- 信息安全的风险
二、分布式架构的质量特性
(一)功能性
1、功能完备性
- 与架构实现有一定关系
2、功能正确性
- 与架构无关,由具体业务逻辑实现决定
3、功能适合性
- 与架构无关,由功能的交互设计和场景决定
4、架构与功能完全分开考虑的缺陷
- 在不同系统负载和容量情况下,系统所能提供的功能
- 非法、意外事件
- 部署、运维和监控功能
(二)数据一致性相关
1、影响
- 数据一致的牺牲导致业务功能相关的缺陷
- 错误实现的数据一致性逻辑造成功能性和可靠性的缺陷
- 数据一致与高可用性的平衡设计不足,影响可靠性
- 对数据一致性的要求影响系统性能和容量
2、应对策略
- 尽早开始测试和参与软件设计的评审
- 通过场景法设计容错和并发场景
- 进行专门的数据测试来覆盖数据一致性问题
(三)事件处理相关
1、影响
- 嵌套式事物能较好地保证系统的可靠性但容易导致性能问题
- 分布式事务在提供较好的性能和扩展性时导致稳定性差
2、应对策略
- 对由嵌套事务模式实现的业务逻辑针对性地设计性能测试和压力测试
- 对由分布式事务模式实现的业务逻辑进行容错性测试
(四)并发、互斥相关
1、影响
- 出现在业务直接相关区域的错误读写影响业务功能的功能性
- 出现在服务软件逻辑区域的错误读写影响服务的可靠性
- 为确保不出现错误的数据读写,过度扩大临界区范围设计导致并发性能下降
2、应对策略
- 分层的测试策略
- 尽早地开展测试活动,参与设计的评审
- 结合软件设计实现并发与互斥的逻辑,通过场景法、边界值、状态迁移法,针对弱点进行覆盖
- 单元测试中,对具体算法/业务/代码逻辑等进行逻辑覆盖和功能覆盖
(五)远程调用和通信相关
1、影响
- 涉及转换和通信过程,导致通信开销和通信延迟
- 跨地区/因特网时,导致信息安全风险
- 远程计算机出现错误时,本地模块奔溃
2、应对策略
- 强调集成测试
- 在各个集成层面上进行性能测试
- 容错的场景涉及覆盖和灾备演练可以在各个集成粒度上进行
- 对于跨因特网或区域的远程调用和通信,组织专门的信息安全测试
(六)运维相关
- 易用性
- 信息安全
- 维护性和可移植性
- 兼容性(共存性)
(七)常见质量相关
1、容量
分布式系统在既定的资源情况下去考虑容量是否达到了既定的要求,以及在增加计算资源的情况下去考虑系统容量的增长是否会符合预期。
2、容错
单个服务失效时,对整个功能整个系统的影响。
3、响应速度
纳入到分布式各个场景的考核目标下进行测试。
4、弹性
当用户的需求、用户的规模发生变化时,系统是否能自动的快速、及时的调整运算资源。
三、分布式架构的测试策略
(一)总体思想
- 分而治之,然后再进行综合
(二)单元测试
- 分布式的软件系统:模块/子系统
- 功能测试、代码覆盖、再结合场景测试
(三)接口测试
- 系统内的模块接口
- 应覆盖功能、性能、稳定性、信息安全
(四)集成测试
- 子系统要完成的功能
- 等价类、边界值、场景法、状态迁移
- 性能、并发、容错
- 多个子系统集成
(五)系统测试
- 系统对外的接口
- 基于规格说明的测试技术