事务服务浅析(一)

分布式事务 GTS 的价值和原理浅析 GTS 今年双 11 的成绩 今年 2684 亿的背后,有一个默默支撑,低调到几乎被遗忘的中间件云产品——GTS(全局事务服务,Global Transaction Service),稳稳地通过了自 2014 年诞生以来的第 5 次“大考”。 2019 年 11 月 1 日至 12 日,GTS 日均处理分布式事务数量达亿级,每天峰值 TPS 达万级。 这背后最重要意义在于:成绩是... 阅读详情
 

1. 事务综述

事 务是一个非常重要的编程概念,使用事务,可以很简单地构造出可靠稳定的应用程序,尤其对那些需要进行并发数据访问的应用程序,事务更是重要的多。事务的概 念最初应用在那些用于商务操作的应用程序上,在这些应用中,事务用来保护中央数据库中的数据。随后,随着分布式计算的发展,事务在分布式计算领域中也得到 了广泛的应用。现在,在分布式计算领域中,公认为事务是构造可靠性分布式应用程序的关键。

1.1事务产生的动机

1.1.1原子操作

考 虑这样一个应用:用户把钱从一个银行账号转账至另一个银行账号,需要将资金从一个银行账号中取出,然后再存入另一个银行账号中。理想来说,这两次操作都应 该成功。但是,如果有错误发生,则两次操作都应该失败,否则的话,操作之后其中一个账号中的金额将会是错误的,整个操作过程应该是原子性的,两个操作都是 一个原子事务操作的一部分。

可以使用异常处理来处理上述问题,代码如下:


try{
//从账户1中取款
}
catch(Exception e){
//如果发生错误,则终止操作
return;
}
try {
//如果第一步没有发生错误,则将提取出的资金存入账户2
}
catch(Exception e) {
//如果发生错误,则终止这步操作,并且将从账户1中取出的资金再重新存回到账户1中
return ;
}

上面这种解决方法从存在着下面的问题:

  • 程序拖沓冗长
  • 必须考虑到每一步中可能发生的每一个问题,并且要编写错误处理程序来考虑如何撤销所作的操作
  • 如果执行的是比简单的取款、存款操作要复杂的多的程序,那么错误处理程序将会变得难以控制。
  • 编写测试程序将会非常困难

因此,需要一种事务处理机制来保证这种原子性的操作。

1.1.2 网络故障或机器故障

为了在发生严重故障之后,能够保证系统的状态是一致的,所以需要一种恢复性的机制来保证这一点。

1.1.3 数据共享

需要一种机制来保证多用户并发访问数据的问题。

以上这些问题的解决方法,便是使用事务服务。

1.2 使用事务服务带来的好处

使用事务,便可以利用事务的四个重要属性:ACID。

  • 原子性( atomic):事务中包含的各项操作必须全部成功执行或者全部不执行。任何一项操作失败,将导致整个事务失败,其他已经执行的任务所作的数据操作都将被撤销,只有所有的操作全部成功,整个事务才算是成功完成。
  • 一致性( consistent): 保证了当事务结束后,系统状态是一致的。那么什么是一致的系统状态?例如,如果银行始终遵循着"银行账号必须保持正态平衡"的原则,那么银行系统的状态就 是一致的。上面的转账例子中,在取钱的过程中,账户会出现负态平衡,在事务结束之后,系统又回到一致的状态。这样,系统的状态对于客户来说,始终是一致 的。
  • 隔离性( isolated):使得并发执行的事务,彼此无法看到对方的中间状态。保证了并发执行的事务顺序执行,而不会导致系统状态不一致。
  • 持久性( durable):保证了事务完成后所作的改动都会被持久化,即使是发生灾难性的失败。可恢复性资源保存了一份事务日志,如果资源发生故障,可以通过日志来将数据重建起来。

2. 事务应用

事务服务支持的应用由下列实体组成:

  • 事务客户(TC,Transactional Client)
  • 事务对象(TO,Transactional Objects)
  • 可恢复对象(Recoverable Objects)
  • 提供事务支持的服务器(Transactional Servers)
  • 可恢复资源服务器(Recoverable Servers)

下图展示了一个简单的事务应用,包含了基本的事务元素:



  • 事务客户:事务客户是一个独立的程序,调用参与事务的多个事务对象。发起事务的程序被称为事务发起者(Transaction Originator)。
  • 事务对象:指那些在事务范围内行为会被影响的对象。事务对象自身包含了对持久化数据的操作或者通过事务请求间接对持久化数据进行操作。事务服务并不要求所有的事务请求都具有事务性的行为。与事务对象相对的是非事务对象。
  • 可 恢复对象(Recoverable Objects)和资源对象(Resource Objects):如果事务提交和事务的回滚将影响某个对象里面的数据,那么这个对象称为一个可恢复对象。一个对象可以是事务对象而不是可恢复对象,因为 事务对象可以使用其他的可恢复对象。可恢复对象必须将自己注册为事务服务中的一个资源对象,才可以参与到事务中。
  • 支持事务的服务器:例如应用服务器
  • 可恢复服务器:例如数据库

3. 事务服务提供的功能

事务服务提供下列操作:

  • 控制事务的范围和持续时间
  • 让多个对象参与到一个单独的原子性事务中
  • 将对象内部状态的改变同事务相联系
  • 协调事务完成

3.1事务模型

  • 平面型事务模型 整个事务是一个整体,不可划分为子事务。
  • 嵌套式事务模型 嵌套有子事务,子事务中还可以嵌套有子事务,整个是一个树形结构。 旅行计划问题:
    • 购买从美国波士顿到美国纽约的火车票
    • 购买从美国纽约到英国伦敦的飞机票
    • 购买从英国伦敦到法国巴黎的气艇票
    • 发现没有飞往法国巴黎的气艇票
    这对于平面型事务来说,只能有一个选择:事务失败。这样由于没有飞往巴黎的气艇票,将会取消所有的出行计划。但是在这里,完全可以采用其他的旅行方式(购 买火车票或者飞机票)来代替气艇。因此需要一个更加健壮的事务模型来解决这个问题。可以将整个事务划分为若干个子事务,整个事务可以重新执行单个子事务来 尝试完成事务,如果最终某个单个子事务无法完成,则整个事务失败。
  • 其他事务模型
    锁链式模型、传奇式模型等。

3.2 事务的终止

通过发出提交请求或回滚请求来终止事务。通常,事务是由发起事务的客户(事务发起者)来终止的。

3.3事务的完整性

某些事务服务的实现为了保证事务的完整性,在事务服务接口的使用上施加了一些限制。这称为checked事务行为。 例如,在事务的所有任务完成之前提交事务会导致数据不完整。事务服务的Checked实现会阻止事务的过早提交。 其他事务服务的实现则完全依赖应用程序来提供事务的完整性保证,这称为unchecked事务行为。

3.4事务的上下文

事务上下文惟一标识了一个事务,保存了事务的当前状态。通过查询事务上下文,可以得知自身是否处于事务中,所在事务的状态以及其他一些有用的信息。

事务上下文可以作为事务操作调用的一部分隐式地传递给事务对象。事务服务也允许程序员将事务上下文作为事务请求的显示参数来传递。

4. 分布式事务

分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。为了实现分布式事务,需要使用下面将介绍的两阶段提交协议。

  • 阶 段一:开始向事务涉及到的全部资源发送提交前信息。此时,事务涉及到的资源还有最后一次机会来异常结束事务。如果任意一个资源决定异常结束事务,则整个事 务取消,不会进行资源的更新。否则,事务将正常执行,除非发生灾难性的失败。为了防止会发生灾难性的失败,所有资源的更新都会写入到日志中。这些日志是永 久性的,因此,这些日志会幸免遇难并且在失败之后可以重新对所有资源进行更新。
  • 阶段二:只在阶段一没有异常结束的时候才会发生。此时,所有能被定位和单独控制的资源管理器都将开始执行真正的数据更新。

在分布式事务两阶段提交协议中,有一个主事务管理器负责充当分布式事务协调器的角色。事务协调器负责整个事务并使之与网络中的其他事务管理器协同工作。



为了实现分布式事务,必须使用一种协议在分布式事务的各个参与者之间传递事务上下文信息,IIOP便是这种协议。这就要求不同开发商开发的事务参与者必须支持一种标准协议,才能实现分布式的事务。

以上从事务整体描述的角度简要介绍了事务服务产生的动机、事务服务的应用和事务服务的功能,下面以J2EE中的事务服务为例对事务的实现作简要的介绍。

附录A 术语表
X/Open DTP模式是X/Open 公司制订的分布式事务处理模式,详见XA规范





参考资料

  1. Sun Microsystems Inc.Java Transaction API (JTA) Specification Version 1.1
  2. Sun Microsystems Inc.Java TMTransaction Service (JTS) Specification Version 1.0
  3. Java TM2 Platform Enterprise Edition Specification, v1.3
  4. Object Management Group.Transaction Service Specification Version 1.1
矢量量化的基本原理:高效数据压缩与信息检索的关键矢量量化(Vector Quantization,简称VQ)是一种数据压缩和信 此外,在矢量量化过程中,可能会引入一定的信息损失,对一些精细特征的表示可能存在一定的误差。它通过将高维数据映射到低维码本空间中,并将相似的数据映射到相同的码本向量中,实现对数据的高效表示和存储。最重要的是,矢量量化可以用于数据的检索和分析,提供了高效的数据查询和处理手段。通过使用码本索引,我们可以高效地存储和检索大量的数据。在图像处理中,矢量量化可以用于图像压缩,将复杂的图像数据转化为较少的码字,实现图像的存储和传输。矢量量化通过将连续的高维数据分割并映射到有限的码本集合中,实现数据的离散表示和压缩。 阅读详情

相关推荐

模拟量传输4-20ma电流

大家可能会非常熟悉RS232,RS485,CAN等工业上常用的总线,他们都是传输数字信号的方式。那么,我们用什么方式来传输模拟信号呢?工业上普遍需要测量各类非电物理量,例如温度、压力、速度、角度等,这些都需要转换成模拟量电信号才能传输到几百米外的控制室或显示设备上。工业上最广泛采用的是用4~20mA电流来传输模拟量。 采用电流信号的原因是不容易受干扰,因为工业现场的噪声电压的幅度可能达到数V,但是噪声的功率很弱,所以噪声电流通常小于nA级别,因此给4-20mA传输带来的误差非常小;电流源内阻趋于无穷.

tangdongming的博客 1万+

Spring事务服务

Spring事务服务 (2013-07-22 11:13:36)转载▼ ...

195

无人机+消防车:高楼灭火系统技术详解

传统的消防设备,如登高车、车载水枪、水炮和高喷车,在50米以上高度的火源面前往往力不从心,100米以上高层火灾则更加依赖消防员“爬楼”灭火,效率低下且风险极高。消防水带:采用聚乙烯丝材质,超轻、耐腐蚀、强度高,能够携带大量水或灭火泡沫进行高空喷水灭火作业。“无人机+消防车”高楼灭火系统主要由消防车和无人机两部分组成,通过机车联动实现高效灭火。高效灭火:无人机能够快速到达高层建筑顶部或指定位置进行灭火作业,大大提高了灭火效率。空压泡沫系统:配备超大水箱,支持长时间供应灭火泡沫,满足无人机灭火剂的需求。

专注多旋翼、复合翼无人机技术研究,从事低空经济行业。 1672

java事务服务_事务服务浅析

第II部分 J2EE中的事务服务Java TM2 Platform, Enterprise Edition(J2EE)简化了分布式事务管理应用程序的编写。J2EE包括了两套规范,用来支持分布式的事务,一种是Java Transaction API(JTA),另一种是Java Transaction Service(JTS)。JTA是一种高层的,与实现无关的,与协议无关的API,应用程序和应用服务器...

weixin_32659227的博客 381

OS实验xv6 6.S081 开坑

OS实验xv6 6.S081 开坑 终于把xv6 2019 6.S081做完了,网络部分没有写,因为有计网实验了。怎么说呢,xv6的坑有点多,能做完多亏了:和我同学ljj交流,参考RedemptionC老哥的博客(他写的非常详细,遗憾的是,他好像没有写mmap),再者就是参考这位老哥的做法(没有源码,写得不是特别详细,不过有借鉴作用,mmap就是借鉴了他的思想)……废话不多说了,直接开始。 实验指导 首推RedemptionC的博客 这位老哥的个人博客 xv6 6.S081官网(后面的实验都要参考官网

不定期更新系统使用、编程小技巧,哔哩哔哩账号:https://space.bilibili.com/399455629,欢迎关注 4493

基于传统算法的半导体晶圆缺陷检测原理及代码(二)

了解基于传统算法的半导体晶圆缺陷检测原理和方法,对于深入理解半导体制造工艺和质量控制具有重要意义。在半导体制造技术持续创新的浪潮中,基于传统算法的缺陷检测技术也将不断演进,为半导体产业的高质量发展提供坚实可靠的技术支撑,确保在芯片制造的每一个环节都能精准识别和管控缺陷,推动半导体产业迈向更高的发展水平。基于传统算法的半导体晶圆缺陷检测技术在半导体制造的长期发展历程中扮演了重要角色,凭借其成熟的技术体系、较快的检测速度和相对较低的成本,在各个工艺阶段为保障晶圆质量发挥了关键作用。

m0_44975814的博客 2220

[转]事务服务浅析(第二部分)

级别: 初级 孙瑛霖 (theyaluriver@163.com), 2002 年 6 月 16 日 事务是一个非常重要的编程概念,使用事务,可以很简单地构造出可靠稳定的应用程序,本文以许多具体的例子介绍了事务服务的概念和事务服务的具体实现。本文共分两部分:第一部分从事务服务整体描述的角度简要介绍了事务服务产生的动机、事务服务的应用和事务服务的功能,其中以具体的例子解释了相关概念和事务服...

denggui7770的博客 180

如何用IDEA查看jar包中代码

我们在使用Java进行开放时经常会需要下载些第三方的jar包进行相应的开发。有时候相关jar包的使用文档不足,满足不了我们的特定开发使用要求,这就需要我们查看jar包内的相关代码逻辑,本文将基于IDEA工具介绍如何查看相关jar包的代码逻辑

mystonelxj的博客 2281

保护应用服务器的安全

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33991418的博客 849

【YoloV12改进策略】基于流形约束超连接(mHC)增强YoloV12全局特征提取能力_独家复现_梁文峰署名论文

论文标题:流形约束超连接 (Manifold-Constrained Hyper-Connections, mHC)核心问题:针对超连接 (Hyper-Connections, HC) 扩展残差流宽度时破坏恒等映射、引发训练不稳定性和高内存开销的问题,提出一种约束性框架。目标:恢复残差连接的稳定性与可扩展性,同时保持HC的性能增益。基准模型:基于DeepSeek-V3的MoE架构,进行了3B、9B、27B模型的实验验证。论文图示mHC 是一个通用的HC扩展框架。

m0_47867638的博客 1354

基于 Simulink 的 PV 光伏阵列功率发电系统仿真 Matlab

其中直流侧电压需要与光伏电池组件匹配,交流侧电压则需要与配电系统匹配,开关频率一般在几千赫兹左右,需要保证在一定范围内。根据实际需求,我们还可以通过增加负载,以及调节光照强度等方式,模拟不同的情况下系统的响应和性能表现。经过设置参数和各部分之间的传递和控制后,我们可以开始进行模型仿真。在仿真前,我们需要确定仿真时间和步长,并对整体模型进行编译。在建立完毕整体模型框架后,我们需要为每个组件设置参数,并进行传递和控制。首先,我们需要建立一个整体的模型框架,包括各个组件之间的关系和控制器的作用。

学习使你进步。 1129

事务服务浅析

  事务是一个非常重要的编程概念,使用事务,可以很简单地构造出可靠稳定的应用程序,本文以许多具体的例子介绍了事务服务的概念和事务服务的具体实现。  本文共分两部分:第一部分从事务服务整体描述的角度简要介绍了事务服务产生的动机、事务服务的应用和事务服务的功能,其中以具体的例子解释了相关概念和事务服务涉及到的一些术语;第二部分以J2EE中的事务服务为例对事务的实现作简要的介绍。 第I部分 事务服务简述

3220

[EdgeAI] NXP eIQ 机器学习Toolkit (二):模型篇

eIQ™机器学习(ML)软件开发环境支持在恩智浦EdgeVerse™微控制器和微处理器(包括i.MX RT跨界MCU和i.MX系列应用处理器)上使用ML算法。eIQ ML软件包括称为eIQ Toolkit的ML工作流工具以及推理引擎、神经网络编译器和优化库。......

HowieXue 薛永浩的博客 1万+

事务回卷浅析

作者:瀚高PG实验室(Highgo PG Lab)-Chrisx 事务回卷浅析 文章目录事务回卷浅析事务ID(txid)事务可比较事务空间事务回卷防止事务回卷 在这里,我们描述事务ID回卷问题。 事务ID(txid) 每当事务开始时,由事务管理器分配一个唯一标识符 事务id(txid)。PostgreSQL的txid是一个32位无符号整数,约为42亿。如果在事务开始后调用内部函数 txid_current(),则返回当前的txid,如下所示。 testdb=# BEGIN; BEGIN test=>

HighGO 1734

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

[转]事务服务浅析

级别: 初级 孙瑛霖 (theyaluriver@163.com), 2002 年 6 月 16 日 事务是一个非常重要的编程概念,使用事务,可以很简单地构造出可靠稳定的应用程序,本文以许多具体的例子介绍了事务服务的概念和事务服务的具体实现。本文共分两部分:第一部分从事务服务整体描述的角度简要介绍了事务服务产生的动机、事务服务的应用和事务服务的功能,其中以具体的例子解释了相关概念和...

denggui7770的博客 250

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

MySQL事务浅析|由浅入深

MySQL事务浅析|由浅入深 很多人都在讲事务,事务是个啥,我感觉我没开事物也没什么事情啊,学事务有必要吗? 今天照旧,本文在一开始将讲解一些入门适合理解的知识,在后面逐层加深,如果对事务有了解,希望知道细节,可以在下面的目录跳一下 文章目录MySQL事务浅析|由浅入深事务是个啥?For Example1例子2 脏写例子3 脏读例子4 不可重复读例子5 幻读并发编程带来的数据库隐患通过对事务的分析,得到了四个特点 ACIDMySQL如何保证事务完好持久性的保证原子性的保证隔离性的保证|MVCCMVCC没错

可乐的博客 4612

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

分布式事务浅析

在本文中,我希望把它们还是统一称为分布式事务,只不过追求强一致性的是`刚性分布式事务`,追求最终一致性的是`柔性分布式事务` 。

qq_39039639的博客 1026

浅析分布式事务2PC、3PC、TCC

很浅显的介绍了一下2PC、3PC、TCC的概念,如有错误还望温柔指正,分布式事务一直都是面试中比较热点的问题,也是进阶高级工程师必备的知识点。

flynetcn的专栏 2230

浅析内存事务

简介

solotzg 2116

Seata 分布式事务的使用和原理浅析

Seata 分布式事务的精简使用教程和原理浅析一、说明二、Seata 简介2.1、Seata 是什么?2.2、Seata 的整体架构2.2.1、主要角色2.2.2、整体架构和工作流程图2.3、Seata 的事务模式2.3.1、Seata 的 AT 事务模式2.4、微服务框架支持2.4.1、事务上下文2.4.2、事务传播2.5、ORM 框架支持2.6、数据库类型支持2.7、SQL 参考三、Seata 通用接入流程3.1、Seata Server 端(TC)3.2、Seata Client 端(TM和RM)3.

Andy's Blog 1554

【Redis】事务浅析

我们知道 Redis 的单个命令是原子性的(比如 get set mget mset),如果涉及到 多个命令的时候,需要把多个命令作为一个不可分割的处理序列,就需要用到事务。 例如用 setnx 实现分布式锁,我们先 set,然后设置对 key 设置 expire, 防止 del 发生异常的时候锁不会被释放,业务处理完了以后再 del,这三个动作我们就希望它们作为一组命令执行。 Redis 的事务有两个特点: 按进入队列的顺序执行 不会受到其他客户端的请求的影响 1.事务的用法 命令 描述

A minor 633

面试官:浅析微服务下保证事务数据一致性的几种方案

1. 从本地事务到分布式事务的演变 如依赖mysql的传统的单体式应用可以通过mysql基于锁+MVCC实现本地事务的ACID特性对上层应用提供一致的数据视图,而不会因为多个事务并发读写而产生脏读、脏写、更新丢失等问题; 本文会贯穿一个相对简单的创建订单的业务场景进行讨论: 存在一个订单服务-OrderService,通过createOrder()对外提供创建订单的功能; 依赖ConsumerService的consumerVerify()进行消费者信用额度的扣除,如果余额>订单金额,则创建成功,否

诗与远方的博客 1940

浅析分布式事务

1、什么是分布式事务 分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。 2、分布式事务的产生的原因 2...

weixin_42956626的博客 268

事务服务浅析(二)

简介 Java TM2 Platform, Enterprise Edition(J2EE)简化了分布式事务管理应用程序的编写。J2EE包括了两套规范,用来支持分布式的事务,一种是Java Transaction API(JTA),另一种是Java Transaction Service(JTS)。JTA是一种高层的,与实现无关的,与协

Freecreator的专栏 1032

redis源码浅析--十八.事务的实现

环境说明:redis源码版本 5.0.3;我在阅读源码过程做了注释,git地址:https://gitee.com/xiaoangg/redis_annotation 如有错误欢迎指正 参考书籍:《redis的设计与实现》 Redis通过MULTI、EXEC、WATCH等命令实现事务。 Redis事务将多个命令打包,然后一次性、按照顺序执行命令请求; 在事务执行期间,服务器不会中断事务而去执行其他客户端请求; 一 事务的实现 1.1事务开始 1.2命令入队 1.3事务队列 ...

王安的博客 550
上一篇: 用于 Web Services 业务事务的 OASIS WS-CAF 方法
下一篇: 事务服务浅析(二)
FreeCreator
博客等级 码龄22年 0粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值