C++ 全栈知识体系C++ 全栈知识体系
✿导航
  • 基础
  • 函数
  • 知识点
  • IO框架
  • 新版本特性
  • 数据库原理
  • SQL语言
  • SQL - MySQL
  • NoSQL - Redis
  • NoSQL - ElasticSearch
  • 算法基础
  • 常见算法
  • 领域算法
  • 分布式算法
  • 数据结构与算法
  • 计算机网络
  • 操作系统
  • 计算机组成
  • 开发
  • 测试
  • 架构基础
  • 分布式系统
  • 微服务
  • 中间件
  • 概念
  • 理论
  • 架构设计原则
  • 设计模式
  • 协议
  • 技术选型
  • 编码规范
  • 流水线构建 - CI/CD
  • 知识点 - Linux
  • 网站 - Nginx
  • 容器化 - Docker
  • 容器编排 - Kubernetes
  • 服务网格 - Service Mesh Istio
  • 常用快捷键 - Shortcut
  • 工具使用 - Tools
  • 开源项目
  • 学习项目
  • 个人项目
  • 项目开发
  • 项目Idea
  • 并发
  • 部署
  • 分布式
  • 知识
  • 问题
  • 编程语言与技术
  • 系统与架构
  • 软件开发实践
  • 数据处理与应用设计
  • 个人
  • 产品
  • 团队
  • 知识体系
  • Vue
关于
✿导航
  • 基础
  • 函数
  • 知识点
  • IO框架
  • 新版本特性
  • 数据库原理
  • SQL语言
  • SQL - MySQL
  • NoSQL - Redis
  • NoSQL - ElasticSearch
  • 算法基础
  • 常见算法
  • 领域算法
  • 分布式算法
  • 数据结构与算法
  • 计算机网络
  • 操作系统
  • 计算机组成
  • 开发
  • 测试
  • 架构基础
  • 分布式系统
  • 微服务
  • 中间件
  • 概念
  • 理论
  • 架构设计原则
  • 设计模式
  • 协议
  • 技术选型
  • 编码规范
  • 流水线构建 - CI/CD
  • 知识点 - Linux
  • 网站 - Nginx
  • 容器化 - Docker
  • 容器编排 - Kubernetes
  • 服务网格 - Service Mesh Istio
  • 常用快捷键 - Shortcut
  • 工具使用 - Tools
  • 开源项目
  • 学习项目
  • 个人项目
  • 项目开发
  • 项目Idea
  • 并发
  • 部署
  • 分布式
  • 知识
  • 问题
  • 编程语言与技术
  • 系统与架构
  • 软件开发实践
  • 数据处理与应用设计
  • 个人
  • 产品
  • 团队
  • 知识体系
  • Vue
关于
  • 架构基础

    • 发展历程
    • 服务演化
    • ORM框架
    • RPC框架
  • 分布式系统

    • 分布式系统 - 基础
    • 分布式系统 - 设计
    • 分布式系统 - 缓存
    • 分布式系统 - 通信方式
    • 分布式系统 - 一致性
    • 分布式系统 - 锁
    • 分布式系统 - 解决高并发、高性能、高可用
  • 微服务

    • 微服务 - 简介
    • 微服务 - 学习路线
    • 微服务 - 服务网关
    • 微服务 - 通信方式
    • 微服务 - 消息队列
    • 微服务 - 保护
    • 微服务 - 分布式搜索
    • 微服务 - 分布式事务
    • 微服务 - 多级缓存
    • 微服务 - 幂等性设计
  • 中间件

    • 消息队列 - ZeroMQ

      • ZeroMQ - 经典例子
      • ZeroMQ - 基础
      • ZeroMQ - 进阶
      • ZeroMQ - 高级请求-应答模式
    • RPC调用 - Dubbo

      • Dubbo - 框架学习
    • 配置中心 - Consul

      • Consul - 概述
      • Consul - 学习内容
      • Consul - 安装与使用
      • Consul - 服务健康检查
      • Consul - 常用的API
      • Consul - 存储个K/V
    • 配置中心 - Apollo

      • Apollo - 概述
      • Apollo - 设计
      • Apollo - Docker部署
      • Apollo - 使用配置中心
    • 监控平台 - Cat

      • Cat - 概述
      • Cat - Docker快速部署
      • Cat - C++客户端的docker镜像
    • 数据处理管道 - Logstash

      • Logstash - Elastic 总览
      • Logstash - 工作原理
      • Logstash - docker部署
      • Logstash - 实践
    • 服务网关 - Kong

      • Kong - 概述
      • Kong - Docker快速部署
      • Kong - C++客户端的docker镜像

分布式系统 - 一致性

  • 二阶段提交
  • 三阶段提交

一致性分类

  • 强一致性(strong)
  • 单调一致性(monotonic)
  • 会话一致性 (session)
  • 最终一致性(eventual)
  • 弱一致性(weak)

一致性算法

  • 一致性Hash算法
  • Paxos算法
  • Raft算法
  • ZAB算法

一致性协议

参考文章:

  1. 分布式系统的事务处理 https://coolshell.cn/articles/10910.html

二阶段提交

绝大部分的关系型数据库都是采用来完成分布式事务的处理。

提交过程:

  • 投票

    • 两将军问题:
        1. 协调者向各个节点发送提交事务的消息
        1. 各节点接收到消息后开始执行事务但不提交,同时记录Redo、Undo日志
        1. 各节点执行完成事务后向协调者反馈执行结果
  • 执行

    • 协调者根据各个节点反馈的情况来决定是否进行事务提交
    • 提交事务
        1. 向各节点发送提交请求
        1. 节点开始提交事务
        • 执行事务提交,并在完成后释放期间所占用的资源
        1. 反馈事务提交结果
        • 向协调者发送ack消息
            1. 全部响应Yes
            1. 部分响应No
          • 原因
            • 执行业务的事务失败
            • 网络超时
        1. 完成事务
        • 协调者接收到到所有参与者反馈后完成事务
    • 回滚事务
        1. 发送回滚请求
        1. 利用Undo信息回滚事务
        1. 反馈事务结果
        1. 完成终端机事务
  • 优点

    • 原理简单,实现方便
  • 缺点

    • 同步阻塞
    • 单点问题
      • 协调者在整个阶段中起到非常重要的作用,一旦协调者出现问题那整个提交流程将无法运转,如果是在第二个阶段中出现问题,那么其他参与者将一直处于锁定资源状态,而无法完成其他事务操作。
    • 数据不一致
    • 过于保守

三阶段提交

三阶段提交即将二阶段提交协议中的第一步投票阶段拆分为两个阶段:

  1. 先询问 2. 再锁定资源。

所以三阶段的核心理念是: 在询问的时候并不锁定资源,除非所有人都同意了,才开始锁资源

  • 提交过程

    • CanCommit 这期间只询问而不执行事务,也就不会锁定资源

        1. 询问各个节点是否可以执行事务
        1. 各个节点向协调者反馈询问结果
    • PreCommit

      • 执行事务预提交 所有节点都返回yes ,则执行预提交

          - 协调者向各个节点发送预提交请求
          - 各个节点执行事务预提交,并记录Redo Undo 日志
          - 各个节点反馈执行结果
        
      • 中断事务 只要有一个节点反馈no 则中断事务执行

    • doCommit

      • 提交事务

          - 发送提交请求
          - 各个节点提交事务
          - 反馈事务提交结果
          - 完成事务
        
      • 中断事务

Last Updated:
Contributors: klc407073648
Prev
分布式系统 - 通信方式
Next
分布式系统 - 锁