- UUID:
- 版本1: Mac地址+时间戳
- 版本4: 基于随机数, 可能是伪随机, 例如
java.util.UUID.randomUUID()
是版本4的一个实现
- Snowflake(Twitter方案):
- 实现: 64位 = 1位符号 + 41位毫秒时间戳 + 10位机器id + 12序列号
- 缺陷: 非严格递增, 机器上有多个线程, 如何保证1ms内每个线程生成的序列号不重复? // 可以使用随机数, 时间戳做seed, 多线程使用同一个seed(有没有并发互斥问题?)
- 实现2: 64位 = 1位符号 + 41位毫秒时间戳 + 10位机器id + 10位进程id + 2位序号
- 缺陷: 每个线程每毫秒只能生成4个id的限制
- 实现: 64位 = 1位符号 + 41位毫秒时间戳 + 10位机器id + 12序列号
- mysql自增(Flickr方案):
- 实现: 8台Mysql, 第一台起始seq=1, 第二台起始seq=2, 每次seq+=8
- 缺陷: 不是严格递增
@ref:
- [[SystemDesign-随机数]]
- 分布式ID生成器 · 系统设计(System Design)
- 基于Twitter的雪花算法改造,分布式全局唯一ID生成器 - 掘金