欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 常用的分布式 ID 设计方案

常用的分布式 ID 设计方案

2025/3/9 18:01:05 来源:https://blog.csdn.net/hhgh_/article/details/146052029  浏览:    关键词:常用的分布式 ID 设计方案

文章目录

  • 1.UUID
  • 2.数据库自增 ID
  • 3.雪花算法
  • 4.Redis 生成 ID
  • 5.美团 Leaf

1.UUID

原理:UUID 是由数字和字母组成的 128 位标识符,通过特定算法随机生成,包括时间戳、计算机网卡地址等信息。常见的版本有版本 1(基于时间戳和 MAC 地址)、版本 4(纯随机数)等。

优点:

  • 生成简单,本地生成,不需要依赖额外的组件或服务,能有效减少网络开销。
  • 全球唯一,基本能保证在任何场景下不会重复。

缺点:

  • 长度较长,通常为 36 个字符(如550e8400-e29b-41d4-a716-446655440000),占用存储空间大,在数据库存储和传输时会增加开销。
  • 无序性,导致在数据库索引中效率较低,不利于排序和分页操作。

2.数据库自增 ID

原理:利用关系型数据库(如 MySQL)的自增字段特性,每插入一条数据,ID 自动递增。可以单库单表生成,也可以分库分表生成(如设置不同的初始值和步长) 。

优点

  • 简单直观,符合人们对 ID 的认知习惯,容易理解和使用。
  • 有序性,方便进行排序、分页和统计等操作。

缺点

  • 性能瓶颈,在高并发场景下,数据库的写操作会成为性能瓶颈,因为自增 ID 的生成依赖数据库的锁机制。
  • 扩展性差,分库分表时,ID 的生成和管理会变得复杂,需要额外的逻辑来保证唯一性。

3.雪花算法

原理:由 Twitter 开源,是一种生成 64 位整数 ID 的算法。它将 64 位划分为不同部分,包含 1 位符号位(固定为 0)、41 位时间戳(毫秒级)、10 位工作机器 ID(可支持 1024 个节点)和 12 位序列号(同一毫秒内生成不同 ID)。

优点

  • 高性能,在内存中生成,不依赖数据库等外部组件,生成速度快,能满足高并发场景。
  • 有序性,根据时间戳生成,基本保证 ID 是有序的,有利于数据库索引和排序。
  • 可扩展性,通过调整工作机器 ID 位数,可以适应不同规模的分布式系统。

缺点

  • 强依赖时钟,若服务器时钟回拨,可能会生成重复 ID,需要额外的处理逻辑。
  • 实现相对复杂,需要对算法原理有一定了解才能正确实现和维护。

4.Redis 生成 ID

原理:利用 Redis 的INCR或INCRBY命令,以原子操作的方式递增一个键的值,以此作为 ID。也可以结合时间戳等信息生成更有意义的 ID。

优点

  • 性能高,Redis 基于内存操作,处理速度快,能应对高并发的 ID 生成需求。
  • 可扩展性好,Redis 本身支持集群部署,可以方便地扩展以满足更大规模的系统需求。

缺点

  • 依赖外部组件,若 Redis 出现故障,会影响 ID 的生成。
  • 没有内置的时间顺序性,如果需要有序 ID,需要额外处理。

5.美团 Leaf

原理:美团开源的分布式 ID 生成系统,支持两种模式。一是 “雪花算法” 模式,适用于强依赖 ID 有序性的场景;二是 “segment(号段)” 模式,服务端一次性分配一个号段给客户端,客户端在号段内自行生成 ID,用完后再向服务端申请新号段。

优点

  • 灵活性高,可根据不同业务场景选择不同模式,满足多样化的需求。
  • 高性能,“segment” 模式下,客户端在本地生成 ID,减少了与服务端的交互,提高了性能。

缺点

  • 实现相对复杂,需要搭建和维护 Leaf 服务。
  • 在 “segment” 模式下,如果号段设置不合理,可能会导致号段浪费或不足的情况。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词