⼆阶段提交: a. 概念:参与者将操作成败通知协调者,再由协调者根据所有参与者的 反馈情报决定各参与者是否要提交操作还是中⽌操作。 b. 作⽤:主要保证了分布式事务的原⼦性;第⼀阶段为准备阶段,第⼆ 阶段为提交阶段; c. 缺点:不仅要锁住参与者的所有资源,⽽且要锁住协调者资源,开销 ⼤。⼀句话总结就是:2PC效率很低,对⾼并发很不友好。
三阶段提交: a. 概念:三阶段提交协议在协调者和参与者中都引⼊超时机制,并且把 两阶段提交协议的第⼀个阶段拆分成了两步:询问,然后再锁资源,最 后真正提交。这样三阶段提交就有CanCommit、PreCommit、 DoCommit三个阶段。 b. 缺点:如果进⼊PreCommit后,Coordinator发出的是abort请求,假 设只有⼀个Cohort收到并进⾏了abort操作, ⽽其他对于系统状态未知的Cohort会根据3PC选择继续Commit,此时系统状态 发⽣不⼀致性。
柔性事务: a. 概念:所谓柔性事务是相对强制锁表的刚性事务⽽⾔。流程⼊下: 服务器A的事务如果执⾏顺利,那么事务A就先⾏提交,如果事务B也执 ⾏顺利,则事务B也提交,整个事务就算完成。但是如果事务B执⾏失 败,事务B本身回滚,这时事务A已经被提交,所以需要执⾏⼀个补偿操 作,将已经提交的事务A执⾏的操作作反操作,恢复到未执⾏前事务A的 状态。 b. 缺点:业务侵⼊性太强,还要补偿操作,缺乏普遍性,没法⼤规模推 ⼴。
消息最终⼀致性解决⽅案之RabbitMQ实现: a. 实现:发送⽅确认+消息持久化+消费者确认。 4.索引的B+树结构是咋样的?