手机网站建设在哪儿深交所大宗交易平台
- 作者: 五速梦信息网
- 时间: 2026年04月20日 08:45
当前位置: 首页 > news >正文
手机网站建设在哪儿,深交所大宗交易平台,动画设计的大学排名,asp.net 网站开发项目化教程Seata 是一款开源的分布式事务解决方案#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式#xff0c;为用户打造一站式的分布式解决方案。 全文参考文献#xff1a;中文文档 TC (Transaction Coordinator) - 事务…Seata 是一款开源的分布式事务解决方案致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式为用户打造一站式的分布式解决方案。 全文参考文献中文文档 TC (Transaction Coordinator) - 事务协调者 维护全局和分支事务的状态驱动全局事务提交或回滚。 TM (Transaction Manager) - 事务管理器 定义全局事务的范围开始全局事务、提交或回滚全局事务。 RM (Resource Manager) - 资源管理器 管理分支事务处理的资源与TC交谈以注册分支事务和报告分支事务的状态并驱动分支事务提交或回滚。 1.AT (Auto Transaction) 常用】 图片来源于百度 百度安全验证 AT模式是无侵入的分布式事务解决方案适用于不希望对业务进行改造的场景几乎0学习成本。 AT模式支持的数据库有MySQL、Oracle、PostgreSQL、 TiDB、MariaDB。 1.1 使用前提 基于支持本地 ACID 事务的关系型数据库。 Java 应用通过 JDBC 访问数据库。 1.2 原理机制 一阶段 业务数据和回滚日志记录在同一个本地事务中提交释放本地锁和连接资源。 二阶段 提交异步化非常快速地完成。 回滚通过一阶段的回滚日志进行反向补偿。 1.3 写隔离 一阶段本地事务提交前需要确保先拿到全局锁 。拿不到全局锁 不能提交本地事务。拿全局锁的尝试被限制在一定范围内超出范围将放弃并回滚本地事务释放本地锁。 1.4 读隔离 在数据库本地事务隔离级别读已提交Read Committed或以上的基础上SeataAT 模式的默认全局隔离级别是读未提交Read Uncommitted 。 1.5 详细执行流程 一阶段 1解析SQL得到SQL的类型表条件等相关的信息。 2查询前镜像根据解析得到的条件信息生成查询语句定位数据。 3得到前镜像业务数据的更新前数据。 4执行业务SQL执行sql。 5查询后镜像根据解析得到的条件信息生成查询语句定位数据。 6得到后镜像业务数据的更新后数据。 7插入回滚日志把前后镜像数据以及业务 SQL 相关的信息组成一条回滚日志记录插入到 UNDO_LOG 表中。 8提交前向TC注册分支申请全局锁 。 9本地事务提交(业务数据的更新和前面步骤中生成的 UNDO LOG 一并提交)。 10将本地事务提交的结果上报给 TC。 二阶段-回滚 收到 TC 的分支回滚请求开启一个本地事务执行如下操作。 1通过 XID 和 Branch ID 查找到相应的 UNDO LOG 记录。 2数据校验拿 UNDO LOG 中的后镜与当前数据进行比较如果有不同说明数据被当前全局事务之外的动作做了修改。这种情况需要根据配置策略来做处理。 3根据UNDO LOG中的前镜像和业务SQL的相关信息生成并执行回滚的语句。 4提交本地事务。并把本地事务的执行结果即分支事务回滚的结果上报给 TC。 二阶段-提交 收到 TC 的分支提交请求把请求放入一个异步任务的队列中马上返回提交成功的结果给 TC。 1)异步任务阶段的分支提交请求将异步和批量地删除相应 UNDO LOG 记录。 1.6 优缺点 优点 一阶段完成后提交事务快速释放资源性能比较好。 利用全局锁实现读写隔离。 实现简单对业务代码零入侵。 缺点 两阶段期间属于弱一致阶段最终一致。 由于增加快照写入影响效率整体强于XA。 依赖数据库。 1.7 Demo 详细代码参考Springboot 集成 Seata-CSDN博客 代码使用上与XA模式相同只需调整配置的的模式就可以。 seata:data-source-proxy-mode: AT # 开启AT事务 2.TCC(Try、Confirm、Cancel) TCC 模式是高性能分布式事务解决方案适用于核心系统等对性能有很高要求的场景。 TCC 模式是指支持把 自定义 的分支事务纳入到全局事务的管理中【强代码入侵】。 TCC模式不依赖数据源(1.4.2及之前)1.4.2版本之后增加了TCC防悬挂措施需要数据源支持。 2.1 原理机制 一阶段 prepare 行为 二阶段 commit 或 rollback 行为 2.2 详细执行流程 一阶段 prepare 行为调用自定义的 prepare 逻辑。 二阶段 commit 行为调用自定义的 commit 逻辑。 二阶段 rollback 行为调用自定义的 rollback 逻辑。 2.3 优缺点 优点 一阶段完成后提交事务快速释放资源性能比较好。 无需要快照、无需全局锁性能好。 不依赖数据库本人使用1.3.0不需要1.4.2之后需要使用补偿机制。 缺点 强代码入侵需要手动写try confirm cancel。 软状态最终一致。 需要考虑失败尝试同时要处理好幂等等问题。 2.4 Demo 详细代码参考Springboot 集成 Seata-CSDN博客 LocalTCC //1.开启TCC事务 TwoPhaseBusinessAction // 2.标记TCC模式注解在try接口上并且声明confirm、cancel接口 订单服务代码调整 RestController RequestMapping(/orderTbl) public class OrderTblController {Resourceprivate OrderTblService orderTblService;Resourceprivate OrderService orderService;PostMapping(/add/{userId}/{money})public CxResultBoolean add(PathVariable(userId) String userId, PathVariable(money) Integer money) {//return CxResult.success(orderTblService.add(userId, money));return CxResult.success(orderService.addOrder(userId, money));}}Service public class OrderService {Resourceprivate OrderTccService orderTccService;DubboReferenceprivate AccountProviderService accountProviderService;GlobalTransactionalpublic Boolean addOrder(String userId, Integer money) {accountProviderService.addRecord(userId, money);orderTccService.prepareAdd(userId, money);if (money 10000) {throw new BusinessException(ErrorMsg.COMMON_ERROR_1);}return Boolean.TRUE;}}LocalTCC //1.开启TCC事务 public interface OrderTccService {// 2.标记TCC模式注解在try接口上并且声明confirm、cancel接口TwoPhaseBusinessAction(name orderTcc, commitMethod commit, rollbackMethod rollback)Boolean prepareAdd(BusinessActionContextParameter(paramName userId) String userId,BusinessActionContextParameter(paramName money) Integer money);boolean commit(BusinessActionContext businessActionContext);boolean rollback(BusinessActionContext businessActionContext);}Service Slf4j public class OrderTccServiceImpl implements OrderTccService {// 模拟数据库存储HashMapString, Integer map Maps.newHashMap();Resourceprivate OrderTblService orderTblService;Overridepublic Boolean prepareAdd(String userId, Integer money) {String xid RootContext.getXID();OrderTbl orderTbl new OrderTbl();orderTbl.setUserId(userId);orderTbl.setMoney(money);orderTblService.save(orderTbl);map.put(xid, orderTbl.getId());log.info(prepareAdd xid {} orderId {} userid {} money {}, xid, orderTbl.getId(), userId, money);return Boolean.TRUE;}OverrideTransactionalpublic boolean commit(BusinessActionContext businessActionContext) {log.info(commit xid {}, businessActionContext.getXid());return null ! map.remove(businessActionContext.getXid()) ? true : false;}OverrideTransactionalpublic boolean rollback(BusinessActionContext businessActionContext) {log.info(rollback xid {}, businessActionContext.getXid());Integer orderId map.get(businessActionContext.getXid());orderTblService.removeById(orderId);return true;}}账户服务代码调整 DubboService public class AccountProvider implements AccountProviderService {Resourceprivate AccountTblService accountTblService;Resourceprivate AccountTccService accountTccService;OverrideGlobalTransactionalpublic void addRecord(String userId, Integer money) { // AccountTbl accountTbl new AccountTbl(); // accountTbl.setUserId(userId); // accountTbl.setMoney(money); // accountTblService.save(accountTbl);accountTccService.prepareAdd(userId, money);}}LocalTCC //1.开启TCC事务 public interface AccountTccService {// 2.标记TCC模式注解在try接口上并且声明confirm、cancel接口TwoPhaseBusinessAction(name accountTcc, commitMethod commit, rollbackMethod rollback)Boolean prepareAdd(BusinessActionContextParameter(paramName userId) String userId,BusinessActionContextParameter(paramName money) Integer money);boolean commit(BusinessActionContext businessActionContext);boolean rollback(BusinessActionContext businessActionContext);}Service Slf4j public class AccountTccServiceImpl implements AccountTccService {// 模拟数据库存储HashMapString, Integer map Maps.newHashMap();Resourceprivate AccountTblService accountTblService;Overridepublic Boolean prepareAdd(String userId, Integer money) {String xid RootContext.getXID();AccountTbl accountTbl new AccountTbl();accountTbl.setUserId(userId);accountTbl.setMoney(money);accountTblService.save(accountTbl);map.put(xid, accountTbl.getId());log.info(prepareAdd xid {} accountId {} userid {} money {}, xid, accountTbl.getId(), userId, money);return Boolean.TRUE;}OverrideTransactionalpublic boolean commit(BusinessActionContext businessActionContext) {log.info(commit xid {} , businessActionContext.getXid());return null ! map.remove(businessActionContext.getXid()) ? true : false;}OverrideTransactionalpublic boolean rollback(BusinessActionContext businessActionContext) {log.info(rollback xid {} , businessActionContext.getXid());Integer accountId map.get(businessActionContext.getXid());accountTblService.removeById(accountId);return true;} }3.SAGA Saga 模式是长事务解决方案适用于业务流程长且需要保证事务最终一致性的业务系统Saga 模式一阶段就会提交本地事务无锁长流程情况下可以保证性能多用于渠道层、集成层业务系统。事务参与者可能是其它公司的服务或者是遗留系统的服务无法进行改造和提供 TCC 要求的接口也可以使用 Saga 模式。 Saga模式不依赖数据源。 待完善。 4.XAeXtended Architecture XA模式是分布式强一致性的解决方案但性能低而使用较少。 XA模式只支持实现了XA协议的数据库。Seata支持MySQL、Oracle、PostgreSQL和MariaDB。 4.1 优缺点 优点 强一致性满足ACID要求。 实现简单对业务代码零入侵。 缺点 需要关系型数据库支持。 整个过程长时间锁定资源性能极差。 4.2 Demo 详细代码参考Springboot 集成 Seata-CSDN博客 待完善。
- 上一篇: 手机网站建设优化软件百度做的网站 后台管理怎么进入
- 下一篇: 手机网站进不去怎么解决网站手机端生成
相关文章
-
手机网站建设优化软件百度做的网站 后台管理怎么进入
手机网站建设优化软件百度做的网站 后台管理怎么进入
- 技术栈
- 2026年04月20日
-
手机网站建设信息织梦网站怎样做子域名
手机网站建设信息织梦网站怎样做子域名
- 技术栈
- 2026年04月20日
-
手机网站建设维护协议上海知名网站开发公司
手机网站建设维护协议上海知名网站开发公司
- 技术栈
- 2026年04月20日
-
手机网站进不去怎么解决网站手机端生成
手机网站进不去怎么解决网站手机端生成
- 技术栈
- 2026年04月20日
-
手机网站开发 cwordpress 电子商务模板
手机网站开发 cwordpress 电子商务模板
- 技术栈
- 2026年04月20日
-
手机网站开发 视频教程无极电影网站
手机网站开发 视频教程无极电影网站
- 技术栈
- 2026年04月20日
