分布式全局ID、分布式事务和数据一致性
1.分布式全局ID
1.1 分库分表引发的id重复问题与解决方案
一:分库分表引发的id重复问题
- 每个表都有唯一标识,通常使用id表示
- Id通常采用自增的方式
- 在分库分表的情况下,每张表的id都从0开始自增
- 不同的分片上,id可能重复
- 导致id在全局不唯一,导致业务上出现问题
- 如下:两个分片表中存在的相同的order_id,导致业务混乱
二:ID重复问题的解决方案
1、使用UUID作为id实现主键全局唯一保证
2、通过统一ID序列,实现全局id
3、雪花算法(推特) 作为全局id
1.2 分布式全局ID - 分布式主键UUID(sharding-jdbc)
一:分布式主键UUID(Sharding-Jdbc支持)
1、UUID通用唯一识别码(universally unique identity)
2、使用UUID,保证每一条记录的id都是不同的。
3、缺点:只是单纯的一个id,没有实际意义。长度32位,太长。
4、方案比较:
- Mycat不支持UUID的分布式主键方式
- Sharding-Jdbc支持UUID的分布式主键方式
1.3 分布式全局ID-雪花算法生成全局主键(mycat)
一:雪花算法的原理
1、基本保持全局唯一,毫秒内并发最大4096个ID。
2、服务器时间回调,可能引起ID重复。
3、Mycat和Sharding-Jdbc都支持雪花算法。
4、Sharding-Jdbc可以设置最大容忍回调时间。
5、雪花算法原理
-
雪花算法最终生成ID的结果为一个64bit大小的整数。
-
解释