Skip to main content

全局 ID 生成器

David LiuAbout 1 min

全局 ID 生成器

基本概念

数据库自增主键的问题

  • 会泄露一些信息,如每天有多少单
  • 可能会分库分表(分布式存储),如果是数据库的自增主键,那就无法保证 iid 的唯一性了

全局 ID 生成器的特性

分布式系统下用来生成全局唯一的 ID 的工具,要满足如下特性:

  • 唯一性
  • 高可用:什么时候要 id 都能给
  • 高性能
  • 递增性:同时还可以有一个统计的效果
  • 安全性:为增加安全性,我们加入一些其他信息防止被猜出来

截屏2023-02-07 09.48.57

全局唯一 ID 生存策略

  • UUID

    • 16 进制,字符串结构

    • 缺点:没有自增性质

  • Redis 自增

    构造:时间戳+自增 id

    每天一个 key,方便统计订单量,且防止整数溢出

  • snowflake 算法

    与我们 Redis 的实现方案思路类似,但是 id 自增是机器内部的 id 的自增,需要维护机器内部的 id,分布式系统下比较麻烦,一般还是采用 redis 的方案

    不依赖于 redis,单体的性能会更好

    对于时钟依赖比较高,如果时间不准确会出现问题

  • 数据库自增,单独一张表,专门负责做自增,分库分表的地方都从他这里取 id

    原理上和 redis 自增一样,只是性能更差,一般不采用这个,如果使用的话,一般是批量获取 id,然后放入内存缓存起来,来提高性能