关于事务的几个概念介绍(转)

 

啥是事务?

有一组操作组成的可靠的独立的工作单元。

 

ACID是咋回事?

A(原子性)事务的原子操作单元,对数据的修改,要么全部执行,要么全部不执行;

C(一致性)在事务开始和完成时,数据必须保持一致状态,相关的数据规则必须应用于事务的修改,以保证数据的完整性,事务结束时,所有的内部数据结构必须正确;

I(隔离性)保证事务不受外部并发操作的独立环境执行;

D(持久性)事务完成之后,对于数据的修改是永久的,即使系统出现故障也能够保持;

 

BASE是咋回事?

BA: Basic Availability 基本业务可用性;

S: Soft state 柔性状态;

E: Eventual consistency 最终一致性;

 

CAP是咋回事?

C(一致性)一致性是指数据的原子性,在经典的数据库中通过事务来保障,事务完成时,无论成功或回滚,数据都会处于一致的状态,在分布式环境下,一致性是指多个节点数据是否一致;

A(可用性)服务一直保持可用的状态,当用户发出一个请求,服务能在一定的时间内返回结果;

P(分区容忍性)在分布式应用中,可能因为一些分布式的原因导致系统无法运转,好的分区容忍性,使应用虽然是一个分布式系统,但是好像一个可以正常运转的整体;

对于任何共享系统,最多只能拥有其中两个特性。任两者的组合都有适用的场景,真实系统应该是ACID和BASE的混合体。

 

二阶段提交咋回事?

1、第一阶段(提交请求阶段)

协调者节点向所有参与者节点询问是否可以执行提交操作,并开始等待各参与者节点的响应。

参与者节点执行询问发起为止的所有事务操作,并将Undo信息和Redo信息写入日志。

各参与者节点响应协调者节点发起的询问。如果参与者节点的事务操作实际执行成功,则它返回一个"同意"消息;如果参与者节点的事务操作实际执行失败,则它返回一个"中止"消息。有时候,第一阶段也被称作投票阶段,即各参与者投票是否要继续接下来的提交操作。

2、第二阶段(提交执行阶段)

2.1成功

当协调者节点从所有参与者节点获得的相应消息都为"同意"时:

协调者节点向所有参与者节点发出"正式提交"的请求。

参与者节点正式完成操作,并释放在整个事务期间内占用的资源。

参与者节点向协调者节点发送"完了"消息。

协调者节点受到所有参与者节点反馈的"完了"消息后,完成事务。

2.2失败

如果任一参与者节点在第一阶段返回的响应消息为"中止",或者 协调者节点在第一阶段的询问超时之前无法获取所有参与者节点的响应消息时:

协调者节点向所有参与者节点发出"回滚操作"的请求。

参与者节点利用之前写入的Undo信息执行回滚,并释放在整个事务期间内占用的资源。

参与者节点向协调者节点发送"回滚完了"消息。

协调者节点受到所有参与者节点反馈的"回滚完了"消息后,取消事务。

有时候,第二阶段也被称作完成阶段,因为无论结果怎样,协调者都必须在此阶段结束当前事务。

3、二阶段提交的缺点

二阶段提交算法的最大缺点就在于 它的执行过程中间,节点都处于阻塞状态。即节点之间在等待对方的相应消息时,它将什么也做不了。特别是,当一个节点在已经占有了某项资源的情况下,为了等待其他节点的响应消息而陷入阻塞状态时,当第三个节点尝试访问该节点占有的资源时,这个节点也将连带陷入阻塞状态。

另外,协调者节点指示参与者节点进行提交等操作时,如有参与者节点出现了崩溃等情况而导致协调者始终无法获取所有参与者的响应信息,这是协调者将只能依赖协调者自身的超时机制来生效。但往往超时机制生效时,协调者都会指示参与者进行回滚操作。这样的策略显得比较保守。  ​

 

分布式事务的XA协议?

XA协议是由X/Open组织提出的分布式事务处理的规范,主要定义了事务管理器和局部资源管理器之间的界面,目前Oracle、db2等各大数据库厂商都提供对XA的支持,XA协议采用二阶段提交来管理分布式事务。

 

本地事务是咋回事?

事务有资源管理器(例如DBMS)本地管理。

优点是支持ACID特性,高效,可靠,应用系统编程简单。

缺点是不支持分布式环境,隔离的最小单位有资源管理器决定,例如数据库的一行记录。

 

spring的事务模板(模板方法回调)

   

 

最佳实践

1、基于消息的最终一致性

消息系统提供两个方面的支持,一个是发送消息提供事务支持,另外一个就是发送成功的消息保证投递成功,这样就可以借助消息系统来实现系统的最终一致性

2、系统幂等操作

重复调用多次产生的业务结果与调用一次产生的业务结果相同。

实现方式一个是业务操作本身实现幂等,二是系统缓存请求与处理结果,检测到重复请求之后,自动返回之前的结果。

3、事务补偿机制

http://iamzhongyong.iteye.com/blog/2076896

 

时间: 2024-09-21 16:02:07

关于事务的几个概念介绍(转)的相关文章

【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)

集群概念介绍 集群术语须知 服务硬件:指提供计算服务的硬件,比如 PC 机.PC 服务器. 服务实体:服务实体通常指服务软体和服务硬体. 节点(node):运行 Heartbeat 进程的一个独立主机称为节点,节点是 HA 的核心组成部分,每个节点上运行着操作系统和Heartbeat 软件服务. 资源(resource):资源是一个节点可以控制的实体,当节点发生故障时,这些资源能够被其他节点接管.如: 磁盘分区.文件系统.IP 地址.应用程序服务.共享存储 事件(event):事件也就是集群中可

Python模块搜索概念介绍及模块安装方法介绍

  这篇文章主要介绍了Python模块搜索概念介绍及模块安装方法介绍,本文详细讲解了import模块的运作原理,搜索路径的过程以及模块安装的多种方法,需要的朋友可以参考下 [import模块] 和C中的#include不同,Python中的import语句并不是简单的把一个文件插入另外一个文件. 导入其实是运行时的运算,程序第一次导入指定文件时,会执行以下步骤, 1. 找到模块文件 2. 编译成位码 3. 执行模块中的代码来创建所定义的模块 并生成.pyc字节码文件,这三个步骤只在程序执行时,模

Spark概念介绍

Spark概念介绍: spark应用程序在集群中以一系列独立的线程运行,通过驱动器程序(Driver Program)发起一系列的并行操作.SparkContext对象作为中间的连接对象,通过SparkContext对象连接集群.SparkContext对象可以连接集群管理器(YARN,Mesos.standalone等) 目前Spark集群支持以下集群管理模式: (1)本地模式 (2)Mesos模式: 一种通用的集群管理模式,可以运行Hadoop Mapreduce和应用服务(3)YARN模式

足彩基础知识入门(4)赛事数据库与预测平台基础概念介绍(一)

在足球赛事数据库以及统计分析预测平台中,有很多概念,如果不搞懂,很难进行下一步的工作.所以为了配合团队人员的学习和任务进行,特意编写这篇文章.如果有其他问题和不懂的,请留言,将根据情况进行更新. 本文原文地址:足彩基础知识入门(4)赛事数据库与预测平台基础概念介绍(一) 1.指数1/2/3.... 我在 足彩基础知识入门(3)足彩赔率的本质 一文中介绍了赔率的概念,那么指数的概念和赔率以及结果是相关的.我们举个例子: 如上图的比赛,前面是竞彩非让球的赔率:1.74-3.25-4.15,也就是说

NAS与磁盘阵列柜的概念介绍

第1页:NAS与磁盘阵列柜的概念介绍 随着IT产品作为当前重要的信息工具大量的应用在我们日常生活.工作当中后,导致从个人到企业拥有电子数据成几何级增长,数据量的膨胀增长直接刺激各种形态的存储设备市场的蓬勃发展.近几年各存储设备生产厂商针对IT产品的消费大户之一的中小型企业对存储设备的需求研制生产出各式各样的存储设备,其中代表当前主流的两种存储设备NAS及磁盘阵列柜在各行各业得到大量的应用,近期在存储界针对NAS与磁盘阵列柜哪一种存储设备更适合在中小型企业当中应用成了他们的热门话题.事实又是如何呢

《Docker进阶与实战》——3.1节Docker image概念介绍

3.1 Docker image概念介绍简单地说,Docker image是用来启动容器的只读模板,是容器启动所需要的rootfs,类似于虚拟机所使用的镜像.首先需要通过一定的规则和方法表示Docker image,如图3-1所示. 图3-1是典型的Docker镜像的表示方法,可以看到其被"/"分为了三个部分,其中每部分都可以类比Github中的概念.下面按照从左到右的顺序介绍这几个部分以及相关的一些重要概念.Remote docker hub:集中存储镜像的Web服务器地址.该部分的

Netty重要概念介绍

Netty重要概念介绍 Bootstrap Netty应用程序通过设置bootstrap(引导)类开始,该类提供了一个用于网络成配置的容器. 一种是用于客户端的Bootstrap 一种是用于服务端的ServerBootstrap Channel Netty中的channel定义了丰富的和socket交互的操作方法:bind, close, config, connect, isActive, isOpen, isWritable, read, write 等等.Netty 提供大量的 Chann

Winform开发框架里面使用事务操作的原理及介绍

在很多情况下,事务是个很有用的东西,可以把一系列的操作组合成一个原子粒度的操作,一旦组合中某个地方出错,可以整个干净的进行滚回,不会留下脏数据:除此之外,事务还能提高批量操作的效率,如在本地SQLite数据库里面,批量插入1万条数据,那么使用事务和没有使用事务,速度上至少差别几十到上百倍的差异.既然事务有完整性和速度性的差异,因此,基于上述原因,我们在很多情况下最好使用事务进行操作.本文主要介绍在开发框架中如何整合事务的操作,并介绍在各个分层中的事务使用案例. 由于我介绍的相关框架,主要是采用了

Spring事务管理回顾——基本概念

BackGround:            最近一直在面试,感觉spring的事务配置问的挺多的,再扯出来好好瞅瞅,争取做到秒杀面试官. 一,事务的基本概念        什么是事务?               逻辑上的一组操作,这组操作要么全都成功,要么全都失败.例如,我购买完一个课程,要进行支付,需要首先去我的账户表中减去需要支付的金额,然后更新订单状态,支付才算是成功,那么支付跟更新订单状态就要放在一个事务里面执行,要么全成功,要么全失败,不能出现那种我买了课程,结果订单还显示我未支付