分布式ID生成方案小结
2020-09-22 本文已影响0人
Aplha
分布式ID生成方案
自增
数据库自增ID
-
基于数据库自增ID
-
性能低
- 每次获取都要请求数据库
-
可靠性差
- 单机宕机不可用
数据库多主模式
-
解决单机性能低和可靠性差问题
-
单独给每个数据库实例配置不同起始值和步长
-
扩展性差
- 扩展多主集群时需重新规划起始值和步长,易出现重复ID
号段模式
- 每次从数据库获取ID区间,本机缓存
- 分布式ID生成服务宕机或重启导致ID区间丢失,造成ID空洞
Redis的incr命令
- RDB持久化,重启Redis导致ID重复
滴滴TinyId
- 号段模式基础上将自增逻辑转移到业务应用本地
雪花算法
long类型64bit
- 标识位1bit
- 时间戳41bit
- 工作机器ID10bit
- 序列号位12bit
百度(uid-generator)
-
workId占22bit
- 自定义workId生成策略
- 默认启动时数据库插入数据获取自增ID,数据由host和port组成
-
时间占28bit(单位是秒)
-
序列号位13bit
美团(Leaf)
- 既支持号段也支持雪花算法
- workId使用ZK顺序节点生成