全局 ID 生成器
March 29, 2023About 1 min
全局 ID 生成器
基本概念
数据库自增主键的问题
- 会泄露一些信息,如每天有多少单
- 可能会分库分表(分布式存储),如果是数据库的自增主键,那就无法保证 iid 的唯一性了
全局 ID 生成器的特性
分布式系统下用来生成全局唯一的 ID 的工具,要满足如下特性:
- 唯一性
- 高可用:什么时候要 id 都能给
- 高性能
- 递增性:同时还可以有一个统计的效果
- 安全性:为增加安全性,我们加入一些其他信息防止被猜出来
全局唯一 ID 生成策略
UUID
16 进制,字符串结构
缺点:没有自增性质
Redis 自增
构造:时间戳+自增 id
每天一个 key,方便统计订单量,且防止整数溢出
数据库自增
单独一张表,专门负责做自增,分库分表的地方都从他这里取 id
原理上和 redis 自增一样,只是性能更差,一般不采用这个,如果使用的话,一般是批量获取 id,然后放入内存缓存起来,来提高性能
snowflake 算法
与我们 Redis 的实现方案思路类似,但是 id 自增是机器内部的 id 的自增,需要维护机器内部的 id,分布式系统下比较麻烦,一般还是采用 redis 的方案
优点:不依赖于 redis,单体的性能会更好
缺点:对于时钟依赖比较高,如果时间不准确会出现问题