前置知识 三阶段提交

简介: 【8月更文挑战第11天】

单库拆分为分库分表之后,一个巨大的挑战就是本地事务变成了分布式事务。事实上,即使没有分库分表,在微服务架构之下我们也还是会面临分布式事务的问题。

#
分布式事务既可以是纯粹多个数据库实例之间的分布式事务,也可以是跨越不同中间件的业务层面上的分布式事务。前表一般是分库分表中间件提供支持,后者一般是独立的第三方中间件提供支持,比如Seata。在面试的时候,要根据上下文确定面试官问你的分布式事务是哪一类。

先介绍分布式事务中几个比较常用的协议

三阶段提交协议是在两阶段协议地基础上进行地改进,三阶段提交协议引入了一个额外阶段来确保执行事务之前有足够的资源,减少两阶段协议引起的事务失败的可能

在两阶段协议里面,比较容易出现的一个情况就是参与者在准备阶段辛辛苦苦把Redo,Undo写好,结果另外一个参与者说自己这边执行不了事务,要回滚。那么这个参与者就白费功夫了。

因此在两阶段提交的基础上,三阶段提交引入了一个新阶段,协调者会先问一下参与者能不能执行这个事务。所以,整个三阶段提交协议的三个阶段是这样的

  1. 第一阶段CanCommit:协调者问一下各个参与者能不能执行事务。参与者这时候一般是检查一下自己有没有足够的资源。
  2. 第二阶段PreCommit:类似两阶段提交的第一个阶段,执行事务但是不提交
  3. 第三阶段Commit:直接提交或回滚

目前来看,三阶段提交协议并没有两阶段提交协议使用得那么广泛,原因有两个:一是两阶段提交协议已经足以解决大部分问题了,二是三阶段提交得收益和它得复杂度比起来,性价比有点低

目录
相关文章
|
开发框架 Linux C语言
C、C++、boost、Qt在嵌入式系统开发中的使用
C、C++、boost、Qt在嵌入式系统开发中的使用
511 1
|
关系型数据库 MySQL 应用服务中间件
站库分离技术--反向代理技术-雷池云WAF-给自己搭建一个安全点的网站
站库分离技术--反向代理技术-雷池云WAF-给自己搭建一个安全点的网站
518 3
|
Kubernetes 网络协议 网络安全
Pod之间的通信问题
【10月更文挑战第6天】
510 4
|
机器学习/深度学习 数据采集 PyTorch
机器学习 —— MNIST手写体识别(上)
机器学习 —— MNIST手写体识别
369 2
|
测试技术 程序员 Linux
【Docker项目实战】使用Docker部署blog轻量级博客系统
【2月更文挑战第16天】使用Docker部署blog轻量级博客系统
821 2
|
SQL 关系型数据库 Apache
Microsoft SQL Server 迁移到 PostgreSQL 利器:Babelfish
Babelfish for PostgreSQL 加速了将 Microsoft SQL Server 应用程序迁移到 PostgreSQL 的旅程。Babelfish for PostgreSQL 是一个开源项目,可在 Apache 2.0 和 PostgreSQL 许可下使用。它使 PostgreSQL 能够理解来自 Microsoft SQL Server 编写的应用程序的查询。Babelfish 了解 SQL Server 有线协议和 Microsoft SQL Server 查询语言 T-SQL,此您不必切换数据库驱动程序或重新编写所有应用程序查询。
654 0
|
Kubernetes Shell Docker
K8S核心插件-Flannel网络插件
K8S核心插件-Flannel网络插件
597 0
|
Serverless Go 数据安全/隐私保护
Go语言数学计算的秘密武器:big包详解
Go语言数学计算的秘密武器:big包详解
932 0
|
弹性计算
阿里云服务器IP地址查询方法
阿里云服务器IP地址查询方法,阿里云服务器IP地址在哪查看?在云服务器ECS管理控制台即可查看,阿里云服务器IP地址包括公网IP和私有IP,阿里云百科分享阿里云服务器IP地址查询方法
672 0
|
JSON 前端开发 Java
基于Springboot外卖系统14:菜品新增模块+多个数据表操作+文件上传下载复用
后台系统中可以管理菜品信息,通过新增功能来添加一个新的菜品,在添加菜品时需要选择当前菜品所属的菜品分类,并且需要上传菜品图片,在移动端会按照菜品分类来展示对应的菜品信息 。
415 0