Skip to content

分布式 ID 介绍

分布式 ID:单体MySQL无法支撑业务,需要分库分表(推荐 Sharding-JDBC),需要为不同的数据节点生成全局唯一主键 需要满足:

  • 全局唯一:不能重复
  • 高性能:速度快,消耗少。
  • 高可用:可用率高。
  • 方便易用:简单易用
  • 安全:ID 中不包含敏感信息。
  • 有序递增:插入等操作更快

分布式 ID 常见解决方案

  • 数据库号段:每次将一段数据库 ID 放在缓存中,新增时获取
    • 简单、有序
    • 通过 ID 可以推算出增量(信息泄露 )
  • Redis:通过 Redis 的 incr 命令
    • 和数据库号段类似
  • MongoDB ObjectId:12 个字节
    • 0~3:时间戳
    • 3~6:代表机器 ID
    • 7~8:机器进程 ID
    • 9~11:自增值
    • 性能不错,且 ID 有序
    • 机器时间不对,可能生成重复 ID
  • UUID 是 Universally Unique Identifier(通用唯一标识符):
    • 32 个 16 进制数字(8-4-4-4-12)
    • 全局唯一
    • 但是长度太长,无序,机器时间长可能重复 ID 等问题
  • Snowflake(雪花算法):64bit
    • 生成速度快、有序、可以改造比较灵活
    • 机器时间不对可能出现重复 ID
  • UidGenerator(百度):基于雪花算法的 ID 生成器
  • Leaf(美团):支持号段和雪花算法两种模式
  • Tinyid(滴滴):基于号段的生成器

正在精进