使用LCN框架解决分布式事物

更多干货

  • 分布式实战(干货)
  • spring cloud 实战(干货)
  • mybatis 实战(干货)
  • spring boot 实战(干货)
  • React 入门实战(干货)
  • 构建中小型互联网企业架构(干货)
  • python 学习持续更新
  • ElasticSearch 笔记
  • kafka storm 实战 (干货)

一、概述

事物特性(ACID)

原子性(A)

所谓的原子性就是说,在整个事务中的所有操作,要么全部完成,要么全部不做,没有中间状态。对于事务在执行中发生错误,所有的操作都会被回滚,整个事务就像从没被执行过一样。

一致性(C)

事务的执行必须保证系统的一致性,就拿转账为例,A有500元,B有300元,如果在一个事务里A成功转给B50元,那么不管并发多少,不管发生什么,只要事务执行成功了,那么最后A账户一定是450元,B账户一定是350元。

隔离性(I)

所谓的隔离性就是说,事务与事务之间不会互相影响,一个事务的中间状态不会被其他事务感知。

持久性(D)

所谓的持久性,就是说一单事务完成了,那么事务对数据所做的变更就完全保存在了数据库中,即使发生停电,系统宕机也是如此。 这种特性 简称 刚性事物

二、分布式事物

1、分布式事物产生原因

在分布式系统,都会垂直拆分数据库,分为支付数据库、订单数据库、积分数据库、优惠全数据库等,业务组成,分为多个数据源,会产生分布式事物问题。

2、分布式理论知识

CPA理论

CAP由Eric Brewer在2000年PODC会议上提出[1][2],是Eric Brewer在Inktomi[3]期间研发搜索引擎、分布式web缓存时得出的关于数据一致性(consistency)、服务可用性(availability)、分区容错性(partition-tolerance)的猜想:

  • 数据一致性(consistency):如果系统对一个写操作返回成功,那么之后的读请求都必须读到这个新数据;如果返回失败,那么所有读操作都不能读到这个数据,对调用者而言数据具有强一致性(strong consistency) (又叫原子性 atomic、线性一致性 linearizable consistency)[5]

  • 服务可用性(availability):所有读写请求在一定时间内得到响应,可终止、不会一直等待

  • 分区容错性(partition-tolerance):在网络分区的情况下,被分隔的节点仍能正常对外服务

Base理论

BASE理论是指,Basically Available(基本可用)、Soft-state( 软状态/柔性事务)、Eventual Consistency(最终一致性)。是基于CAP定理演化而来,是对CAP中一致性和可用性权衡的结果。核心思想:即使无法做到强一致性,但每个业务根据自身的特点,采用适当的方式来使系统达到最终一致性。

  • 1、基本可用:指分布式系统在出现故障的时候,允许损失部分可用性,保证核心可用。但不等价于不可用。比如:搜索引擎0.5秒返回查询结果,但由于故障,2秒响应查询结果;网页访问过大时,部分用户提供降级服务,等。

  • 2、软状态:软状态是指允许系统存在中间状态,并且该中间状态不会影响系统整体可用性。即允许系统在不同节点间副本同步的时候存在延时。

  • 3、最终一致性: 系统中的所有数据副本经过一定时间后,最终能够达到一致的状态,不需要实时保证系统数据的强一致性。最终一致性是弱一致性的一种特殊情况。BASE理论面向的是大型高可用可扩展的分布式系统,通过牺牲强一致性来获得可用性。ACID是传统数据库常用的概念设计,追求强一致性模型。

  • ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。

3、柔性事务和刚性事务

柔性事务满足BASE理论(基本可用,最终一致)

刚性事务满足ACID理论

本文主要围绕分布式事务当中的柔性事务的处理方式进行讨论。

柔性事务分为

  • 1、两阶段型
  • 2、补偿型
  • 3、异步确保型
  • 4、最大努力通知型几种。 由于支付宝整个架构是SOA架构,因此传统单机环境下数据库的ACID事务满足了分布式环境下的业务需要,以上几种事务类似就是针对分布式环境下业务需要设定的。

4、什么是XA接口

XA是一个分布式事务协议,由Tuxedo提出。XA中大致分为两部分:事务管理器和本地资源管理器。其中本地资源管理器往往由数据库实现,比如Oracle、DB2这些商业数据库都实现了XA接口,而事务管理器作为全局的调度者,负责各个本地资源的提交和回滚。XA实现分布式事务的原理如下:

5、什么是Jta

作为java平台上事务规范JTA(Java Transaction API)也定义了对XA事务的支持,实际上,JTA是基于XA架构上建模的,在JTA 中,事务管理器抽象为javax.transaction.TransactionManager接口,并通过底层事务服务(即JTS)实现。像很多其他的java规范一样,JTA仅仅定义了接口,具体的实现则是由供应商(如J2EE厂商)负责提供,目前JTA的实现主要由以下几种:

  • 1.J2EE容器所提供的JTA实现(JBoss)
  • 2.独立的JTA实现:如JOTM,Atomikos.这些实现可以应用在那些不使用J2EE应用服务器的环境里用以提供分布事事务保证。如Tomcat,Jetty以及普通的java应用。

6、基于XA协议的两阶段提交

所谓的两个阶段是指:第一阶段:准备阶段(投票阶段)和第二阶段:提交阶段(执行阶段)。

XA一般由两阶段完成,称为two-phase commit(2PC)。

  • 阶段一为准备阶段,即所有的参与者准备执行事务并锁住需要的资源。参与者ready时,向transaction manager汇报自己已经准备好。

  • 阶段二为提交阶段。当transaction manager确认所有参与者都ready后,向所有参与者发送commit命令。 如下图所示:

XA的性能问题

XA的性能很低。一个数据库的事务和多个数据库间的XA事务性能对比可发现,性能差10倍左右。因此要尽量避免XA事务,例如可以将数据写入本地,用高性能的消息系统分发数据。或使用数据库复制等技术。 只有在这些都无法实现,且性能不是瓶颈时才应该使用XA。

7、分布式事物解决方案

分布式事物问题,在互联网公司比较常见,例如“”分布式事物解决方案 可以使用全局事物2pc(两段提交协议)、3pc(三段提交协议),消息中间件、tcc、gts、提供回滚接口、分布式数据库

LCN 核心采用3PC+TCC补偿机制

三、使用LCN框架解决分布式事物

什么是LCN框架

LCN分布式事务框架v3.0 https://www.txlcn.org

1、框架特点

  • 支持各种基于spring的db框架
  • 兼容SpringCloud、Dubbo
  • 使用简单,低依赖,代码完全开源
  • 基于切面的强一致性事务框架
  • 高可用,模块可以依赖Dubbo或SpringCloud的集群方式做集群化,TxManager也可以做集群化
  • 支持本地事务和分布式事务共存
  • 事务补偿机制,服务故障或挂机再启动时可恢复事务

2、LCN框架原理

参考网站 https://github.com/codingapi/tx-lcn/wiki/LCN%E5%8E%9F%E7%90%86

3、核心步骤

创建事务组

是指在事务发起方开始执行业务代码之前先调用TxManager创建事务组对象,然后拿到事务标示GroupId的过程。

添加事务组

添加事务组是指参与方在执行完业务方法以后,将该模块的事务信息添加通知给TxManager的操作。

关闭事务组

是指在发起方执行完业务代码以后,将发起方执行结果状态通知给TxManager的动作。当执行完关闭事务组的方法以后,TxManager将根据事务组信息来通知相应的参与模块提交或回滚事务。

使用LCN框架解决分布式事物相关推荐

  1. 如何使用消息队列解决分布式事物?

    作者:孤独烟 来自:打杂的ZRJ 引言 这篇说说分布式事务的问题.企业现在的架构都由传统的架构转向了微服务架构,如下图所示: 那么,都不可避免的会遇到跨数据库调用的,分布式事务问题! 目前,业内解决分 ...

  2. LCN分布式事务框架解决分布式事务一致性问题

    LCN分布式事务框架 框架介绍 LCN分布式事务框架其本身并不创建事务,而是基于对本地事务的协调从而达到事务一致性的效果. 核心步骤 创建事务组 是指在事务发起方开始执行业务代码之前先调用TxMana ...

  3. 分布式事物(2PC,3PC,CAP,柔性与刚性事物,LCN)

    转载自  https://blog.csdn.net/lizhen1114/article/details/80110317 分布式事物解决方案 分布式事物产生原因:主要产生与在微服务系统中,数据库的 ...

  4. 面试必备的分布式事物方案

    四月初,去面试了本市的一家之前在做办公室无人货架的公司,虽然他们现在在面临着转型,但是对于我这种想从传统企业往互联网行业走的孩子来说,还是比较有吸引力的. 在面试过程中就提到了分布式事物问题.我又一次 ...

  5. 教你舞动手指速写一个Seata-AT框架解决棘手的分布式事务问题

    相信大家对于事务问题都不陌生,在传统的单库环境下开发,咱们可依赖于MySQL所提供的事务机制,来确保单个事务内的一组操作,要么全部执行成功,要么全部执行失败. 例如一个下单业务中,假设由「扣减库存.新 ...

  6. 分布式事物框架--EasyTransaction的入门介绍

    分布式事物框架--EasyTransaction的入门介绍 柔性事务,分布式事务,TCC,SAGA,可靠消息,最大努力交付消息,事务消息,补偿,全局事务,soft transaction, distr ...

  7. 分布式事物框架Easy-Transaction--使用入门介绍

    分布式事物框架Easy-Transaction--使用入门介绍 The origin This framework is inspired by a PPT (<大规模SOA系统的分布式事务处理 ...

  8. 分布式事物框架TCC-Transaction使用教程

    分布式事物框架TCC-Transaction使用教程 本指南适用于tcc-transaction 1.2.x版本.tcc-transaction 1.1.x版的使用指南请参考:使用指南1.1.x 1. ...

  9. 基于消息中间件解决分布式事务的开源框架Myth

    基于消息中间件的解决分布式事务框架:https://github.com/yu199195/myth 1.rpc框架支持 : dubbo,motan,springcloud. 2.消息中间件支持 : ...

最新文章

  1. 34补1-2_3 HA Cluster基础及heartbeat实现HA
  2. shell中强制声明变量
  3. Linux开启路由转发功能(透明代理环境搭建)
  4. androidEditTextinputType及android:imeOptions=”actionDone”(转)
  5. IDEA 初始配置教程
  6. SharePoint Calendar Webparts
  7. 小程序根据手机机型设置自定义底部导航距离
  8. mysql查询包含字符串的记录,MYSQL中利用select查询某字段中包含以逗号分隔的字符串的记录方法...
  9. mysql怎么添加约束成绩_mysql怎么添加约束?
  10. 使用spring ioc基于纯xml配置模拟crud
  11. 【Java基础笔记】ASCll码表
  12. 一名Android程序员的自我修养
  13. 2019年系统架构设计师考试--从备考到拿证
  14. 解决无法删除文件夹的情况:文件夹正在使用,操作无法完成,因为其中的文件,或文件夹已在另一个程序中打开...
  15. 初学素描需要准备的工具有哪些?新手必看!
  16. 天润融通网络电话配置手册
  17. 高性能网站 首屏渲染速度
  18. MLOps极致细节:17. Azure ML Pipeline(机器学习管道),模型训练,打包和注册
  19. ubuntu16.04下载安装百度网盘(实测可行)
  20. 华为200万年薪刷屏背后,待满四年的博士不到六成

热门文章

  1. DTW学习(dynamic time warping)——思想、代码实现
  2. 为什么css放头部、js放尾部
  3. 华为分布式文件存储服务器配置,分布式存储服务器
  4. 使用Python,OpenCV对图像进行亚像素点检测,并拟合椭圆进行绘制
  5. 程序员的工资高,到底程序员的工资有多高?那些你不了解的程序员
  6. re-id #issue
  7. linux内核Kmalloc - GFP_ATOMIC - GFP_KERNEL - GFP_USER
  8. 1024程序员节,向改变世界的程序员致敬
  9. 【电设】常见线性稳压电源设计 - 基本并联稳压电源-稳压二极管
  10. Controller层各注解总结