远方的灯塔 - 专注于服务端技术分享 远方的灯塔 - 专注于服务端技术分享
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 文章分类
  • 文章标签
  • 文章归档
  • 《C程序设计语言》
心情随笔
友情链接
给我留言 (opens new window)
关于我
GitHub (opens new window)

Terwer Green

一个后端老菜鸟
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 文章分类
  • 文章标签
  • 文章归档
  • 《C程序设计语言》
心情随笔
友情链接
给我留言 (opens new window)
关于我
GitHub (opens new window)
  • JavaSE

  • 开源框架

  • Linux

  • Struts2

  • Hibernate

  • Webservice

  • 分布式

    • RPC架构设计及IO模型
    • NIO编程及其三大核心原理
    • NIO三大核心之缓冲区(Buffer)
    • NIO三大核心之通道(Channel)
    • NIO三大核心之选择器(Selector)
    • Netty核心原理
    • 线程模型以及传统IO阻塞模型
    • Reactor模型
    • Netty线程模型
    • Netty核心API介绍
    • Netty入门与异步模型
    • Netty高级进阶之Netty编解码器
    • Netty高级进阶之基于Netty的群聊天室案例
    • Netty高级进阶之基于Netty的HTTP服务器开发
    • Netty高级进阶之基于Netty的Websocket开发网页聊天室
    • Netty高级进阶之Netty中的粘包和拆包的解决方案
    • Nety源码剖析
    • 自定义RPC框架之分布式架构网络通信理论
    • 自定义RPC框架之基于Netty实现RPC框架
    • 分布式架构理论
    • 分布式理论之数据一致性
    • 分布式理论之CAP定理
    • 分布式理论之BASE定理
    • 分布式一致性协议之两阶段提交协议(2PC)
      • 分布式一致性协议之三阶段提交协议(3PC)
      • 分布式一致性协议之NWR协议
      • 分布式一致性协议之Gossip协议
      • 分布式一致性协议之Paxos协议
      • 分布式一致性协议之Raft协议
      • 分布式一致性协议之Lease机制
      • 分布式系统设计策略之心跳检测
      • 分布式系统设计策略之高可用
      • 分布式系统设计策略之容错性
      • 分布式系统设计策略之负载均衡
      • 分布式架构服务调用
      • 分布式服务治理之服务协调
      • 分布式服务治理之服务削峰
      • 分布式服务治理之服务降级
      • 分布式服务治理之服务限流
      • 分布式服务治理之服务熔断
      • 分布式服务治理之服务链路追踪
      • 架构设计基本原则之开闭原则(OCP)
      • 架构设计基本原则之单一职责原则(SRP)
      • 架构设计基本原则之接口隔离原则(ISP)
      • 架构设计基本原则之里式替换原则(LSP)
      • 架构设计基本原则之依赖倒置原则(DIP)
      • 架构设计基本原则知识扩展
      • 分布式架构知识拓展与总结
    • 分布式框架

    • 后端开发
    • 分布式
    terwer
    2022-04-17
    目录

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

    本文阐述了分布式系统中一些常见的协议以及原理分析。

    # 分布式一致性协议

    2022/03/01 校对完成

    文章更新历史

    2022/03/01 初稿。

    # 两阶段提交协议(2PC)

    # 两阶段提交协议

    两阶段提交协议,简称2PC(2 prepare commit),是比较常见的解决分布式事务的方式。要么所有参与进程都提交事务,要么都取消事务,即实现ACID中的原子性(A)的常用手段。

    分布式事务:事务提供一种操作本地数据库的不可分割的一系列操作。要么什么都不做,要么做全套(All or Nothing)。

    分布式事务是为了操作不同数据库的不可分割的一系列操作。要么什么都不做,要么做全套(All or Nothing)。

    image-20220320193312964

    # 2PC执行流程

    • 成功提交事务的流程

    image-20220320193849595

    • 阶段一

      • 事务询问

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

      • 执行事务(写本地的undo/redo日志)

      • 各个参与者向事务协调者反馈事务询问的响应

    • 阶段二

      • 发送提交请求

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

      • 事务提交

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

      • 反馈事务提交结果

        参与者在完成事务提交后,向协调者发送ack消息

      • 完成事务

        协调者接收到参与者发送的ack消息,完成事务

    • 中断事务流程

      假设任意一个参与者向协调者发送了No响应,或者在等待超时之后,协调者还是无法接收到参与者的响应,那么就会中断事务。

    image-20220320194926824

    • 阶段一

      • 事务询问

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

      • 执行事务(写本地的undo/redo日志)

      • 各个参与者向事务协调者反馈事务询问的响应

    • 阶段二

      • 发送回滚请求

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

      • 事务回滚

        参与者解释道rollback请求之后,利用在阶段一中记录的undo信息,来执行事务回滚操作。并在完成事务回滚之后释放在整个事务执行期间占用的事务资源。

      • 反馈事务回滚结果

        参与者完成事务回滚之后,向协调者发送ack消息

      • 中断事务

        协调者接收到所有参与者发送的ack消息之后,完成事务中断

    # 2PC优缺点

    • 优点

      原理简单

    • 缺点

      • 同步阻塞

        在二阶段提交的执行的过程中,所有参与该事务操作的逻辑都处于堵塞状态。

        当参与者占用公共资源时,其他参与者一直处于锁定事务资源的状态中,而无法完成事务操作。

      • 单点问题

        若协调器出现问题,那么整个第二阶段的事务提交将无法运转,若协调者在阶段二出现问题,其他参与者一直处于锁定事务资源的状态中,无法完成事务操作

      • 数据不一致

        在阶段二中,执行事务提交的的时候,当协调者向所有参与者发送commit请求之后,发生了网络异常,或者,协调者尚未发送commit请求之前发生了崩溃,导致最终只有部分参与者收到了commit请求,就会出现数据不一致的情况

      • 太过保守

        在进行事务提交询问的过程中,参与者出现故障而导致协调者始终无法获取所有参与者的响应信息的话,此时协调者只能通过自己的超时机制来判断是否需要终止事务。

        这样的策略过于保守,既没有完善的容错机制,任意一个节点的失败都会导致整个事务的失败。

    编辑 (opens new window)
    #rpc#2pc
    上次更新: 2023/02/22, 13:47:25
    分布式理论之BASE定理
    分布式一致性协议之三阶段提交协议(3PC)

    ← 分布式理论之BASE定理 分布式一致性协议之三阶段提交协议(3PC)→

    最近更新
    01
    解决css部分border被圆角切掉之后圆角的边框消失问题
    03-18
    02
    使用TypeScript开发一个自定义的Node-js前端开发脚手架
    03-08
    03
    Github-Actions使用release-please实现自动发版
    03-06
    更多文章>
    Theme by Vdoing | Copyright © 2011-2023 Terwer Green | MIT License | 粤ICP备2022020721号-1 | 百度统计
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式