面试题答案
一键面试2PC(两阶段提交协议)
- 优点:
- 简单易实现:逻辑相对清晰,分为准备阶段和提交阶段,易于理解和编码实现。
- 广泛应用:在很多数据库和分布式系统中都有应用,社区支持度高,相关文档和资料丰富。
- 缺点:
- 单点故障:协调者一旦出现故障,整个事务处理流程可能会中断,处于阻塞状态的参与者无法继续执行操作。
- 同步阻塞:在准备阶段,参与者需要锁定资源,直到收到协调者的最终指令,期间资源处于被占用状态,降低了系统的并发性能。
- 数据不一致风险:如果在提交阶段,部分参与者收到提交指令,而部分未收到(网络故障等原因),可能导致数据不一致。
3PC(三阶段提交协议)
- 优点:
- 降低单点故障影响:引入了预提交阶段,即使协调者在正式提交阶段故障,参与者可以根据预提交状态继续执行事务,一定程度上减少了因协调者故障导致事务阻塞的时间。
- 减少同步阻塞时间:预提交阶段让参与者有机会在最终提交前进行一些准备工作,并且在收到预提交指令后,可以释放部分资源,提高系统并发性能。
- 降低数据不一致风险:由于多了预提交阶段,在协调者发出提交指令前,所有参与者对事务的状态有更一致的认知,降低了数据不一致的可能性。
- 缺点:
- 实现复杂:相比2PC增加了一个阶段,协议的逻辑更复杂,实现难度增加,对系统的开发和维护成本更高。
- 网络依赖高:由于增加了一个阶段,网络交互次数增多,对网络稳定性要求更高,网络故障可能导致事务处理出现问题。
不同业务场景下的选择
- 对一致性要求极高且并发度较低的场景:如金融交易等业务场景,2PC虽然存在单点故障等问题,但由于其逻辑简单,能较好保证数据一致性,在协调者可靠性较高的情况下可以选择。若希望进一步降低协调者故障影响及数据不一致风险,可选择3PC,尽管实现复杂但能提供更高的数据一致性保障。
- 对并发性能要求高且能容忍一定程度数据不一致的场景:如一些日志记录、统计分析等业务场景,3PC由于其减少同步阻塞时间和降低数据不一致风险的特性,更适合这类场景,能在保证一定数据一致性的前提下,提高系统并发性能。
- 对系统实现复杂度敏感且对可靠性有一定要求的场景:2PC简单易实现,若通过一些额外手段(如协调者冗余等)来降低单点故障影响,可满足这类场景需求,在保证一定可靠性的同时,降低开发和维护成本。