当前位置: 首页 > news >正文

新公司怎样做网站在四川眉山一个主机放几个网站

新公司怎样做网站在四川眉山,一个主机放几个网站,国产网站开发工具公司,鄱阳电商网站建设一、引言 在微服务架构日益盛行的今天#xff0c;分布式事务成为了一个必须面对和解决的问题。传统的本地事务已经无法满足分布式环境下的数据一致性需求#xff0c;因此分布式事务解决方案应运而生。Seata作为一款开源的分布式事务中间件#xff0c;以其高性能、易用性和灵…一、引言 在微服务架构日益盛行的今天分布式事务成为了一个必须面对和解决的问题。传统的本地事务已经无法满足分布式环境下的数据一致性需求因此分布式事务解决方案应运而生。Seata作为一款开源的分布式事务中间件以其高性能、易用性和灵活性受到了广泛的关注和应用。本文将对Seata进行全面深入的解析包括其基本概念、事务模式、工作原理、代码示例以及实际应用场景旨在帮助开发者更好地理解和使用Seata。 二、Seata概述 2.1 基本概念 SeataSimple Extensible Autonomous Transaction Architecture是一款开源的分布式事务解决方案致力于在微服务架构下提供高性能和简单易用的分布式事务服务。Seata通过提供全局事务管理和协调服务支持多种主流的数据库和RPC框架以及Spring Cloud和Dubbo等微服务框架。Seata的设计目标是解决分布式事务的一致性问题实现高可用、高性能、易扩展的分布式事务管理。 2.2 角色与组件 Seata主要由三个核心角色组成 TC (Transaction Coordinator) 事务协调器维护全局和分支事务的状态驱动全局事务提交或回滚。TC是单独部署的Server服务端。 TM (Transaction Manager) 事务管理器控制全局事务的边界负责开启一个全局事务并最终发起全局提交或全局回滚的决议。TM和RM都是嵌入到应用中的Client客户端。 RM (Resource Manager) 资源管理器管理分支事务处理的资源与TC交谈以注册分支事务和报告分支事务的状态并驱动分支事务提交或回滚。 三、Seata的事务模式 Seata支持四种分布式事务模式AT模式、TCC模式、Saga模式和XA模式每种模式都有其独特的适用场景和优缺点。 3.1 AT模式 3.1.1 概念与原理 AT模式Automatic Transaction是Seata创新的一种非侵入式的分布式事务解决方案。在AT模式下用户只需关心自己的“业务SQL”Seata框架会自动生成事务的二阶段提交和回滚。 AT模式的工作原理如下 一阶段 Seata会拦截“业务SQL”首先解析SQL语义找到“业务SQL”要更新的业务数据在业务数据被更新前将其保存成“before image”然后执行“业务SQL”更新业务数据在业务数据更新之后再将其保存成“after image”最后生成行锁。以上操作全部在一个数据库事务内完成这样保证了一阶段操作的原子性。 二阶段提交 如果全局事务提交Seata不会执行任何操作因为一阶段已经完成数据的持久化。 二阶段回滚 如果全局事务回滚Seata会根据“before image”和“after image”生成反向的SQL语句并执行这些反向SQL语句来撤销一阶段的业务数据变更。 3.1.2 优缺点 优点 简化编程模型 对业务代码无侵入性可以在不修改业务逻辑的情况下实现分布式事务。 高性能 通过异步通信和批量处理等手段提高了分布式事务的性能。 缺点 数据一致性风险 在极端情况下如数据库宕机可能会出现数据一致性风险。 不支持跨数据库事务 AT模式主要适用于单个数据库的事务管理对于跨数据库的事务支持有限。 3.1.3 代码示例 以下是一个使用Seata AT模式实现分布式事务的简单示例假设有两个微服务订单服务和库存服务订单服务负责创建订单库存服务负责扣减库存。当用户下单时需要同时调用两个服务并保证数据一致性。 // 订单服务代码示例 GlobalTransactional public void createOrder(Order order) {// 调用库存服务扣减库存inventoryService.decreaseStock(order.getCommodityCode(), order.getCount());// 创建订单orderMapper.insert(order); }// 库存服务代码示例 GlobalTransactional public void decreaseStock(String commodityCode, int count) {// 扣减库存storageMapper.updateStock(commodityCode, count); }在上述代码中通过在createOrder和decreaseStock方法上添加GlobalTransactional注解Seata会自动管理这两个方法之间的事务一致性。 3.2 TCC模式 3.2.1 概念与原理 TCC模式Try-Confirm-Cancel是Seata支持的一种由业务方细粒度控制的侵入式分布式事务解决方案。TCC模式将分布式事务拆分为Try、Confirm和Cancel三个阶段每个阶段都需要业务方自行实现。 Try阶段 执行业务的预备操作完成资源的检查和预留。如果预备操作成功则返回try成功状态如果预备操作失败则返回try失败状态。 Confirm阶段 在Try阶段成功执行后执行业务的确认操作完成资源的最终提交。Confirm阶段必须保证幂等性即无论执行多少次结果都是一样的。 Cancel阶段 在Try阶段成功执行后如果全局事务需要回滚则执行业务的取消操作释放Try阶段预留的资源。Cancel阶段也必须保证幂等性。 3.2.2 优缺点 优点 灵活性高 TCC模式允许业务方细粒度地控制事务的每个阶段可以适应复杂的业务场景。 性能优越 TCC模式在第一阶段只锁定必要的资源减少了资源锁持有时间提高了并发性能。 缺点 业务侵入性强 TCC模式需要业务方实现Try、Confirm和Cancel三个阶段的操作增加了业务代码的复杂度。 实现难度大 需要保证Try、Confirm和Cancel三个阶段的幂等性以及处理各种异常情况实现难度较大。 3.2.3 代码示例 以下是一个使用Seata TCC模式实现分布式事务的示例 // TCC接口定义 public interface TccActionOne {TwoPhaseBusinessAction(name DubboTccActionOne, commitMethod commit, rollbackMethod rollback)public boolean prepare(BusinessActionContext actionContext, BusinessActionContextParameter(paramName a) String a);public boolean commit(BusinessActionContext actionContext);public boolean rollback(BusinessActionContext actionContext); }// TCC接口实现 Service public class TccActionOneImpl implements TccActionOne {Overridepublic boolean prepare(BusinessActionContext actionContext, String a) {// 执行业务的预备操作// ...return true; // 返回try成功状态}Overridepublic boolean commit(BusinessActionContext actionContext) {// 执行业务的确认操作// ...return true; // 返回commit成功状态}Overridepublic boolean rollback(BusinessActionContext actionContext) {// 执行业务的取消操作// ...return true; // 返回rollback成功状态} }在上述代码中TccActionOne接口定义了Try、Confirm和Cancel三个阶段的操作TccActionOneImpl类实现了这些操作。业务方需要在每个阶段中编写相应的业务逻辑并保证这些逻辑的幂等性。 3.3 Saga模式 3.3.1 概念与原理 Saga模式是一种长事务模式它将一个长事务拆分成多个小事务每个小事务都是一个短事务。Saga模式的核心思想是补偿即如果某个小事务失败了可以通过回滚之前的小事务来保证整个长事务的正确性。 Saga模式的工作原理如下 正向执行依次执行每个小事务如果所有小事务都执行成功则长事务成功。逆向补偿如果某个小事务执行失败则依次执行之前所有成功小事务的补偿操作直到所有小事务都回滚到初始状态。 3.3.2 优缺点 优点 适用于长事务 Saga模式特别适用于需要跨多个服务或数据库完成的长事务。 业务侵入性较低 Saga模式只需要业务方实现正向和反向两个操作相对于TCC模式来说侵入性较低。 缺点 补偿操作的复杂性 在复杂业务场景下补偿操作可能很难实现且容易出现补偿失败的情况。 数据一致性风险 在极端情况下如网络分区可能会出现数据一致性风险。 3.3.3 代码示例 以下是一个使用Seata Saga模式实现分布式事务的示例 // 伪代码示例 // 定义一个服务接口包含正向服务和补偿服务 interface SagaService { void execute(); // 正向服务 void compensate(); // 补偿服务 } // 实现Saga服务 class OrderService implements SagaService { Override public void execute() { // 执行订单创建的正向逻辑 } Override public void compensate() { // 执行订单创建的补偿逻辑 } } class PaymentService implements SagaService { Override public void execute() { // 执行支付的正向逻辑 } Override public void compensate() { // 执行支付的补偿逻辑 } } // Saga协调器 class SagaCoordinator { public void executeSaga(ListSagaService services) { for (SagaService service : services) { try { service.execute(); // 执行正向服务 } catch (Exception e) { // 出现异常时回滚已执行的服务 for (int i services.indexOf(service) - 1; i 0; i--) { services.get(i).compensate(); } throw e; // 抛出异常中断流程 } } // 所有服务执行成功提交事务 } } // 使用示例 public class SagaExample { public static void main(String[] args) { ListSagaService services Arrays.asList(new OrderService(), new PaymentService()); SagaCoordinator coordinator new SagaCoordinator(); try { coordinator.executeSaga(services); } catch (Exception e) { System.err.println(Saga execution failed: e.getMessage()); } } }3.4 XA模式 3.4.1 概念与原理 执行阶段 RM资源管理器将分支事务注册到全局事务协调器TC。 RM执行分支业务操作但不提交。这确保了分支事务不会立即生效等待全局协调后再决定是否提交。 RM报告分支事务执行状态给TC。 完成阶段 TC检测各个分支事务的执行状态。 如果所有分支事务都成功TC通知所有RM提交事务即提交所有分支事务的更改。 如果有任何分支事务失败TC通知所有RM回滚事务即回滚所有分支事务的更改。 RM接收来自TC的指令根据指令来提交或回滚分支事务。 3.4.2 优缺点 优点 保证了数据的强一致性满足ACID原则。几乎所有主流的数据库都支持XA协议实现简单。没有代码侵入开发者无需修改业务代码。 缺点 性能较差因为一阶段需要锁定数据库资源等待二阶段结束才释放。依赖关系型数据库实现事务不适用于非关系型数据库。存在单点问题全局事务协调器可能成为系统瓶颈。 3.4.3 代码示例 XA模式的代码实现涉及Seata的配置和事务注解的使用。以下是一个简化的代码示例展示了如何在Spring Boot项目中使用Seata的XA模式 // 引入Seata依赖在pom.xml中 dependency groupIdio.seata/groupId artifactIdseata-spring-boot-starter/artifactId version你的Seata版本/version /dependency // 配置文件application.yml seata: enabled: true data-source-proxy-mode: XA # 其他Seata配置... // 服务实现类 Service public class OrderService { Autowired private OrderMapper orderMapper; GlobalTransactional public void createOrder(Order order) { // 执行订单创建逻辑 orderMapper.insert(order); // 调用其他服务或执行其他业务逻辑... } } // Mapper接口 Mapper public interface OrderMapper { void insert(Order order); // 其他数据库操作方法... } // 实体类 public class Order { private Long id; private String userId; private BigDecimal amount; // 其他字段和getter/setter方法... }在上面的代码中GlobalTransactional注解标记了全局事务的边界。当createOrder方法被调用时Seata会启动一个全局事务并协调所有参与的分支事务以保证数据的一致性。注意这里假设数据库已经支持XA协议并且已经正确配置了Seata Server和相关依赖。 四、总结 Seata作为开源的分布式事务中间件在微服务架构下提供了高性能和简单易用的分布式事务服务。它支持AT、TCC、Saga和XA四种事务模式每种模式各有优缺点和适用场景。AT模式通过自动生成事务的二阶段提交和回滚简化了编程模型但存在数据一致性风险和跨数据库事务支持有限的问题。TCC模式允许业务方细粒度控制事务的每个阶段灵活性高且性能优越但业务侵入性强且实现难度大。Saga模式适用于长事务通过补偿操作保证事务正确性但补偿操作复杂且存在数据一致性风险。XA模式则利用数据库对XA协议的支持保证数据强一致性但性能较差且存在单点问题。开发者在选择使用Seata时应根据具体业务场景和需求选择合适的事务模式并合理配置和使用Seata以保证分布式事务的一致性和性能。
http://www.sczhlp.com/news/160291/

相关文章:

  • 做3d图的网站有哪些软件下载热转印 东莞网站建设
  • 网站建设 设计创意深圳企业主页制作
  • 自建网站免费教程wordpress用阿里云oss
  • 湖南中虹羽建设工程有限公司网站如何开发一款小游戏
  • 广安建网站做网站人
  • 安徽建设行业安全协会网站电商网站怎么做的
  • 风景网站模板地方网站发展
  • 个人服务器网站备案做场景秀的网站
  • 外管局网站怎么做报告网站打开慢什么原因
  • 网站木马文件删除全球电商平台排名
  • 旅游网站建设的总结千助网站公司
  • 网站建设费往什么科目装修公司联系方式汇总
  • 深圳网站自然优化如何增加企业网站被收录的几率
  • 毕业设计的网站王者荣耀网站建设的步骤
  • 淮北哪有做网站的软件下载网站哪个最安全
  • 做第一个网站什么类型如何开展网络营销
  • 公司网站建设规划广州seo网站推广平台
  • 国外seo比较好的博客网站wordpress精致主题
  • 成都锦江规划建设局网站wordpress footer 链接
  • 微网站建设方案书嵌入式软件开发工程师做什么
  • 网站刚做好怎么做优化ppt课件免费下载的网站
  • 做导购网站多少钱河北邢台地图
  • EPL S22 Stage 2 赛前前瞻
  • 如何模仿一个网站哪个网站可以查询即将到期的域名
  • 网站下要加个备案号 怎么做怎样查看网站是否备案
  • 企业网站代码怎么优化wordpress 设置子菜单
  • 能下短视频网站做牙在58做网站推广有用没
  • 网站被管理员权限2021年国家大事件有哪些
  • 广州穗科建设管理有限公司网站易语言源码论坛
  • 网站建设管理自查报告wordpress设置qq邮箱设置