你拍一我拍一,分布式事务听一听(一)

常用分库分表策略

常见库路由策略:

  • userID分库(最常见也是最有效的分库方式)
  •  以用户行政地域分库(地域一般是410000等形式)

  • userID + region区域 复合使用

 

常见表路由策略:

 

Range分片

 

  • 以业务表ID 取mod分表
  • ID区间路由,如[0-10000000]写入table_0

  • 以业务表日期区间进行路由,:table_202004(适合数据归档业务场景,本质是冷热分离)

Hash分片

  • 多字段组合路由,hash(key0,key1,key2...) + mod
  • 一致性hash:hash mod 2^32-1

常用分布式全局唯一主键策略

  1. UUID
  2. 日期(8位)+平台ID(2位)+支付方式(2位)+原子自增(6位)

  3. 雪花算法

  4. 大公司的主键生成服务(如美团的Leaf)

Sharding分库分表自定义分布式主键策略

 

原理:SPI (service provider interface服务提供接口) 

实现:在resources下创建META-INF/services目录

创建文件:org.apache.shardingsphere.spi.keygen.ShardingKeyGenerator

在文件当中配置你自己的主键生成Java文件包路径

如:com.zhangjiang.zhangjiangmall.spi.OrderByRedisKeyGenerator

XA原理与实现

XA:核心原理是2PC两阶段提交

 

实现框架

 

  • Atomikos(sharding默认使用)
  • bitronix

 

  • narayana

 

 

开启XA事务

1、引入XA事务依赖包

 1 <dependency>
 2 
 3     <groupId>org.apache.shardingsphere</groupId>
 4 
 5     <artifactId>sharding-transaction-xa-core</artifactId>
 6 
 7     <version>4.0.0</version>
 8 
 9     <exclusions>
10 
11         <exclusion>
12 
13         <artifactId>slf4j-api</artifactId>
14 
15         <groupId>org.slf4j</groupId>
16 
17         </exclusion>
18 
19     </exclusions>
20 
21 </dependency>

2、开启分布式事务

TransactionTypeHolder.set(TransactionType.XA);

 

 

posted @ 2020-10-31 07:59  powerZhangFly  阅读(106)  评论(0)    收藏  举报