常用的分布式 ID 设计方案

server/2025/3/6 20:45:15/

文章目录

  • 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” 模式下,如果号段设置不合理,可能会导致号段浪费或不足的情况。

http://www.ppmy.cn/server/172964.html

相关文章

深入理解设计模式中的工厂模式(Factory Pattern)

各类资料学习下载合集 ​​https://pan.quark.cn/s/8c91ccb5a474​​ 工厂模式是创建对象的一种设计模式,属于创建型设计模式。它提供了一种方法来创建对象,而无需在代码中直接指定对象的具体类。工厂模式通过将对象的创建过程封装起来,使得代码更加灵活、可维护…

windows 上删除 node_modules

在 Windows 11 上,你可以通过命令行来删除 node_modules 文件夹并清除 npm 缓存。以下是具体步骤: 删除 node_modules 打开命令提示符(Command Prompt)或终端(PowerShell)。 导航到项目目录。你可以使用 …

芯科科技通过全新并发多协议SoC重新定义智能家居连接

MG26系列SoC现已全面供货,为开发人员提供最高性能和人工智能/机器学习功能 致力于以安全、智能无线连接技术,建立更互联世界的全球领导厂商Silicon Labs(亦称“芯科科技”,NASDAQ:SLAB),日前宣…

Spring Boot 常用注解全解析:从核心到进阶的实践指南

目录 引言:为什么注解是Spring Boot开发者的“战略武器”? 一、核心启动注解 1.1 应用启动三剑客 二、Web开发注解 2.1 控制器层注解 三、依赖注入注解 3.1 依赖管理矩阵 四、数据访问注解 4.1 JPA核心注解 五、配置管理注解 5.1 配置绑定注解…

【javaEE】计算机是如何工作的(基础常识)

1.❤️❤️前言~🥳🎉🎉🎉 Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的…

【2025.3最新版】从零开始的CSS网页开发学习笔记 1(包含CSS简介 CSS基础选择器 CSS字体属性 CSS文本属性 CSS引入方式)

文章目录 CSS简介CSS基本介绍CSS基本语法规范CSS代码风格 CSS基础选择器选择器的作用和分类标签选择器类选择器id选择器通配符选择器 CSS字体属性font-family 字体类型设置font-size 字体大小设置font-weight 字体粗细设置font-style 字体样式设置font 字体复合属性设置 CSS文本…

Checkpoint 模型与Stable Diffusion XL(SDXL)模型的区别

Checkpoint 模型与 Stable Diffusion XL(SDXL)模型 在功能、架构和应用场景上有显著区别,以下是主要差异的总结: 1. 基础架构与定位 Checkpoint 模型 是基于 Stable Diffusion 官方基础模型(如 SD 1.4/1.5)…

大语言模型(LLM)和嵌入模型的统一调用接口

ChatModelFactory、EmbeddingModelFactory 讲解代码:import os from dotenv import load_dotenv, find_dotenv_ load_dotenv(find_dotenv())from langchain_openai import ChatOpenAI, OpenAIEmbeddings, AzureChatOpenAI, AzureOpenAIEmbeddingsclass ChatModelF…