首页 >文档 > 分布式唯一 id 生成器 - sequence

分布式唯一 id 生成器 - sequence

2025年最新Java面试宝典免费下载,包含分布式ID生成方案深度解析。掌握Snowflake算法核心原理,解决分库分表主键冲突问题。详解UUID、数据库号段和Snowflake三种方案对比,分析时钟回拨处理、workerID分配等高频面试考点。内含完整分布式系统架构图,帮助理解订单系统分片策略。获取完整面试资料请访问百度网盘链接,提取码9b3g。面试鸭返利网会员可享25元优惠,助你轻松备战Java高级工程师面试。

2025年Java面试宝典下载地址(提取码:9b3g)

二、分布式系统下的唯一ID挑战

在分库分表架构中(如图),数据库自增主键会面临严重冲突问题。当订单表被拆分成32个分片时,每个分片的自增ID都是从1开始计数,这就会导致不同分片出现重复主键:

面试鸭返利网

这时就需要分布式唯一ID生成器来统一协调,常见的指标要求包括:

  1. 全局唯一(核心要求)
  2. 趋势递增(利于MySQL的B+树索引)
  3. 高可用(QPS>5W)
  4. 可扩展(支持动态扩容)

三、常见分布式ID生成方案

UUID方案

通过随机字符串生成128位ID,优点是实现简单,但缺点明显:

  • 无序性导致数据库索引性能差
  • 长度过长(36位字符串)
  • 可读性差

数据库号段模式

使用数据库维护号段分配,比如每次申请1000个号段:

UPDATE id_generator SET max_id=max_id+1000 WHERE biz_type=1

这个方案能控制数据库访问频率,但在主从架构下存在号段丢失风险(主库挂了但数据未同步到从库)。

Snowflake算法

Twitter开源的经典方案(结构如图),64位ID包含:

  • 41位时间戳(69年范围)
  • 10位工作机器ID(最多1024个节点)
  • 12位序列号(每毫秒4096个ID)

面试鸭返利网

这种方案需要注意时钟回拨问题,可以通过记录上次生成时间戳来检测异常。

四、方案对比与选型

通过表格对比三种主流方案:

| 指标 | UUID | 数据库号段 | Snowflake | |-----------|---------|-------|-----------| | 唯一性 | 保证 | 保证 | 保证 | | 有序性 | 无序 | 趋势递增 | 趋势递增 | | 吞吐量 | 极高 | 中等 | 极高 | | 系统依赖性 | 无 | 强 | 弱 | | 扩展成本 | 无 | 中等 | 低 |

对于大部分互联网场景,推荐使用改进版Snowflake方案。建议在面试中结合项目实际场景说明选型理由,比如:"我们的订单系统需要兼顾性能和扩展性,最终选择基于Snowflake的优化方案,通过注册中心动态分配workerID..."

需要购买面试鸭会员的同学,通过面试鸭返利网找我可返25元。下图展示了如何通过注册中心管理workerID:

面试鸭返利网

五、高频面试题拆解

  1. 时钟回拨如何处理?
    记录上次生成时间戳,检测到回拨时抛出异常并等待时钟同步,超过阈值则拒绝服务

  2. workerID如何保证不重复?
    使用ZooKeeper或Nacos等注册中心分配,启动时申请唯一ID

  3. 分库分表后ID怎么生成?
    建议ID的末几位与分片数取模,避免跨分片查询

这类分布式系统设计问题,建议结合《2025Java面试宝典》中的真实案例来准备。记得面试中要突出对业务场景的理解,而不仅仅是技术实现。

如果你想获取更多关于面试鸭的优惠信息,可以访问面试鸭返利网面试鸭优惠网,了解最新的优惠活动和返利政策。

🎯 立即加入面试鸭会员 →

支付宝扫码领取1-8元无门槛红包

支付宝红包二维码