美文网首页循序渐进学分布式
一致性协议之两阶段提交协议(2PC)

一致性协议之两阶段提交协议(2PC)

作者: 躁动的中年大叔 | 来源:发表于2018-07-28 17:03 被阅读17次

    概述

    2PC是一种一致性协议,我们设计一致性协议是为了保证分布式系统各个节点的数据一致性。目前绝大部分的关系型数据库都是用2PC,统一事务的提交或回滚。

    在分布式系统中,每一个节点都能明确的知道自己在进行事务操作中的结果,成功或者失败。却无法直接获取到其他节点的执行情况。
    因此一般会引入一个成为“协调者”的组件来统一协调各个分布式节点(参与者)的执行逻辑,并最终决定是否进行事务提交。2PC正是采用该思想来协调分布式系统。

    2PC协议详解

    2PC,两阶段提交协议。顾名思义,它将事务的提交分为了两个阶段来进行处理。

    阶段一:事务请求阶段

    1. 事务询问

    协调者向所有参与者发送事务内容,询问是否可以进行事务提交操作,并等待参与者的响应。

    2. 事务执行

    各参与者执行事务,并记录Undo和Redo信息到事务日志中。

    3.事务反馈

    各参与者向协调者反馈事务执行的结果。事务执行成功则反馈Yes响应,执行失败则反馈No响应。

    阶段二:事务提交阶段

    在阶段二中,协调者会根据各参与者的反馈来决定是否进行事务提交。

    执行事务提交

    如果协调者收到各参与者的反馈都是Yes响应,则执行事务提交

    1. 发送Commit请求

    协调者向所有参与者发出事务Commit请求

    2. 执行事务Commit

    参与者收到commit请求后,执行事务提交操作。

    3. 反馈结果

    各参与者完成事务提交之后,向协调者发送Ack响应.

    4. 完成事务

    协调者收到各参与者的Ack响应后,结束事务。

    中断事务

    如果任何一个参与者向协调者反馈了No响应,或者协调者等待时间超时之后没有收到所有参与者的反馈响应,那么就会中断事务

    1. 发送Rollback请求

    协调者向所有参与者发送Rollback请求

    2. 执行事务Rollback

    参与者收到Rollback请求后,会根据事务日志中的Undo信息执行事务回滚操作。

    3. 反馈结果

    各参与者完成事务回滚后,向协调者发送Ack响应。

    4. 完成事务Rollback

    协调者收到所有参与者反馈的Ack响应后,完成事务回滚。

    优缺点

    优点:协议简单、易于实现

    缺点:同步阻塞、单点问题、会出现脑裂、保守

    1. 同步阻塞

    执行过程每一个步骤,各个参与者都要等待其他参与者执行完成,期间无法进行任何操作。

    2.单点问题

    协调者挂了,系统就挂了

    3.脑裂问题

    在阶段二中,当协调者发出commit请求后,由于网络或者其他原因,一部分参与者收到了commit请求,一部分参与者未收到commit请求,则会出现一部分参与者提交了事务,一部分未提交,因此出现各节点数据不一致,造成“脑裂”。

    4. 保守

    2PC没有提供完善的容错机制,任何一步失败将会导致整个事务的失败。这样的策略略显保守。

    相关文章

      网友评论

        本文标题:一致性协议之两阶段提交协议(2PC)

        本文链接:https://www.haomeiwen.com/subject/vivomftx.html