特点

全局唯一

  • 一个应用在一台服务器,ID唯一
  • 相同应用在多台服务器,ID唯一
  • 运行在docker容器里的应用,ID唯一

    高并发

    高可用

方案

UUID

缺点:①空间占用多。②不能生成递增有序的数字,索引效率下降

数据库主键自增

缺点:①并发性能不高,受限于数据库性能。②若分库分表提升性能需改造,较复杂。③自增,数据量泄露。

Redis自增

缺点:①数据丢失,需持久化。②自增,数据量泄露。

雪花算法

缺点:①时钟回拨

号段模式

1-100,101-200,201-300……每次获取的号段都可以生成一定数量的ID。直至号段内的ID用尽,再次重新获取新的号段来生成ID。

雪花算法

image.png
上图以二进制展示
1bit符号位:二进制取0或1,1表示负数,分布式ID都用正数,所以符号位舍弃。
41bit时间戳位:二进制时间戳(毫秒)。换算:时间可以存69年的时间
10bit工作进程位:机器序号(5位+5位)。5位表示服务器区域(如北京、上海),5位表示服务器标识。换算:1024台服务器
12bit序列号为:自增数。换算:在同一毫秒下,同时可以生成4096个ID。

技术选型

锁定两款:滴滴的tinyid和美团的leaf