分布式ID
分布式ID
UUID
- 本地生成速度快
- 无序
- 字符串,占用空间大
数据库自增ID
- 有序递增
- 插入数据时自动生成,方便
- 性能较低
- 分库分表:多主多从
- 不同的自增步长
- 号段模式:一次性拿一段号段,减少数据库操作频率
- 扩容时先修改现有数据库的步长,之后新实例在一个较大的起始值开始自增
Redis
- 性能好,满足递增
- 即便使用AOF,也有可能丢数据导致ID重复(如果是毫秒级的key来自增,redis重启恢复能到ms级?就算到ms级,缓个1ms不也行)
雪花算法
第一个bit为0,标志正数
毫秒时间戳占41bit,为当前时间减去一个过去时间,41bit可用69年
机器ID占10bit,例如前五位机房编号,后五位机器编号
序列号占12bit,支持同一毫秒同一节点生成4096个ID,满了需要自旋到下一毫秒
时间回拨
- 检查本次ID时间与上次ID时间,如果回拨
- 例如5ms以内则自旋一下
- 否则需要预留一个拓展位改为1
参考文章:
分布式ID
https://cellargalaxy.github.io/posts/分布式/3.分布式ID/