当前位置: 首页 > news >正文

分布式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. 智能调整:根据业务压力自动调整号段长度
 


 

相关文章:

  • libconfig 写文件
  • 配置 RDP 远程桌面协议连接ubuntu服务器桌面
  • Redis是单线程的,如何提高多核CPU的利用率?
  • 大模型在直肠癌预测及治疗方案制定中的应用研究
  • Web4.0身份革命:去中心化身份系统的全栈实现路径
  • 开环增益?闭环增益?
  • 本土网盟推广孟加拉slot游戏出海营销优势
  • FWFT_FIFO和Standard_FIFO对比仿真
  • [OS_8] 终端和 UNIX Shell | 会话和进程组 | sigaction | dash
  • 同一页面下动态加载内容的两种方式:AJAX与iframe
  • 解析excel中的图片
  • Git命令行中vim的操作
  • 【T-MRMSM】文本引导多层次交互多尺度空间记忆融合多模态情感分析
  • 【计算机网络】IP地址
  • PPO 强化学习机械臂 IK 训练过程可视化利器 Tensorboard
  • 【深度强化学习 DRL 快速实践】近端策略优化 (PPO)
  • 七、函数重载与默认参数(Function Overloading Default Arguments)
  • 【Agent】LangManus深度解析:AI自动化框架的对比与langgraph原理
  • 短视频矩阵系统可视化剪辑功能开发,支持OEM
  • ASP.NET Core 自动识别 appsettings.json的机制解析
  • 强政神鸟——故宫里的乌鸦
  • 国务院同意在海南全岛和秦皇岛等15个城市(地区)设立跨境电子商务综合试验区
  • 税务部门曝光3起通过拆分经营骗享小规模纳税人税费优惠偷税案件
  • 乐聚创始人:人形机器人当前要考虑泡沫问题,年底或将进入冷静期
  • 中央空管办组织加强无人机“黑飞”“扰航”查处力度
  • 下周起上海浦东将投放5000万元消费券,预计分五周发放