MST

星途 面试题库

面试题:分布式系统下3PC在网络延迟场景中如何保障事务可靠性

假设在一个分布式系统中存在明显的网络延迟,3PC协议如何通过自身机制来确保分布式事务的可靠性,避免因长时间延迟而产生事务状态不一致问题,分析在这种场景下可能遇到的挑战以及3PC相应的应对策略。
39.5万 热度难度
后端开发分布式系统

知识考点

AI 面试

面试题答案

一键面试

3PC确保可靠性及避免事务状态不一致的机制

  1. 引入预提交阶段:在传统2PC的准备阶段和提交阶段之间插入预提交阶段。在预提交阶段,协调者向参与者发送PreCommit请求,参与者如果可以提交事务,则回复ACK。这一步骤使得系统在进入最终提交阶段前,能确认大多数参与者的状态,减少因网络延迟导致部分参与者未收到准备请求,而在最终提交时出现不一致的情况。
  2. 超时机制优化:在每个阶段设置合理的超时时间。例如,协调者在发送PreCommit请求后,如果在一定时间内未收到所有参与者的ACK,则中断事务。参与者在等待协调者指令时,若超时未收到,也会根据自身状态进行相应处理(如回滚事务)。这避免了因长时间网络延迟,参与者一直等待导致事务悬而不决的状态。

网络延迟场景下可能遇到的挑战及3PC应对策略

  1. 协调者与参与者失联
    • 挑战:协调者发送的请求或指令可能因网络延迟长时间未到达参与者,或者参与者的响应无法及时返回给协调者,导致协调者无法准确判断参与者状态。
    • 应对策略:协调者和参与者都设置超时机制。协调者超时未收到响应则进行重试或者中断事务;参与者超时未收到协调者指令,按照一定规则处理(如在预提交阶段超时未收到PreCommit,则中断事务;在提交阶段超时未收到Commit,则根据预提交阶段的结果决定是否提交事务,若预提交成功则提交,否则回滚)。
  2. 参与者之间状态不一致
    • 挑战:由于网络延迟,不同参与者收到协调者指令的时间不同,可能导致部分参与者已经进入某个阶段,而其他参与者还处于之前阶段,从而产生状态不一致。
    • 应对策略:通过预提交阶段,使得大部分参与者在进入最终提交前达成共识。并且在提交阶段,参与者根据预提交的结果和协调者最终指令操作。即使部分参与者因网络延迟晚收到指令,只要预提交阶段达成一致,最终也能保证事务状态一致。例如,若预提交成功,即使提交指令延迟到达,参与者也会提交事务。
  3. 脑裂问题
    • 挑战:网络延迟严重时,可能出现网络分区,形成多个子网络,每个子网络内的协调者和参与者可能做出不同决策,导致全局事务状态不一致。
    • 应对策略:3PC通过引入预提交阶段,提高了系统的容错能力。在网络分区恢复后,各个子网络可以根据预提交阶段的记录进行状态同步和事务恢复。例如,通过日志记录预提交和提交状态,网络恢复后,各节点对比日志,以正确的事务状态为准进行后续操作(如回滚或继续提交),从而解决脑裂带来的事务不一致问题。