当前位置:XML > XML市场

数据库中间件详解shardingjdb

北京哪里治疗白癜风的医院最好 https://wapjbk.39.net/yiyuanfengcai/hj_bjzkbdfyy/

本节来聊聊sharding-jdbc的事务与数据治理机制

(一)分布式事务应用

①maven配置

XA事务管理器将以SPI的方式被Sharding-JDBC所加载

dependencygroupIdio.shardingsphere/groupIdartifactIdsharding-transaction-2pc-xa/artifactIdversion${shardingsphere.version}/version/dependency

②连接池配置

ShardingSphere支持将普通的数据库连接池,转换为支持XA事务的连接池,对HikariCP,Druid和DBCP2连接池内置支持,无需额外配置。其它连接池需要用户实现DataSourceMapConverter的SPI接口进行扩展,可以参考org.apache.shardingsphere.transaction.xa.convert.swap.HikariParameterSwapper的实现。若ShardingSphere无法找到合适的实现,则会按默认的配置创建XA事务连接池。

③事务类型切换

ShardingSphere的事务类型存放在TransactionTypeHolder的本地线程变量中,因此在数据库连接创建前修改此值,可以达到自由切换事务类型的效果。注意:数据库连接创建之后,事务类型将无法更改。

④API方式

注意:

ShardingTransactionType需要同Spring的

Transactional配套使用,事务才会生效。

TransactionTypeHolder.set(TransactionType.LOCAL);如果都在同一个库,可以使用LOCAL

TransactionTypeHolder.set(TransactionType.XA);如果不在同一个库,可以使用XA

⑤Atomikos参数配置

ShardingSphere默认的XA事务管理器为Atomikos。可以通过在项目的classpath中添加jta.properties来定制化Atomikos配置项。具体的配置规则请参考Atomikos的官方文档。

⑥springboot的配置方案

maven依赖```xml

io.shardingspheresharding-transaction-spring${sharding-sphere.version}

org.springframework.bootspring-boot-starter-aop${spring-boot.version}

[1.5.0.RELEASE,2.0.0.M1)

AutoConfiguration配置```java

SpringBootApplication(exclude=JtaAutoConfiguration.class)

ComponentScan("io.shardingsphere.transaction.aspect")publicclassStartMain{}

(二)事务

①背景

数据库事务需要满足ACID(原子性、一致性、隔离性、持久性)四个特性。

原子性(Atomicity)指事务作为整体来执行,要么全部执行,要么全不执行。

一致性(Consistency)指事务应确保数据从一个一致的状态转变为另一个一致的状态。

隔离性(Isolation)指多个事务并发执行时,一个事务的执行不应影响其他事务的执行。

持久性(Durability)指已提交的事务修改数据会被持久保存。

在单一数据节点中,事务仅限于对单一数据库资源的访问控制,称之为本地事务。几乎所有的成熟的关系型数据库都提供了对本地事务的原生支持。但是在基于微服务的分布式应用环境下,越来越多的应用场景要求对多个服务的访问及其相对应的多个数据库资源能纳入到同一个事务当中,分布式事务应运而生。

关系型数据库虽然对本地事务提供了完美的ACID原生支持。但在分布式的场景下,它却成为系统性能的桎梏。如何让数据库在分布式场景下满足ACID的特性或找寻相应的替代方案,是分布式事务的重点工作。

②本地事务

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

③两阶段提交

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

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

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

④柔性事务

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

基本可用(BasicallyAvailable)保证分布式事务参与方不一定同时在线。

柔性状态(Softstate)则允许系统状态更新有一定的延时,这个延时对客户来说不一定能够察觉。

而最终一致性(Eventuallyconsistent)通常是通过消息传递的方式保证系统的最终一致性。

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

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

⑤挑战

由于应用的场景不同,需要开发者能够合理的在性能与功能之间权衡各种分布式事务。

强一致的事务与柔性事务的API和功能并不完全相同,在它们之间并不能做到自由的透明切换。在开发决策阶段,就不得不在强一致的事务和柔性事务之间抉择,使得设计和开发成本被大幅增加。

基于XA的强一致事务使用相对简单,但是无法很好的应对互联网的高并发或复杂系统的长事务场景;柔性事务则需要开发者对应用进行改造,接入成本非常高,并且需要开发者自行实现资源锁定和反向补偿。

(二)数据治理-配置中心

①实现动机

配置集中化:越来越多的运行实例,使得散落的配置难于管理,配置不同步导致的问题十分严重。将配置集中于配置中心,可以跟家有效进行管理。

配置动态化:配置修改后的分发,是配置中心可以提供的另一个重要能力。它可支持数据源表与分片与读写分离策略的动态切换。

②spring的maven配置

!--forspringboot--dependencygroupIdorg.apache.shardingsphere/groupIdartifactIdsharding-jdbc-orchestration-spring-boot-starter/artifactIdversion${sharding-sphere.version}/version/dependency!--若使用zookeeper,请加入下面Maven坐标--dependencygroupIdorg.apache.shardingsphere/groupIdartifactIdsharding-orchestration-reg-zookeeper-curator/artifactIdversion${sharding-sphere.version}/version/dependency!--forspringnamespace--dependencygroupIdorg.apache.shardingsphere/groupIdartifactIdsharding-jdbc-orchestration-spring-namespace/artifactIdversion${sharding-sphere.version}/version/dependency!--若使用zookeeper,请加入下面Maven坐标--dependencygroupIdorg.apache.shardingsphere/groupIdartifactIdsharding-orchestration-reg-zookeeper-curator/artifactIdversion${sharding-sphere.version}/version/dependency

基于Springboot的配置文件

spring.shardingsphere.orchestration.name=orchestration-sharding-data-sourcespring.shardingsphere.orchestration.overwrite=falsespring.shardingsphere.orchestration.registry.type=zookeeperspring.shardingsphere.orchestration.registry.server-lists=localhost:spring.shardingsphere.orchestration.registry.namespace=sharding-jdbc-orchestration

PS:sharding-jdbc基本就这么多。大家了解下,关于事务一般都是分布式消息中间件来完成,欢迎大家一起畅聊。




转载请注明:http://www.vviuov.com/jbwh/1062994.html

  • 上一篇文章:
  • 下一篇文章: 没有了