zoukankan      html  css  js  c++  java
  • ShardingJdbc 数据分布式事务

        sharding-jdbc分布式事务支持:官网https://shardingsphere.apache.org/document/current/cn/features/transaction/

           1、本地事务

      在不开启任何分布式事务管理器的前提下,让每个数据节点各自管理自己的事务。 它们之间没有协调以及通信的能力,也并不互相知晓其他数据节点事务的成功与否。 本地事务在性能方面无任何损耗,但在强一致性以及最终一致性方面则力不从心。

      2、两阶段提交:

      XA协议最早的分布式事务模型是由 X/Open 国际联盟提出的 X/Open Distributed Transaction Processing (DTP) 模型,简称 XA 协议。

      基于XA协议实现的分布式事务对业务侵入很小。 它最大的优势就是对使用方透明,用户可以像使用本地事务一样使用基于XA协议的分布式事务。 XA协议能够严格保障事务 ACID 特性。

      严格保障事务 ACID 特性是一把双刃剑。 事务执行在过程中需要将所需资源全部锁定,它更加适用于执行时间确定的短事务。 对于长事务来说,整个事务进行期间对数据的独占,将导致对热点数据依赖的业务系统并发性能衰退明显。 因此,在高并发的性能至上场景中,基于XA协议的分布式事务并不是最佳选择。

      3、柔性事务:

      如果将实现了 ACID 的事务要素的事务称为刚性事务的话,那么基于 BASE 事务要素的事务则称为柔性事务。 BASE 是基本可用、柔性状态和最终一致性这三个要素的缩写。

    •        基本可用(Basically Available)保证分布式事务参与方不一定同时在线。
    •        柔性状态(Soft state)则允许系统状态更新有一定的延时,这个延时对客户来说不一定能够察觉。
    •        而最终一致性(Eventually consistent)通常是通过消息传递的方式保证系统的最终一致性。

      在 ACID 事务中对隔离性的要求很高,在事务执行过程中,必须将所有的资源锁定。 柔性事务的理念则是通过业务逻辑将互斥锁操作从资源层面上移至业务层面。通过放宽对强一致性要求,来换取系统吞吐量的提升。

      基于 ACID 的强一致性事务和基于 BASE 的最终一致性事务都不是银弹,只有在最适合的场景中才能发挥它们的最大长处。 可通过下表详细对比它们之间的区别,以帮助开发者进行技术选型。

    Sharding-JDBC下实现强一致分布式事务需要导入以下依赖:

    <!--xa分布式事务-->
    <dependency>
      <groupId>io.shardingsphere</groupId>
      <artifactId>sharding-transaction-2pc-xa</artifactId>
      <version>3.1.0</version>
    </dependency>
    
    <dependency>
      <groupId>io.shardingsphere</groupId>
      <artifactId>sharding-transaction-spring-boot-starter</artifactId>
      <version>3.1.0</version>
    </dependency>

    默认是用 atomikos 实现的。在 Service 类上加上注解:

    @ShardingTransactionType(TransactionType.XA)
    @Transactional(rollbackFor = Exception.class)
  • 相关阅读:
    展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告
    马士兵_JAVA自学之路(为那些目标模糊的码农们)
    Java知识点总结
    解决:对COM组件的调用返回了错误HRESULT E_FAIL
    平差方法
    二进制、八进制、十进制、十六进制之间转换
    解决电脑复选框图标不正确方法
    SQL语句中的Create
    字段的值转换为大小写
    SQL NOW() 函数
  • 原文地址:https://www.cnblogs.com/h-z-y/p/14297622.html
Copyright © 2011-2022 走看看