分布式事务 原理及使用范例一则

摘要:在软件开发和数据库操作中,经常出现需要共同进退的情况,要么一起成功,要么一起失败。

假设案例:A向B转账3000元rmb。

update Account set Amount=Amount-3000 where name=‘a‘

update account set Amount=Amount+3000 where name=‘b‘

场景:假设在第1行代码执行成功,第2行代码还未执行的情况下。未继续执行。

结果:A的钱没了!B没收到钱!

此时推荐使用分布式事务来解决这类问题。

解决方案

应该实现原子性:要么全部成功、要么全部失败(回滚)

事务:

事务(Transaction)的特征是“原子性”,也就是“要么全部成功,要么全部失败”。事务实现还是有很多方法,最常见的就是使用链接相关SqlTransaction

SqlTransaction

优点:1 不需要做客户端、服务器端的配置;2 无须启用事务协调服务(MSDTC)

缺点:无法实现分布式事务、嵌套事务、编写麻烦。

TransactionScope用来实现分布式事务(可以跨数据库、跨机器操作)的步骤

1 Windows服务中开启MSDTC(Distributed Transaction Coordinator),并且启动类型改为“自动”。注意:需要在ADO.NET端和数据库端上需要都进行相同操作。

2 项目添加对System.Transactions的引用

代码范例:

//包起来就会两者一起。一起成功,或者一起失败
using(TransactionScope ts=new TransactionScope())
{
    "update Account set Amount=Amount-3000 where name='a'";//从A账户扣钱的操作
    "update account set Amount=Amount+3000 where name='b'"//向B账户增加钱的操作
    ts.Complete();//忘记这句话,两个都插入失败
}
时间: 2024-08-30 09:55:54

分布式事务 原理及使用范例一则的相关文章

[java][db]JAVA分布式事务原理及应用

JTA(Java Transaction API)允许应用程序执行分布式事务处理--在两个或多个网络计算机资源上访问并且更新数据.JDBC驱动程序的JTA支持极大地增强了数据访问能力. 本文的目的是要提供一个关于的Java事务处理API(JTA)的高级的概述,以及与分布式事务相关的内容.一个事务处理定义了一个工作逻辑单元,要么彻底成功要么不产生任何结果. 一个分布式事务处理只是一个在两个或更多网络资源上访问和更新数据的事务处理,因此它在那些资源之间必然是等价的.在本文中,我们主要关心的是如何处理

分布式事务原理解析

1. 分布式事务原理解析 1.1. TCC分布式事务 了解过TCC分布式事务的都知道它有三个阶段:try,confirm,cancel,但很多文章就只有原理图,和对原理图的解释,看一遍也留不下印象,这里用实际场景举个例子,说明TCC分布式事务原理 try阶段:假设我们又订单系统,它需要调用库存和积分系统,try阶段我们进行的是预处理,比如下单1个商品,在try操作中,我们在库存表设置个冻结字段,表示冻结1个商品,商品的存量先不扣除,而积分表同样添加个预增加积分字段,添加个预积分比如10 conf

MQ关于实现最终一致性分布式事务原理解析

本文讲述阿里云官方文档中关于通过MQ实现分布式事务最终一致性原理 概念介绍 事务消息:消息队列 MQ 提供类似 X/Open XA 的分布式事务功能,通过消息队列 MQ 事务消息能达到分布式事务的最终一致. 半事务消息:暂不能投递的消息,发送方已经成功地将消息发送到了消息队列 MQ 服务端,但是服务端未收到生产者对该消息的二次确认,此时该消息被标记成“暂不能投递”状态,处于该种状态下的消息即半事务消息. 消息回查:由于网络闪断.生产者应用重启等原因,导致某条事务消息的二次确认丢失,消息队列 MQ

JAVA分布式事务原理及应用(转)

JTA(Java Transaction API)允许应用程序执行分布式事务处理--在两个或多个网络计算机资源上访问并且更新数据.JDBC驱动程序的JTA支持极大地增强了数据访问能力. 本文的目的是要提供一个关于的Java事务处理API(JTA)的高级的概述,以及与分布式事务相关的内容.一个事务处理定义了一个工作逻辑单元,要么彻底成功要么不产生任何结果. 一个分布式事务处理只是一个在两个或更多网络资源上访问和更新数据的事务处理,因此它在那些资源之间必然是等价的.在本文中,我们主要关心的是如何处理

分布式事务原理与实践

事务简介 事务的核心是锁和并发,采用同步控制的方式保证并发的情况下性能尽可能高,且容易理解.这种方式的优势是方便理解:它的劣势是性能比较低.计算机可以简单的理解为一个标准的打字机,尽管看起来计算机可以并行处理很多事情,但实际上每个CPU单位时间内只能做一件事,要么读取数据.要么计算数据.要么写入数据,所有的任务都可以看成这三件事的集合.计算机的这种特性引出了一个问题:当多个人去读.算.写操作时,如果不加访问控制,系统势必会产生冲突.而事务相当于在读.算.写操作之外增加了同步的模块,进而保证只有一

大厂面试必知必会:图解分布式事务实现原理

问题场景 什么是事务? 事务是数据库从一个稳定状态变迁到另一个稳定状态的保证,具备 ACID 这 4 个特性: 原子性(Atomicity):一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节.事务在执行过程中发生错误,会被回滚到事务开始前的状态. 一致性(Consistency):在事务开始之前和事务结束以后,数据库的完整性限制没有被破坏. 隔离性(Isolation):两个事务的执行是互不干扰的,两个事务时间不会互相影响. 持久性(Durability):在事务完成以

OceanBase 1.0 的分布式事务

OceanBase 1.0 的分布式事务 数据库的功能强大而繁杂,其中,“事务(Transaction)”是使用者不自觉就会用到的功能.作为开发数据库的工程师,我们是倾注了大量的精力和时间在事务这个功能上,并且深知数据库系统实现事务是付出了很大代价的.这代价不仅包括数据库软件开发的工作,而且还包括数据库运行过程中的代价.换句话说,在其他情况不变的时候,如果数据库放弃事务功能,能获得更好的性能.在数据库软件刚出现时,并没有事务这个功能,但这种情况下,使用数据库开发软件很多时候无法保证数据的正确性和

分布式事务以及锁

标题格 1.非公平锁 2.TCC分布式事务原理 1.非公平锁 在加锁过程,线程1运行,线程2处于等待队列. 线程1运行结束,结果线程3抢先于线程2进行.这就是非公平锁的简单含义. 在ReentrantLock lock = new ReentrantLock()默认的就是非公平锁,构造函数中加入true:ReentrantLock lock = new ReentrantLock(true). 公平锁原则就是线程3就绪后,会先查看等待队列是否有线程,有就排队. 2.TCC分布式事务原理 使用sp

RabbitMQ解决分布式事务

案例:经典案例,以目前流行点外卖的案例,用户下单后,调用订单服务,让后订单服务调用派单系统通知送外卖人员送单,这时候订单系统与派单系统采用MQ异步通讯. RabbitMQ解决分布式事务原理: 采用最终一致性原理.需要保证以下三要素1.确认生产者一定要将数据投递到MQ服务器中(采用MQ消息确认机制)2.MQ消费者消息能够正确消费消息,采用手动ACK模式,使用不补偿机制(注意重试幂等性问题)3.如何保证第一个事务先执行,采用补偿机制(补单机制),在创建一个补单消费者进行监听,如果订单没有创建成功,进