一致性协议之 2PC

2PC,不是两个 PC 机的意思,而是 Two-Phase-Commit。可以认为是一种算法,也可以认为是一种协议,主要目的就是为了保证分布式系统数据的一致性

什么是 2PC

在分布式系统中,会有多个机器节点,因此需要一个 “协调者” ,而各个节点就是 “参与者”,协调者统一调度所有分布式节点的执行逻辑,这些被调度的分布式节点就是 “参与者”。

二阶段提交就是将事务的提交过程分成了两个阶段来进行处理。流程如下:

  1. 阶段一:事务请求阶段(投票阶段)

    • 事务询问:协调者向所有的参与者询问,是否准备好了执行事务,并开始等待各参与者的响应

    • 执行事务:各参与者节点执行事务操作,并将 Undo 和 Redo 信息记入事务日志中

    • 事务响应:如果参与者成功执行了事务,那么就反馈给协调者 Yes 响应,表示事务可以执行;如果参与者没有成功执行事务,就返回 No 给协调者,表示事务不可以执行

    从上面可以看出,这个所谓的 “投票阶段” 是用来判断是否所有的节点都可以执行事务操作

  2. 阶段二:事务提交阶段

    在阶段二中,会根据阶段一的投票结果执行两种操作:执行事务提交,中断事务

    执行事务提交步骤如下:

    1. 发送提交请求:协调者向所有参与者发出 commit 请求

    2. 事务提交:参与者收到 commit 请求后,会正式执行事务提交操作,并在完成提交之后释放整个事务执行期间占用的事务资源

    3. 反馈事务提交结果:参与者在完成事务提交之后,向协调者发送 ack 信息。协调者收到所有参与者反馈的 ack 信息后,完成事务

    中断事务步骤如下:

    1. 发送回滚请求:协调者向所有参与者发出 RollBack 请求

    2. 事务回滚:参与者收到 RollBack 请求后,会利用其在阶段一中记录的 Undo 信息来执行事务回滚操作,并在完成回滚之后释放在整个事务执行期间占用的资源

    3. 反馈事务回滚结果:参与者在完成事务回滚之后,向协调者发送 ack 信息

    4. 中断事务:协调者接收到所有参与者反馈的 Ack 信息后,完成事务中断

    优点缺点

    优点:原理简单,实现方便

    缺点:同步阻塞,单点问题,数据不一致,过于保守

    同步阻塞

    在二阶段提交的过程中,所有的节点都在等待其他节点的响应,无法进行其他操作。这种同步阻塞极大地限制了分布式系统的性能

-----------本文结束感谢您的阅读-----------
0%