欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 美景 > 分布式ID生成方案详解

分布式ID生成方案详解

2025/4/29 16:24:27 来源:https://blog.csdn.net/chunmiao3032/article/details/147503943  浏览:    关键词:分布式ID生成方案详解

分布式ID生成方案详解


一、问题背景


分库分表场景下,传统自增ID会导致不同库/表的ID重复,需要分布式ID生成方案解决以下核心需求:
•全局唯一性:跨数据库/表的ID不重复
•有序性:利于索引优化和范围查询
•高性能:满足高并发场景需求
•高可用:避免单点故障
•可扩展性:支持业务扩容


二、主流解决方案


1. 自增步长调整


实现原理:
•每个分片设置不同的起始值和步长
•示例:3个分片设置步长为3
  - 分片1:1,4,7...
  - 分片2:2,5,8...
  - 分片3:3,6,9...
优点:
•实现简单
•天然有序
缺点:
•无法扩容(步长固定后难以修改)
•数据迁移困难
•不同分片数据量差异大时可能产生ID浪费


2. 号段模式(Segment)


实现原理:
•数据库维护号段表结构:
  ```sql
  CREATE TABLE idsegment (
    biztag VARCHAR(128) PRIMARY KEY,  -- 业务标识
    maxid BIGINT NOT NULL,            -- 当前最大ID
    step INT NOT NULL,                 -- 号段长度
    version BIGINT NOT NULL            -- 乐观锁版本号
  );
  ```
•应用缓存号段范围(如1-1000),用尽后申请新号段
优点:
•数据库压力小(批量获取)
•可自定义步长
缺点:
•存在单点故障风险
•号段耗尽时可能产生短暂延迟
•需要维护版本号保证并发安全


3. UUID方案


实现特点:
•标准格式:32字符16进制字符串(8-4-4-4-12)
•示例:`550e8400-e29b-41d4-a716-446655440000`
优点:
•完全分布式生成
•无网络开销
缺点:
•无序性导致插入性能差(B+树频繁分裂)
•字符串存储空间大(36字节)
•无法保证趋势递增
•索引效率低(建议作为二级索引)
优化方案:
•主键使用自增ID,UUID作为业务唯一标识


4. Redis方案


实现方式:
INCR global:id  # 原子操作生成连续ID
持久化策略:
方式特点风险
RDB定时快照可能丢失最新数据
AOF命令追加恢复速度慢但数据完整

优点:
•高性能(单机10w+ QPS)
•数字类型天然有序
缺点:
•需处理Redis单点问题(推荐集群)
•持久化策略选择影响可靠性


5. 雪花算法(Snowflake)


64位结构:
```
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        时间戳(41bit)                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
时间戳节点ID(10bit)序列号(12bit)

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
```
各字段说明:
•时间戳(41bit):精确到毫秒,可用约69年(从起始时间计算)
•节点ID(10bit):支持1024个节点
•序列号(12bit):每毫秒4096个ID
优点:
•高性能(单机4,096,000 ID/秒)
•趋势递增
•数字类型存储高效
致命问题:
•时间回拨:服务器时间回调导致ID重复
•解决方案:
  - 时钟同步服务(NTP)
  - 短暂回拨等待时钟追平
  - 严重回拨报警人工介入


三、大厂开源方案


四、方案对比

五、选型建议


•中小规模系统:Redis方案(简单高效)
•高并发场景:雪花算法(需解决时间回拨)
•需要弹性扩展:号段模式+数据库集群
•业务隔离需求:多业务使用不同号段biztag


六、未来趋势


1. 混合模式:动态切换号段与雪花算法
2. 去中心化:结合区块链技术实现分布式共识
3. 智能调整:根据业务压力自动调整号段长度
 


 

版权声明:

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

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

热搜词