一、概述
分布式架构基础定义
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. 端到端应用测试
面向客户端、前端应用,基于规格说明黑盒设计用例,人工执行或自动化界面工具完成测试。
夜雨聆风