福田网站设计公司哪家好,最炫表白网站html5源码,滁州市大滁城建设网站,网站建设推进会介绍
阿里巴巴的 Seata#xff08;Service Aligned Transaction Alternative#xff09;是一个开源的分布式事务解决方案#xff0c;旨在解决微服务架构中跨服务、跨数据库的事务一致性问题。它可以帮助开发者管理分布式系统中的全局事务#xff0c;确保在多个服务之间的事…介绍
阿里巴巴的 SeataService Aligned Transaction Alternative是一个开源的分布式事务解决方案旨在解决微服务架构中跨服务、跨数据库的事务一致性问题。它可以帮助开发者管理分布式系统中的全局事务确保在多个服务之间的事务一致性。
引入依赖
!--seata--
dependencygroupIdio.seata/groupIdartifactIdseata-spring-boot-starter/artifactIdversion1.6.1/version
/dependency配置
每个服务中引入
seata:registry: #注册中心的配置type: nacos #注册中心类型为nacosnacos:server-addr: 172.23.4.128:8848 #服务注册地址namespace: #命名空间group: DEFAULT_GROUP #默认DEFAULT_GROUPapplication: seata-server #服务名称tx-service-group: test #事务组名称service:vgroup-mapping: #事务与组的映射关系test: default XA模式 阶段1预提交阶段 参与事务的各个资源如数据库会锁定事务需要的资源并准备执行。此时Seata 会询问每个参与者是否可以提交参与者进行本地准备并响应是否可以提交。 阶段2提交或回滚阶段 如果所有参与者都可以提交即没有遇到错误Seata 会发出全局提交请求否则发出回滚请求。 事务一致性采用 XA 协议保证跨多个资源的事务的一致性确保事务在分布式环境中能实现原子性操作。 资源协调Seata 作为事务协调者协调所有参与资源的提交与回滚确保最终一致性。 回滚与补偿若事务失败Seata 会确保通过回滚来恢复到事务开始前的状态。 支持的数据库Seata XA模式支持通过 XA 协议的数据库常见的如 MySQL、Oracle 等前提是这些数据库支持 XA 协议。
缺点 性能开销XA 模式的两阶段提交协议需要多次通信和锁定资源可能会导致性能下降特别是在大规模、高并发的场景中。 支持的资源类型较少XA 协议主要支持数据库等传统资源对于一些新型的分布式资源如消息队列、缓存等可能支持不够好或者实现较复杂。
开启XA模式 在全局配置中添加
seata:data-source-proxy-mode: XA #开启XA模式开启事务 GetMapping(/pay)GlobalTransactionalpublic SaResult pay(){//假设余额扣减String userIdStpUtil.getLoginIdAsString();LambdaUpdateWrapperUser updateWrapper new LambdaUpdateWrapper();updateWrapper.eq(User::getId, userId) // 根据用户ID进行查询.setSql(play_num play_num - 1); // 扣减play_numberuserService.update(updateWrapper);if(true){ //模拟报错int i 1 / 0;}goodsClient.delete();//删除return SaResult.ok();}相关的服务也需要 Transient DeleteMapping(/delete)Transientpublic Boolean delete(){return goodsService.removeById(1);}这里进行了两次SQL一次是自己的user库一个是远程调用的微服务。如果其中一个报错了都会保证数据的一致性。 AT模式
主推的是AT模式AT模式同样是分阶段提交的事务模型缺弥补了XA模型中资源锁定周期过长的缺陷。AT模式会导致几毫秒的数据不一致因为立马提交了SQL语句。 运行步骤 阶段一注册事务分支-记录undo-log(数据快照) -执行业务SQL并提交 阶段二删除undo-log(数据快照)
因此如果使用AT模式需要给每一个微服务都添加undo-log表。 相关文档https://seata.apache.org/zh-cn/docs/v1.5/overview/what-is-seata 创建undo-log
CREATE TABLE undo_log (id bigint(20) NOT NULL AUTO_INCREMENT,branch_id bigint(20) NOT NULL,xid varchar(100) NOT NULL,context varchar(128) NOT NULL,rollback_info longblob NOT NULL,log_status int(11) NOT NULL,log_created datetime NOT NULL,log_modified datetime NOT NULL,PRIMARY KEY (id),UNIQUE KEY ux_undo_log (xid,branch_id)
) ENGINEInnoDB AUTO_INCREMENT1 DEFAULT CHARSETutf8;修改AT模式 data-source-proxy-mode: AT 去除默认就是AT模式
seata:data-source-proxy-mode: ATSQL日志 事务开始时会先记录快照如果报错就会回滚。
如何选择模式
如果对业务一致性高的话选择XA模式会对数据库进行锁表对于性能要求选择AT模式AT模式会导致几毫秒的数据不一致因为立马提交了SQL语句。