分布式ID方案

目录

[📊 分布式ID方案核心指标对比](#📊 分布式ID方案核心指标对比)

[🔍 分方案深度解析](#🔍 分方案深度解析)

[⚙️ 1. UUID (Universally Unique Identifier)](#⚙️ 1. UUID (Universally Unique Identifier))

[❄️ 2. Snowflake (Twitter开源)](#❄️ 2. Snowflake (Twitter开源))

[☘️ 3. 美团Leaf](#☘️ 3. 美团Leaf)

号段模式

Snowflake模式

[🔄 4. 百度UidGenerator](#🔄 4. 百度UidGenerator)

[🚀 5. CosId](#🚀 5. CosId)

[💎 选型建议](#💎 选型建议)



📊 分布式ID方案核心指标对比

方案 唯一性 有序性 吞吐量 存储空间 自治性 典型场景
UUID 全局唯一 完全无序 300万/秒 128位 完全自治 会话ID、临时文件
Snowflake 全局唯一 趋势递增 409.6万/秒 64位 依赖时钟 订单ID、日志追踪
美团Leaf 全局唯一 本地单调递增 5万+/秒 (远程) 64位 弱依赖DB 金融交易、高可用系统
百度Uid 全局唯一 时间趋势递增 600万+/秒 64位 依赖RingBuffer 高并发写入场景
CosId 全局唯一 本地严格递增 1.27亿+/秒 64位 灵活依赖存储 分库分表、极致性能需求

🔍 分方案深度解析

⚙️ 1. UUID (Universally Unique Identifier)
  • 原理 :基于MAC地址、时间戳、随机数拼接后哈希生成128位标识符(如 123e4567-e89b-12d3-a456-426614174000)。

  • 优点:无中心节点、生成简单、全球唯一。

  • 缺点:

    • 长度大:128位存储效率低,数据库索引膨胀;

    • 完全无序:导致数据库插入频繁页分裂,性能骤降;

    • 安全隐患:版本1可能泄露MAC地址。

  • 适用场景:临时令牌、文件命名、非数据库主键场景。

❄️ 2. Snowflake (Twitter开源)
  • 官网: https://github.com/twitter/snowflake

  • 原理:64位ID = 时间戳(41位) + 机器ID(10位) + 序列号(12位),实现本地生成。

  • 优点:

    • 趋势递增:利于数据库B+树索引优化;

    • 高性能:单机可达409.6万ID/秒。

  • 致命问题:

    • 时钟回拨:服务器时间倒退导致ID重复(需人工干预);

    • 机器ID管理难:动态扩缩容时需保障ID唯一性。

  • 改进方向:Leaf-Snowflake 通过ZK缓存workerId弱依赖。

☘️ 3. 美团Leaf
号段模式
  • 原理:预分配ID段(如1,1000),内存分发,异步更新数据库。

  • 优化演进:

    • 双Buffer:DB故障时无缝切换备用号段,实现高可用5;

    • 动态Step:根据QPS自动调整号段长度(如QPS↑ → Step×2)。

  • 性能:远程调用QPS 5W+,TP99 <1ms。

Snowflake模式
  • 解决workerId依赖:ZK分配 + 本地缓存,宕机时降级使用历史workerId。
🔄 4. 百度UidGenerator
  • 源码地址: https://github.com/baidu/uid-generator

  • 核心改进:

    • RingBuffer预缓存:提前生成ID填充环形队列,并发取号时无锁;

    • 借时机制:当前毫秒序号耗尽时,"借用"未来时间戳继续生成。

  • 局限:

    • 默认时间戳仅支持8.7年(41位设计);

    • WorkerId复用策略缺失,扩容受限。

🚀 5. CosId
  • 官网: SegmentId | CosId

  • 源码地址:https://github.com/Ahoo-Wang/CosId

  • 架构创新:

    • SegmentChainId:无锁号段链,基于饥饿状态动态扩容安全距离,吞吐达1.27亿/秒;

    • SnowflakeId增强:解决时钟回拨、机器号动态分配、分片不均问题;

  • 多存储支持:JDBC/Redis/ZooKeeper号段分发器,适配不同基础设施。


💎 选型建议

  • 简单轻量 → UUID(非数据库场景);

  • 有序性与性能平衡 → Snowflake/Leaf-Snowflake(需解决时钟问题);

  • 高可用容忍DB故障 → Leaf号段模式(双Buffer容灾);

  • 极致性能需求 → CosId(无锁号段链);

  • 长期运行系统 → 慎用百度Uid(注意时间戳耗尽问题)。

💡 分布式ID的本质是权衡:唯一性、有序性、性能与运维复杂度需结合业务流量、数据库架构及运维能力综合决策。新一代方案如CosId通过架构创新显著提升性能边界,是分库分表等高并发场景的优选

相关推荐
Q26433650235 小时前
【有源码】基于Spark的电商客户细分与盈利洞察分析系统-面向精准营销的电商客户细分模型构建与盈利能力可视化研究
大数据·hadoop·分布式·数据挖掘·数据分析·spark·毕业设计
新思维软件7 小时前
基于无线传输的地衡系统:三节点 LoRa 组网与 MQTT 上云的分布式称重方案
分布式·stm32·单片机·嵌入式硬件·物联网·物联网开发
俊哥大数据7 小时前
Flink1.20.3 实时消费 Kafka 数据并解析入湖 Paimon1.4.2 全流程实战
分布式·flink·kafka·数据湖·paimon
宸津-代码粉碎机13 小时前
OpenAI 连夜迎战 Grok Bot 和 Muse:AI 智能体从 “会聊天” 到 “能办事”,现在入场还来得及吗
java·大数据·人工智能·分布式·python
程序猿乐锅15 小时前
【黑马点评 | 第八篇】Redisson分布式锁
java·数据库·spring boot·redis·分布式·spring·缓存
灯澜忆梦16 小时前
【RabbitMQ #7】 | 消息转换器
分布式·rabbitmq·ruby
需要82616 小时前
分布式事务:Seata AT/TCC/SAGA 的取舍与踩坑
java·spring boot·分布式·spring·spring cloud
CS创新实验室19 小时前
为什么三台机器就能选出一个“带头大哥“?——Raft 一致性算法,一次讲透
分布式·操作系统
本人手速666+21 小时前
企微开发API如何设计客户冻结状态?WeComApi 在删除、投诉和异常客户场景中的自动化边界
运维·分布式·自动化·企业微信·企微外部群开发·wecomapi·企业微信二次开发
灯澜忆梦1 天前
【RabbitMQ #4】 | Work 任务模型
分布式·rabbitmq