MST

星途 面试题库

面试题:如何设计一个新的分布式事务协议来避免2PC的同步阻塞问题且兼顾数据一致性

请从底层原理、消息交互流程、异常处理机制等方面详细描述新协议的设计。同时对比新设计的协议与2PC、3PC等常见协议在性能、一致性、容错性等关键指标上的差异。
26.2万 热度难度
后端开发分布式系统

知识考点

AI 面试

面试题答案

一键面试

新协议设计

底层原理

  1. 基本概念:新协议旨在解决分布式系统中数据一致性和协调问题。它基于分布式系统的消息传递机制,通过节点之间交换特定格式的消息来达成状态同步和操作协调。
  2. 核心机制:采用类似于状态机复制的原理,每个节点维护一个状态机,通过接收和处理消息,将状态机推进到下一个状态。例如,节点接收到一条更新数据的消息,根据协议规则验证消息合法性后,更新本地状态机中的数据状态。

消息交互流程

  1. 请求发起:客户端向协调者节点发送操作请求,如数据更新请求。请求消息包含操作类型、数据内容等必要信息。
  2. 协调者广播:协调者接收到请求后,将请求广播到所有参与者节点。广播消息包含请求内容以及一个全局唯一的事务标识。
  3. 参与者响应:参与者节点接收到广播消息后,对请求进行本地预执行。如果预执行成功,向协调者发送预确认消息;若预执行失败,则发送预拒绝消息。
  4. 协调者决策:协调者收集所有参与者的响应消息。若所有参与者都发送预确认消息,则向所有参与者发送确认提交消息;否则,发送回滚消息。
  5. 最终执行:参与者接收到确认提交消息后,正式执行操作;接收到回滚消息,则撤销预执行的操作。

异常处理机制

  1. 网络异常
    • 消息丢失:若协调者未收到某个参与者的预确认或预拒绝消息,设置一个超时时间。超时后,重新向该参与者发送请求消息。
    • 网络分区:当发生网络分区,协调者和部分参与者失联。此时,协调者等待网络恢复。若在一定时间内网络恢复,继续按照正常流程处理;若超时未恢复,协调者判定事务失败,向已联系到的参与者发送回滚消息。
  2. 节点故障
    • 协调者故障:系统中设置备用协调者。当主协调者故障时,备用协调者接替工作,从故障前记录的日志中恢复事务状态,继续处理未完成的事务。
    • 参与者故障:若参与者在预执行后故障,恢复后根据协调者后续发送的消息(确认提交或回滚)完成相应操作。若参与者在预执行前故障,协调者在超时后重新向其发送请求。

与 2PC、3PC 对比

性能

  1. 新协议:性能介于 2PC 和 3PC 之间。相比 2PC,新协议增加了预执行阶段的一些额外处理,但减少了 3PC 中准备阶段到预提交阶段的额外消息交互,在网络状况良好时,整体性能优于 3PC。
  2. 2PC:性能相对较高,因为消息交互流程简单,只有准备和提交两个阶段。但在网络不稳定或节点故障时,可能因长时间等待导致性能下降。
  3. 3PC:性能相对较低,由于多了一个预提交阶段,消息交互次数增多,增加了网络开销和处理延迟。

一致性

  1. 新协议:通过预执行和确认提交机制,保证在正常情况下所有节点对事务的执行结果一致。在异常情况下,通过日志恢复和超时机制,尽力保证数据一致性,但在极端网络分区场景下,可能出现短暂的数据不一致,不过最终能达成一致。
  2. 2PC:在正常情况下能保证一致性,但在协调者故障且未完成日志记录时,可能导致参与者状态不一致,出现数据不一致问题。
  3. 3PC:相比 2PC,3PC 增加了预提交阶段,降低了协调者故障导致数据不一致的概率,一致性保障更强。但在网络分区等极端情况下,仍可能出现短暂不一致。

容错性

  1. 新协议:具备较好的容错性,能处理协调者和参与者的故障以及网络异常。通过备用协调者、日志恢复和超时重传机制,在一定程度上保障系统在故障情况下的可用性和数据一致性。
  2. 2PC:容错性较差,协调者单点故障可能导致事务无法继续进行,参与者可能因长时间等待协调者指令而处于阻塞状态,影响系统可用性。
  3. 3PC:容错性优于 2PC,由于引入了预提交阶段和超时机制,减少了参与者的阻塞时间,在协调者故障时,参与者能根据超时机制做出相应决策,提高了系统的容错能力。