MST

星途 面试题库

面试题:分布式系统中3PC在脑裂恢复阶段的操作细节

假设分布式系统出现脑裂,3PC 进入恢复阶段。详细说明在这个阶段,各个参与节点(协调者和参与者)分别需要执行哪些具体步骤来恢复一致性,以及可能会遇到哪些挑战,如何解决?
16.3万 热度难度
后端开发分布式系统

知识考点

AI 面试

面试题答案

一键面试

协调者恢复步骤

  1. 收集状态信息:协调者向所有参与者发送询问消息,要求参与者报告当前事务状态(如PREPARED、COMMITTING、ABORTING等)。
  2. 分析状态:根据收集到的参与者状态进行分析。
    • 如果所有参与者都处于PREPARED状态,且协调者自身之前处于PREPARED状态,那么协调者决定执行COMMIT操作。
    • 如果有任何一个参与者处于ABORTING状态,或者协调者自身之前处于ABORTING状态,那么协调者决定执行ABORT操作。
  3. 发送决策消息:协调者向所有参与者发送COMMIT或ABORT消息,通知他们最终的事务决策。

参与者恢复步骤

  1. 接收询问:参与者接收协调者发送的询问消息,向协调者报告自身的事务状态。
  2. 接收决策:参与者接收协调者发送的COMMIT或ABORT决策消息。
  3. 执行决策
    • 如果收到COMMIT消息,参与者执行事务提交操作,并释放所有与该事务相关的资源。
    • 如果收到ABORT消息,参与者执行事务回滚操作,并释放所有与该事务相关的资源。

可能遇到的挑战及解决办法

  1. 部分节点失联:在收集状态或发送决策消息过程中,可能有部分参与者节点失联。
    • 解决办法:协调者可以设置重试机制,多次尝试向失联节点发送消息。若达到一定重试次数后仍未成功,协调者可以根据已收到的其他节点状态,按照少数服从多数原则(若适用)或者预先设定的规则进行决策,并记录失联节点信息,后续系统恢复时再处理。
  2. 消息不一致:可能由于网络延迟等原因,导致部分参与者收到的决策消息不同步或不一致。
    • 解决办法:引入版本号机制,协调者在每次发送决策消息时增加版本号,参与者接收到消息后,若版本号不一致则丢弃旧版本消息,等待新版本消息。同时,协调者和参与者都记录消息日志,以便在出现问题时进行回溯和校验。
  3. 协调者故障:若协调者在恢复阶段出现故障,可能导致决策无法正常传达。
    • 解决办法:可以采用选举机制,当参与者在一定时间内未收到协调者的决策消息,并且检测到协调者故障后,重新选举新的协调者(例如基于Raft算法等选举机制)。新协调者重新执行收集状态、分析状态和发送决策消息的步骤。