文档章节

分布式事物

 迈克尔林
发布于 2018/08/20 22:36
字数 1797
阅读 22
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>

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

分布式事物造成的原因:当数据库的单表一年产生超过1000万条数据,就需要考虑到分库分表,这时候就需要操作不止一个数据库了,为了保证各数据库的数据一致,就需要用到分布式事物

事物的四大特性:

原子性:包含在一个事物里面的操作要么全部成功,要么全部失败回滚,成功则必须完全应用到数据库,失败则不能对数据库产生影响

一致性:事物执行前和执行后状态必须一致,事务的执行必须保证系统的一致性。比如转账,a账户有100元,b账户有50元,a给b转了10元,只要事物执行成功,最后a账户有90元b账户一定有60元

 

隔离性:事物于事物之间互相不受影响,事物的中间状态不受其它事物感知

持久性:就是说事物一但执行完成,那么事物对数据库对变更就完全保存在数据库中的

隔离性:当多个线程都开启事务来操作数据库中的数据时,数据库系统要进行隔离操作,以保证各个线程获取数据的准确性。 不考虑事务的隔离性,会产生的几种问题:

01:脏读

是指一个事务处理过程里读取了另一个未提交的事务中的数据,然后使用了这个数据;
例:用户A向用户B转账100元,A通知B查看账户,B发现前确实已到账,而之后无论第二条SQL是否执行,只要该事务部提交,则所有操作都将回滚,当B再次查看账户时就会发现前其实并没有到账。

02:不可重复读
不可重复读是指在一个事务内,多次读取同一个数据,在这个事务还没有结束 ,另一个事务也访问该同一数据,但是由于第二个事务的修改,那么第一个事务两次读取的数据可能不一样,因此称为不可重复读;即同一个事务中原始数据读取不可重复。 注:不可重复读和脏读的区别,脏读是某一个事务读取另一个事务未提交的脏数据; 不可重复读则是读取另一事务修改然后提交自己之前已经读过一次的数据。

03:幻读:
当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行修改,这种数据涉及到表中的全部数据行,同时,第二个事务也对这个表数据进行修改,这个修改是对表中新增/删除一条数据,那么操作第一个事务的用户发现表中的数据还有没修改的数据行,就好像发生了幻觉一样,这就是发生了幻读。
注:幻读和不可重复读都读取另一条已经提交的事务,所不同的是不可重复读查询的都是同一数据项,而幻读针对的是一批数据整体。

数据库的四种隔离级别:

01:Read uncommitted(读未提交):最低级别,任何情况都会发生。
02:Read Committed(读已提交):可避免脏读的发生。
03:Repeatable read(可重复读):可避免脏读、不可重复读的发生。
04:Serializable(串行化):避免脏读、不可重复读,幻读的发生。

注: 四种隔离级别最高:Seralizable级别,最低的是Read uncommitted级别; 级别越高,执行效率就越低; 隔离级别的设置只对当前链接有效,对JDBC操作数据库来说,一个Connection对象相当于一个链接,只对该Connection对象设置的隔离级别只对该connection对象有效,与其它链接connection对象无关。

01:Mysql的默认隔离级别是:可重复读:Repeatable read;

02:oracle数据库中,只支持seralizable(串行化)级别和Read committed();默认的是Read committed级别;

解决方案:数据一致问题是必须解决的,在很多大企业多年前就已经成为突出问题,他们是怎么解决的?有这么几个典型方案:

* a)XA事务方案
* b)柔性事务
* c)基于消息的最终一致
* d)人工订正

方案a,XA协议由Tuxedo首先提出的,并交给X/Open组织,作为资源管理器(数据库)与事务管理器的接口标准。Oracle、Informix、DB2和Sybase等各大数据库厂家都提供对XA的支持。XA协议采用两阶段提交方式来管理分布式事务。最主要缺点是性能差,容易成为业务发展瓶颈,所以国内很少用户采用。

方案b,柔性事务(遵循BASE理论)是指相对于ACID刚性事务而言的,常见的是TCC型事务(Try/Confirm/Cancel)。最主要缺点是业务侵入性太强,需要大量开发工作进行业务改造,给业务升级、运维都带来困难。只适合特定领域,不可能作为通用方案对外大面积铺开。

方案c,常用办法是通过本地消息表完成,也有一些通过事务消息。主要缺点同样是业务侵入强,需要大量额外开发工作,给业务升级、运维都带来困难。还有一个问题是使用场景受限,有些最终一致无法满足的情况,需要人工干预。优点是扩展性好,可以满足日益扩大的业务。

方案d,多数中小企业靠人工订正解决。缺点是运维、支持投入人力大。在业务不是很复杂的情况下能hold住,但业务扩大了就很难应付了。
阿里有个GTS中间件技术相当好用但是好像不开源

 

粉丝 0
博文 2
码字总数 6272
作品 0
私信 提问
加载中
请先登录后再评论。
工作流管理系统--Pegasus WMS

Pegasus (飞马座)工作流管理系统包括一套技术标准工作流程应用程序中执行帮助许多不同的环境中,包括桌面、校园集群、网格、云。它弥补了科学领域和执行环境通过自 动映射到分布式资源的高层工...

匿名
2013/02/24
5.3K
0
律师事务所管理程序--eLawOffice

eLawOffice eLawOffice是第一个在sourceforge上的开源的管理律师事务所的程序,并且也是最完整的。但是eLawOffice特别为意大利会计法律及事物处理方便定制。 这个是一个跨平台的java套件,用...

匿名
2012/10/26
2K
0
分布式处理系统--Apache Giraph

Apache Giraph 是一个可伸缩的分布式迭代图处理系统,灵感来自 BSP (bulk synchronous parallel) 和 Google 的 Pregel. Giraph 区别于其他项目的是开源、基于 Hadoop 的架构等。...

匿名
2013/05/08
2.6K
0
分布式计算框架--DPark

DPark 是 Spark 的 Python 克隆,是一个Python实现的分布式计算框架,可以非常方便地实现大规模数据处理和迭代计算。 DPark 由豆瓣实现,目前豆瓣内部的绝大多数数据分析都使用DPark 完成,正...

Davies
2013/06/06
3.6K
1
J360-cloud SpringCloud系列一:分布式配置服务器ConfigServer

j360开源博客之 ---------------------------------------------------------- J360-Cloud系列 spring-cloud快速入门工程之j360-cloud-all:(欢迎star、fork) https://github.com/xuminwl......

Hi徐敏
2015/10/08
4K
14

没有更多内容

加载失败,请刷新页面

加载更多

连续数据包采集:数据包——硬盘

nBox Recorder是一个网络流量磁盘记录器应用程序。使用nBox Recorder,您可以从实时网络接口以千兆位速率捕获全尺寸的网络数据包,并将其写入文件中。它的设计和开发主要是因为大多数网络安全...

osc_8ki1usvn
30分钟前
0
0
Docker中级篇|深入探究Docker

简介: 深入探究Docker Docker镜像理解 Docker镜像是什么 镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代...

阿里云技术博客
30分钟前
0
0
一口气说出 9种 分布式ID生成方式,面试官有点懵了

一、为什么要用分布式ID? 在说分布式ID的具体实现之前,我们来简单分析一下为什么用分布式ID?分布式ID应该满足哪些特征? 1、什么是分布式ID? 拿MySQL数据库举个栗子: 在我们业务数据量不...

漫话编程
今天
0
0
tiktok如何运营

TK的模式 TK 是字节跳动(Byte Dance)公司原创的短视频社交 App,一家成立 8 年、以数据驱动的技术公司。 我们平时用的今日头条、西瓜视频、悟空问答、抖音等等都是字节跳动的产品。 字节跳...

osc_xs2d5ls9
31分钟前
22
0
《OpenCv视觉之眼》Python图像处理三 :Opencv图像属性、ROI区域获取及通道处理

本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的、不同方法的处理,以达到对图像进行去噪、锐化等...

osc_tjhvpz8x
32分钟前
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部