icql

分布式基础_分布式ID

一、号段模式

从数据库批量获取ID,然后将ID缓存在本地,以此来提高业务获取ID的效率

二、雪花算法

雪花算法

1位:固定值,无意义
41位:毫秒时间戳
10位:机器码,包括5位datacenterId和5位workerId
12位:毫秒内的流水号

常见问题:
1) 时钟回拨问题,比较好的解决方案是:
记录最后id时间lastTime,如果当前时间currentTime小于lastTime,则取当前时间currentTime+预留的最后一位加1
2) 机房ID=datacenterId,机器ID=workerId
如果容器里边有,可以直接获取
如果容器里边没有,需要在服务启动时从统一的中间件获取(并发较低可以直接使用db)

三、业界开源方案

美团的Leaf-segment

百度UidGenerator