Page 62 - 《软件学报》2025年第7期
P. 62

陈元亮 等: 分布式系统动态测试技术研究综述                                                          2983


                 3.1.3.3    并行消息调度技术
                    此外, 针对分布式系统的消息并发处理问题, 除了保障通信消息的语法和语义正确性外, 还需要关注分布式环
                 境下的并发消息执行顺序问题. 由于分布式系统中消息交互顺序空间非常庞大, 不同种类的消息之间存在各种排
                 列组合, 如何对消息序列进行高效探索成为研究者面临的主要挑战之一.
                    因此许多工具针对分布式节点间、甚至更细粒度的进程间通信消息调度执行顺序问题, 提出了各自的输入空
                 间优化算法, 以高效触发系统中潜藏的并发不一致缺陷、行为状态异常等问题. 典型工具                            PCTCP [61] 利用随机调度
                 算法, 将消息交互建模为事件, 建立执行顺序事件集, 并在运行时动态选择和执行事件, 从而提高发现并发错误的
                 概率. 具体而言, PCTCP    在每个调度点随机选择下一步要执行的事件, 这种随机调度直接忽略了输入空间的庞大
                 问题, 有助于探索不同的事件交互顺序.
                    考虑到分布式系统中事件顺序关系挖掘能力有限, 大多数事件依赖关系不确定, 导致测试探索空间依然很大.
                 针对这一问题, 典型工具       DCatch [95] 专门用于自动检测云系统中的分布式并发错误. DCatch          通过跟踪系统运行时的
                 事件顺序和依赖关系, 构建事件依赖图, 然后在测试过程中识别和重现潜在的并发冲突. DCatch                           使用动态分析技
                 术, 通过分析程序执行路径, 识别可能导致数据竞争和死锁等并发错误的关键路径. 在运行时, DCatch                           插入探针,
                 实时监控和记录事件顺序, 并在测试过程中通过模拟和重现这些路径, 系统化地检测和定位并发错误. 另外, 工具
                 FlyMC [63] 通过识别系统状态对称性和事件独立性, 减少需要探索的状态和事件组合数量. FlyMC                      在测试过程中并
                 行处理多个独立事件, 进一步加快测试过程. 此外, FlyMC              通过并行翻转多个事件顺序, 系统化地探索复杂事件交
                 错, 从而提高检测效率. 这种方法通过减少冗余状态和事件组合, 有效缩小了输入空间, 提高了测试效率.
                    然而, 系统性探索整个输入空间的测试效率较低, 为此, 典型工具 Morpheus                 [65] 专注于复杂并发执行路径, 利用
                 部分顺序采样技术探索稀有但关键的并发冲突. 在测试过程中, Morpheus 实时分析系统运行状态, 动态调整事件
                 优先级, 并基于关键事件进行调度, 从而提高发现并发冲突的概率. 通过聚焦稀有事件, Morpheus 有效减少了不必
                 要的测试输入, 提升整体测试效率. 这类工具通过持续优化并发消息输入空间的探索技术, 逐步缓解分布式系统测
                 试中的输入空间庞大问题, 显著提高了并发错误检测的效率和准确性.

                 3.1.4    环境错误注入技术
                    错误注入技术通过模拟各种故障或异常, 评估分布式系统在不同异常条件下的表现和鲁棒性. 该方法通过引
                 入预定义故障, 如网络延迟、数据包丢失、节点故障、资源枯竭等, 测试系统在故障场景下的反应、恢复机制和
                 安全性. 错误注入通常在系统组件、网络通信或数据流中引入问题, 如修改消息内容、模拟节点故障或调整网络
                 参数, 从而揭示在特定故障场景下的安全缺陷, 如异常处理不当导致的内存问题. 由于分布式环境复杂且交互点众
                 多, 探索庞大的故障输入空间成为关键挑战. 根据探索方式, 错误注入技术分为                       3  类: 随机故障注入、人工定义故
                 障模型和反馈引导的故障序列生成技术.

                 3.1.4.1    随机故障注入技术
                    考虑到对分布式系统测试来说, 可注入的故障空间过于庞大. 因此一个简便而高效的策略是在系统的随机位
                 置, 于随机时刻注入预先设定好的故障.
                    Han  等人  [19] 早在  1995  年首次提出了集成的分布式系统故障注入环境          (DOCTOR) 方法, 该方法能够在测试环
                 境中随机注入处理器、内存和通信这             3  类故障, 并自动收集系统性能数据, 评估不同负载下的系统可靠性. 故障类
                 型可为永久、短暂或间歇性. 随着分布式环境故障种类的增加, 支持更多故障类型成为后续技术的发展目标. 由
                 Netflix  开发的故障注入工具    ChaosMonkey [59] 最初用于测试其在  AWS  云环境中的服务弹性, 通过随机终止虚拟机
                 或容器模拟故障, 帮助识别和修复潜在弱点. ChaosMonkey 现已成为 Netflix Simian Army 工具套件中的关键部分,
                 专注于模拟 AWS 分布式应用在节点下线时的服务稳定性. 相比之下, Alibaba 开发的 ChaosBlade                  [86] 提供了更广泛
                 的故障注入类型, 支持物理主机          (CPU、磁盘、网络等)、Kubernetes (Pod、节点、容器等) 和 Java 应用           (JVM、
                 Java 代理等) 的故障模拟. ChaosBlade 不仅支持资源层面的故障注入, 还能在应用层面进行精细化测试, 如模拟方
                 法延迟或变量篡改, 提供更丰富的测试场景和细粒度的故障模拟能力.

                 3.1.4.2    人工定义故障模型
                    尽管随机故障测试技术取得了不错的成就, 该方法在巨大的故障空间中的探索效率很低. 而我们可以利用目
   57   58   59   60   61   62   63   64   65   66   67