Spring cloud的分布式事务解决方案(txlcn)
Spring cloud的分布式事务解决方案 一、分布式CAP定律 C:Consistency一致性 所有节点访问最新的数据副本。 A:Availability 可用性 当一个节点宕机,不影响数据的读写 P:Partition tolerance 分区容错 如果在数据同步的时限内不能使每个节点数据一致,那就是出现了分区现象,就需要考虑CA之间的优先。
二、LCN事务框架
- txlcn分布式事务框架介绍 锁定事务单元(lock),确认事务模块状态(confirm),通知事务(notify) TX-LCN是事务协调性框架,框架其本身并不操作事务,而是基于对事务的协调从而达到事务一致性的效果。 2.txlcn的三种模式: LCN模式: 原理 LCN模式是通过代理Connection的方式实现对本地事务的操作,然后在由TxManager统一协调控制事务。当本地事务提交回滚或者关闭连接时将会执行假操作,该代理的连接将由LCN连接池管理。 特点 1.该模式对代码的嵌入性为低。 2.该模式仅限于本地存在连接对象且可通过连接对象控制事务的模块。 3.该模式下的事务提交与回滚是由本地事务方控制,对于数据一致性上有较高的保障。
- 该模式缺陷在于代理的连接需要随事务发起方一共释放连接,增加了连接占用的时间。 TCC模式: (1).原理 TCC事务机制相对于传统事务机制(X/Open XA Two-Phase-Commit),其特征在于它不依赖资源管理器(RM)对XA的支持,而是通过对(由业务系统提供的)业务逻辑的调度来实现分布式事务。主要由三步操作,Try: 尝试执行业务、 Confirm:确认执行业务、 Cancel: 取消执行业务。 (2).特点 1.该模式对代码的嵌入性高,要求每个业务需要写三种步骤的操作。
方案: 若采用TX-LCN分布式事务框架,则可以将A模块采用LCN模式、B/C采用TCC模式就能完美解决。 三、框架使用 1.搭建TM 作为一个微服务工程搭建。 配置文件如下: spring.application.name=txlcn-server server.port=8006
#数据库配置(sql文件附在下端) spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://192.168.0.250:3306/tx-manager?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true spring.datasource.username=root spring.datasource.password=****** #redis spring.redis.host=******** spring.redis.port=6379 spring.redis.database=0 spring.redis.timeout=60000
tx-lcn.manager.dtx-time=600000
TxManager Host Ip
tx-lcn.manager.host=127.0.0.1
TxManager端口号
tx-lcn.manager.port=5800 ps: 1).建议使用. Properties配置文件(本人在改成.yml文件时出现错误,读者可以再次尝试)。 2).这里有两个配置 Server.port是工程启动端口。 Manager.port是tx-lcn的管理端口,其他工程配置需要的是此端口。 3).这里还需要配置euraka配置,将此工程注册到注册中心。(略) 4.在启动类上需要加上注解@EnableTransactionManagerServer. Maven引入包: com.codingapi.txlcn txlcn-tm 5.0.2.RELEASE 启动后可以访问:http://127.0.0.1:8006/admin/index.html 默认密码:codingapi 查看控制台 2. 工程中使用
- 在maven中引入包
com.codingapi.txlcn txlcn-tc
- 在启动类上加入@ EnableDistributedTransaction
- 在需要分布式事务的service上加上注解 @LcnTransaction @LcnTransaction可以加入参数propagation=*** 默认为DTXPropagation.REQUIRED 然后在你方法体中调用的fegin接口(这里工程使用的是fegin),另一边也加上@LcnTransaction注解即可。