面试题答案
一键面试核心机制差异
- 2PC(两阶段提交):
- 第一阶段 - 投票阶段:协调者向所有参与者发送事务内容,询问是否可以提交事务,参与者检查自身能否执行事务操作,并反馈“是”或“否”。
- 第二阶段 - 提交阶段:若所有参与者都返回“是”,协调者向所有参与者发送提交指令,参与者执行提交操作;若有任何一个参与者返回“否”,协调者向所有参与者发送回滚指令,参与者执行回滚操作。
- 3PC(三阶段提交):
- 第一阶段 - 询问阶段:协调者向参与者发送包含事务内容的询问,询问是否可以执行事务操作,参与者检查自身能否执行事务,并反馈“可以”或“不可以”。
- 第二阶段 - 预提交阶段:若所有参与者都反馈“可以”,协调者向所有参与者发送预提交指令,参与者执行事务操作但不提交,而是将 undo 和 redo 信息记录到日志中;若有参与者反馈“不可以”,协调者向所有参与者发送中断指令,参与者放弃事务。
- 第三阶段 - 提交阶段:协调者等待一段超时时间后,若没有收到任何参与者的中断请求,向所有参与者发送提交指令,参与者正式提交事务;若收到中断请求或超时,向所有参与者发送回滚指令,参与者回滚事务。
优缺点差异
- 2PC优点:
- 简单易实现:逻辑相对清晰,在很多场景下能够满足基本的分布式事务一致性需求。
- 广泛应用:由于其简单性,在早期分布式系统中应用广泛。
- 2PC缺点:
- 单点故障问题:协调者出现故障,整个事务可能悬而不决,参与者会一直阻塞等待。
- 同步阻塞:在整个事务过程中,参与者一直处于阻塞状态,直到收到最终的提交或回滚指令,这期间无法处理其他事务,严重影响系统性能。
- 数据不一致风险:在第二阶段,如果协调者发出提交指令后,部分参与者收到指令并提交,而部分未收到(网络问题等),就会导致数据不一致。
- 3PC优点:
- 降低单点故障影响:3PC 的引入预提交阶段,使得协调者故障后,参与者可以根据自身状态决定下一步操作,一定程度上缓解了单点故障问题。
- 减少同步阻塞:预提交阶段后,参与者可以在等待最终提交指令时处理其他事务,减少了阻塞时间。
- 数据一致性提升:通过引入超时机制和三阶段流程,降低了数据不一致的风险。
- 3PC缺点:
- 性能开销大:增加了一个阶段,使得事务处理的时间变长,网络通信次数增多,性能开销增大。
- 实现复杂:相比2PC,3PC的实现逻辑更加复杂,对系统的开发和维护带来更高的要求。
不同业务需求下的协议选择
- 对一致性要求极高,性能要求相对不敏感:
- 场景举例:银行转账业务,涉及资金的准确性和一致性,不容许出现数据不一致的情况。
- 协议选择:3PC 协议更合适,虽然其性能开销较大,但能最大程度保证数据一致性,减少因数据不一致带来的严重后果。
- 对性能要求较高,一致性要求相对宽松(允许短暂不一致,但最终要一致):
- 场景举例:电商系统的订单处理,允许在短时间内订单状态在不同节点有差异,但最终要达成一致。
- 协议选择:2PC 协议相对合适,其简单易实现,性能开销相对较小,能在满足业务最终一致性的前提下,提高系统的处理性能。