常用的分布式 ID 设计方案

文章目录

  • 1.UUID
  • [2.数据库自增 ID](#2.数据库自增 ID)
  • 3.雪花算法
  • [4.Redis 生成 ID](#4.Redis 生成 ID)
  • [5.美团 Leaf](#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" 模式下,如果号段设置不合理,可能会导致号段浪费或不足的情况。
相关推荐
小刘爱喇石( ˝ᗢ̈˝ )2 小时前
行式数据库与列式数据库区别
数据库·分布式
MiniFlyZt3 小时前
消息队列MQ(RabbitMQ)
spring boot·分布式·微服务·rabbitmq
qxlxi4 小时前
【分布式】聊聊分布式id实现方案和生产经验
分布式·架构
&星辰入梦来&4 小时前
RabbitMQ 从入门到精通
分布式·rabbitmq
小袁拒绝摆烂4 小时前
RabbitMQ从入门到实战-2
分布式·rabbitmq
对许5 小时前
Hadoop的运行模式
大数据·hadoop·分布式
穿越在未来5 小时前
【RabbitMQ】Producer之TTL过期时间 - 基于AMQP 0-9-1
分布式·消息队列·rabbitmq·消息中间件·rabbitmq ttl
可乐cc呀7 小时前
kafka单机部署实战
分布式·zookeeper·kafka
StableAndCalm7 小时前
什么是zookeeper
分布式·zookeeper·云原生