【学习打卡】第10天 多端全栈项目实战
课程名称:多端全栈项目实战,大型商业级代驾业务全流程落地
课程章节:第二章
主讲老师:神思者
课程内容:
1. 分布式事务
2.什么时候使用分布式事务?
3.TX-LCN分布式事务
课程收获:
接第五天得内容 在写一些 关于微服务项目得看法
1.分布式事务
两个服务要纳入到同一个事务之下,这就需要用到分布式事务
在分布式系统中,事务参与者在不同的分布式节点上或事务操作的数据源不是同一个,这些情况产生的事务都叫做分布式事务
举例:
项目A实现Tb_item表新增、项目B实现tb_item_param新增,现在需要实现商品新增,需要把项目A和项目B两个项目新增的方法组成一个事务,这个事务就是分布式事务。
项目中向MySQL做新增,同时还需要向Redis或MongoDB执行新增,希望执行MySQL或Redis或MongoDB时如果出现异常进行事务回滚,这种情况也成为分布式事务
2. 什么时候使用分布式事务?
1个事务(本地事务)就是一系列SQL语句的集合,只要在执行过程中一条SQL出错就会导致整个事务失败,回滚到原点。而在分布式系统中存在多模块完成一次业务。那么就存在一个业务由多模块操作同一个数据源
Seata :
Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。
TX-LCN:
LCN模式是通过代理JDBC中Connection的方式实现对本地事务的操作,然后在由TxManager统一协调控制事务。当本地事务提交回滚或者关闭连接时将会执行假操作,该代理的连接将由LCN连接池管理。
TX-LCN和Seata两种分布式事务各有优点。 LCN是采取代理数据源的模式,再根据发起方执行本地事务的结果进行回滚或者提交,可以保证强一致性,但有可能发生死锁的现象。 Seata采取的是根据undo_log日志表,进行逆向生成sql语句,来解决回滚。Seata能保证最终一致性,但可能造成脏读。其实所有的分布式事务方案都不完美, 一致性、可用性、分区容忍性,只能同时满足两个。(这是老师原话 但由于对于这俩都不是很了解 所以下次仔细研究一下)
3.TX-LCN分布式事务
LCN模式下,需要TM(TX-Manager)程序来协调XA事务,所以我们要创建一个Java项目来充当TM节点。并且还要在MySQL节点中创tx-manager
逻辑库导入数据表。
TM节点的启动类必须要加上@EnableTransactionManagerServer
注解。
@SpringBootApplication@EnableTransactionManagerServerpublic class HxdsTmApplication { public static void main(String[] args) { SpringApplication.run(HxdsTmApplication.class, args); }}
TM节点的配置文件
spring.application.name=TransactionManager server.port=7970 spring.datasource.driver-class-name=com.mysql.数据库 spring.datasource.url=jdbc:mysql://000.000.000.000:12005/tx-manager?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true spring.datasource.username=root spring.datasource.password=abc123456spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect spring.jpa.hibernate.ddl-auto=updatespring.redis.host=localhostspring.redis.port=6379 spring.redis.password=密码 spring.redis.database=10 tx-lcn.manager.admin-key=密码 tx-lcn.manager.host=127.0.0.1 tx-lcn.manager.port=8070 mybatis.configuration.map-underscore-to-camel-case=true mybatis.configuration.use-generated-keys=true
在微服务的业务层,需要使用LCN分布式事务的时候,我们就加上@Transactional
和@LcnTransaction
两个注解,这样Service调用DAO执行的数据库操作就被纳入到全局事物当中。
在微服务项目的YML文件里面还要设置连接TM节点的配置。
tx-lcn: client: manager-address: 127.0.0.1:8070
共同学习,写下你的评论
评论加载中...
作者其他优质文章