Page 46 - 《软件学报》2025年第7期
P. 46
陈元亮 等: 分布式系统动态测试技术研究综述 2967
与传统程序相比, 分布式系统具有更复杂的系统配置、更丰富的服务功能、更频繁的节点通信以及更复杂的
环境交互等特点. 这些特征不仅增加了系统开发、维护和管理的难度, 还大大提高了代码实现过程中引入缺陷的
可能性, 从而导致分布式系统面临更多的缺陷威胁. 因此, 在对其进行测试时, 我们需要关注更多的输入维度和缺
陷类型.
本文基于图 2 的分布式系统一般运行流程, 根据不同关键流程中可能出现的系统缺陷进行分类, 建立了 4 层
缺陷威胁输入模型: 系统配置处理缺陷、用户请求处理缺陷、节点间消息处理错误以及环境交互故障. 分布式系
统 4 层威胁模型及其常见缺陷如表 1 所示.
表 1 分布式系统威胁模型与常见缺陷
威胁输入层面 威胁详细描述 常见缺陷
配置语义不正确
配置更新失败
为了提高分布式系统的灵活性和可扩展性, 设计了各种系统配置. 随着分布式系统规模 配置兼容错误
和复杂性的增加, 系统配置变得愈加复杂, 相应的代码处理逻辑也更容易出错. 研究表
系统配置处理层面 配置权限错误
明, 分布式系统中大多数的错误和缺陷与业务逻辑代码无关, 而是由不恰当的系统配置
处理逻辑引起的 [28–30] 配置依赖错误
冗余配置项
...
请求处理错误
请求超时缺陷
分布式系统通常通过API对外提供服务, 用户通过这些接口向系统发送请求, 如数据查 并发请求错误
询、事务处理等. 然而, 复杂的业务逻辑在代码实现过程中不可避免地会引入缺陷. 这些
用户请求处理层面 负载均衡失效
缺陷可能被攻击者利用, 通过构造攻击性服务请求, 触发系统代码中的缺陷, 从而影响分
布式系统的可用性和安全性 服务降级失败
权限控制错误
...
消息返回错误
消息丢失
在分布式环境下, 节点通过消息协同, 使系统作为统一整体运作. 然而, 环境复杂性和消 通信IO错误
息传递的不确定性导致节点消息处理逻辑可能存在缺陷. 此外, 一些分布式系统支持拜
节点消息处理层面 共识不一致
占庭容错, 攻击者可伪装成普通节点发送恶意消息, 利用共识代码中的缺陷, 严重危害系
统的安全性与可用性 网络错误分区
并发消息死锁
...
节点重启错误
服务恢复缺陷
几乎所有的分布式系统都支持崩溃容错 (crash fault tolerance), 即使部分系统组件发生故 部分服务故障
障, 系统仍能恢复正常运行. 然而, 分布式环境中的各种系统交互可能出现网络延迟、丢
环境故障处理层面 冗余策略失效
包、磁盘崩溃、CPU错误等异常情况. 不正确的故障处理、恢复代码缺陷会严重影响系
统的可靠性和鲁棒性 备份数据丢失
多故障协调错误
...
1.2.1 系统配置层面缺陷
系统配置 (configuration) 用于定义分布式系统的拓扑结构, 如服务器、网络设备、软件版本和安全策略等 [31,32] ,
旨在提升系统的灵活性和可扩展性. 然而, 随着分布式系统规模和复杂性的增长, 尤其在云原生等动态伸缩性系统
中, 配置处理变得更加复杂, 增加了系统缺陷的可能性. 大量研究表明, 分布式系统中多数错误源于不当的配置处
理 [28–30] . 例如, Barroso 和 Holzle 报告指出, 配置错误处理导致约 28% 的服务级故障, 是谷歌主要数据中心故障的第
二大原因 [33] . Facebook 报告称, 约 16% 的服务下线事件与配置有关, 其中一次配置更新错误导致 5 亿用户无法访问
其网站数小时 [34] . 类似发现也适用于其他分布式系统, 如微软 Azure、亚马逊 EC2 和谷歌等 [35–39] . Hale 的报告显示,
这些分布式系统中大部分网络故障是由于错误的配置处理代码引起的 [40] .

