UUID

生成方式

  1. 程序 UUID.randomUUID().toString__() 生成
  2. 数据库 SELECT UUID() 生成

    优点

  • 简单、生成代码方便
  • 性能较好,不存在性能问题
  • 数据迁移较为便捷

    缺点

  • 无排序,不可读,不能保证趋势递增

  • 使用字符串存储,查询效率较低
  • 存储空间占用大,传输数据量大

    UUID_SHORT()

    使用数据库的 UUID_SHORT() 函数生成类似于 snowflake 的分布式ID

    Redis

    生成方式

    利用Redis的原子操作INCR和INCRBY实现

    优点

  • 不依赖于数据库,灵活方便,性能优于数据库

  • 数字ID天然排序,对分页或需要排序的结果很有帮助

    缺点

  • 需要引入新的组件,增加系统复杂度

  • 需要编码和配置的工作量大
  • 网络传输造成性能下降

    snowflake

    生成方式

    image.png
    符号位
    最高位是符号位,为保证生成的ID是正数,故不使用,其值恒为0
    时间戳
    用来记录时间戳的毫秒数,41位长度的时间戳可以保证使用69年。
    数据中心ID、机器ID
    数据中心ID、机器ID一共10位,用于标识工作的计算机,在这里数据中心ID、机器ID各占5位
    序列号
    最低的12位为序列号,可用于标识、区分同一个计算机在相同毫秒时间内的生产的ID

    优点

    生成的分布式ID有较好的可读性,趋势递增的顺序

    缺点

    时钟回拨可能会造成生成的分布式ID重复问题

    UIDGenertor

    UIDGenertor 是百度基于snowflake算法实现的分布式ID生成器。UidGenerator以组件形式工作在应用项目中, 支持自定义workerId位数和初始化策略, 从而适用于docker等虚拟化环境下实例自动重启、漂移等场景。UidGenerator通过借用未来时间来解决sequence天然存在的并发限制; 采用RingBuffer来缓存已生成的UID, 并行化UID的生产和消费, 同时对CacheLine补齐,避免了由RingBuffer带来的硬件级「伪共享」问题. 最终单机QPS可达600万。
    使用手册

    Leaf

    官方介绍

    Seqsvr

    文档介绍