Page 306 - 《软件学报》2026年第5期
P. 306

唐瑞泽 等: 分布式系统模型检验技术研究进展                                                          2185


                 并依赖不可靠约减策略加速缺陷发现. SAMC 识别到崩溃事件可能产生两类影响: 1) 全局影响                           (predicate global
                 impact, pg), 即若节点  X  的崩溃会导致节点    N  向其他节点发送消息, 则      X  的崩溃对  N  产生全局影响; 2) 局部影响
                 (predicate local impact, pl), 即若节点  X  的崩溃不会导致节点  N  进一步发送消息, 则  X  的崩溃仅对   N  产生局部影
                 响. 基于此, SAMC 定义崩溃事件与消息的独立性: 若崩溃事件会产生全局影响                     (pg), 则需与所有消息重排序, 存在
                 依赖关系; 若仅产生局部影响         (pl), 则与其他消息独立, 无需重排序. CMI 特别适用于基于 quorum 机制的容错分布
                 式系统. 用户可通过 #follower >= majority 建模  pl, 反转条件则可用于建模      pg.
                    FlyMC [67] 将这些独立性策略进一步推广为更广义的事件独立性, 包括同一节点上更新不同变量的消息之间的
                 独立性, 以及与崩溃事件相关的独立性. 在分布式协议中, 多个协议或模块可能同时运行, 导致同一节点可能接收
                 并处理属于不同协议的消息. 例如, ZooKeeper 的         Zab  协议  [6,10] 同时包含原子广播协议和选主协议, 相关消息仅修
                 改各自协议中的变量, 因此彼此独立. 为支持此类优化, FlyMC 设计了一套机制, 允许开发者标注不相互影响的消
                 息, 并利用静态分析自动转换为系统语义信息模型.
                    具体而言, FlyMC 通过静态分析维护 readSet 和 updateSet, 用于判断消息是否独立. 若两条消息处理的 readSet
                 和 updateSet 变量无交集, 则它们独立. 一个特殊规则是, 若两条消息的 updateSet 变量完全相同, 且所有变量的变
                 更方式均为 +1 或−1, 则它们仍然独立. 这种模式在分布式协议中常见, 例如 ack++ 统计确认数. 对于崩溃事件,
                 FlyMC 将其对其他节点的影响抽象为 updateSet 变量的变更. 例如, 在集群中, 若一个跟随者节点崩溃, 领导者维护
                 的 liveNodes 变量减少 1 (liveNodes– –), 则该跟随者崩溃事件的 updateSet 包含领导者 liveNodes 变量.
                    在 SAMC 和 FlyMC 之前, 一些研究已开始利用系统语义信息进行状态约减                   [59,75] , 然而, 这些工作针对的是编
                 程语言实现的分布式协议, 而非 ZooKeeper 等工业级分布式系统. 例如, MP-Basset              [59] 主要针对基于消息通信的容
                 错分布式协议     (如 Paxos) 进行模型检验优化. 这类协议的典型特征是接收多条消息、修改状态并向网络发送消息,
                 而一次状态更新通常需要多个消息共同触发. 例如, 在 Paxos 共识协议中, 提案者需等待大多数                         (quorum) 接受者
                 的响应才能进行状态转移.
                    基于这一观察, MP-Basset 提出了      quorum transition  概念, 在单次状态转移中同时处理多个消息, 从而跳过中
                 间状态, 避免传统方法因逐条处理消息而导致的状态爆炸. 为支持此机制, MP-Basset 在消息传递模型中引入
                 quorum transition, 并设计了  MP  语言用于建模此类语义. MP   语言提供 @message 注解标记消息处理的状态转移函
                 数, 并使用 @guard 注解定义执行前需满足的条件          (如收到足够数量的消息). 此外, MP-Basset 采用      transition refinement
                 (转移精化) 技术调整状态转移粒度, quorum transition     是  transition refinement 的特例, 使偏序约减技术能够利用精
                 化后的独立事件, 从而优化状态空间. 实验表明, MP-Basset 最大减少了 92% 的内存开销和 85% 的时间消耗. 本质
                 上, 该方法利用的独立性是        SAMC  和  FlyMC  所描述的同一节点内消息独立性的特例.
                    MP-Basset 的后续研究进一步提出了        LPOR (local partial-order reduction) 框架  [75] , 基于静态偏序约减优化领域
                 相关等价状态空间. LPOR 允许开发者将系统语义编码为 Can-Enable 关系和 Dependency 关系, 以捕捉消息传递系
                 统中的事件依赖性. 实验表明, LPOR 在验证复杂协议时可实现高达 94% 的状态空间约减. 然而, 该方法主要聚焦
                 于理论研究, 在真实分布式系统环境中的模型检验应用仍然存在挑战.
                  4.2.2    对称性约减
                    对称性约减技术在传统的有状态搜索中被广泛应用                  [96,106] . 分布式系统具有大量对称性, 例如节点角色的对称
                 性. 然而, 在  SAMC [11] 之前, 较少有  DMCK  利用对称性约减. 这主要是因为        DMCK  早期研究更侧重于提高工具的
                 有效性, 而能够验证真实分布式系统的            DMCK  采用无状态设计. 传统对称性约减通常依赖于有状态搜索中的状态
                 标准化, 以消除重复状态, 而在无状态搜索中直接应用较为困难.
                    SAMC 定义了崩溃恢复对称性          (crash recovery symmetry, CRS) 和重启同步对称性  (reboot synchronization
                 symmetry, RSS), 两者原理相似, 这里以崩溃恢复对称性为例. DMCK            在原理上需要遍历所有可能的消息组合, 而
                 崩溃事件是由 DMCK 主动注入的, 因此可以减少不必要的注入. 例如, 在一个包含                     4 个节点的分布式系统中, n1–n3
                 均为跟随者    (follower), n4 为领导者  (leader). 如果 n1–n3 中任意一个节点崩溃, 系统的恢复行为相同, 则仅需注入
                 一次崩溃事件.
   301   302   303   304   305   306   307   308   309   310   311