分布式 ID 生成的需求
不依赖数据库。
详细理解原理
(1)写文件。提前取1000个,然后将下一个值写入文件。
(2)预取+时间戳+线程好+机器码
时间时钟怎么保持一致?
id 递增的线程安全,持久化。
基础知识
网卡 线程 并发安全 持久化 (如果递增)
位运算,进制转换。
常见参考实现
UUID
GUID
timestampe+randomNum
snowflake
mongo.id
serialId 生成策略
基于 oracle/redis 的设计
设计步骤
单机版+不停机+单线程
- 基本
long++
单机版+不停机+多线程
- 线程安全
AtomicLong
- 线程号
停机
持久化:
-
文件
-
database
-
redis
保证分布式可用的,一般只有后两个。
分布式
-
uuid X
-
timestampe+randomNum X
-
snowflake
-
mongo.id
-
zookeeper.id
-
美团 id
-
百度 id
-
时钟回拨问题