号段模式

号段模式(Segment)是一种高性能的分布式 ID 生成方案,它通过预分配 ID 号段来实现高性能。

基本原理

1. 号段定义

号段: 一段连续的 ID 范围,例如 [1000, 2000]。


工作流程

1. 从数据库获取号段:[1000, 2000]
2. 本地分配 ID:1001, 1002, 1003, ...
3. 号段用完,获取新号段:[2000, 3000]
4. 重复步骤 2-3

2. 号段表设计

表结构

数据设计要点

  • 核心是在 id_segment 里保存业务事实,而不是把规则散落在应用逻辑里。
  • 索引服务于高频查询,重点是缩小扫描范围,而不是堆更多字段。
  • 关键字段包括 idbusiness_typemax_idstepversioncreated_atupdated_at,它们决定后续查询和管理能力。

初始化数据

数据设计要点

  • 关键字段包括 INSERT,它们决定后续查询和管理能力。

基本实现

1. 获取号段

Java 实现


2. 号段生成器

Java 实现


双 Buffer 机制

1. 原理

使用两个号段 Buffer,一个当前使用,一个预加载。


架构

┌─────────────────┐  ┌─────────────────┐
│  Buffer 1       │  │  Buffer 2       │
│  [1000, 2000]   │  │  [2000, 3000]   │
│  当前使用       │  │  预加载         │
└─────────────────┘  └─────────────────┘
         ↓                    ↓
    分配 ID            等待切换

2. 实现


性能分析

1. 性能优势

✅ 本地分配 ID,无网络开销
✅ 批量获取,减少数据库访问
✅ 双 Buffer,零等待
✅ 高并发支持

2. 性能测试

单线程:1,000,000 QPS
多线程(10):5,000,000 QPS
多线程(100):10,000,000 QPS
延迟:< 0.001ms

适用场景

✅ 适合使用

1. 超高并发系统

QPS > 1,000,000
极低延迟要求

2. 大规模系统

用户量 > 1000万
需要高可用

❌ 不适合使用

1. 小型系统

复杂度高
维护成本高

总结

号段模式评价

维度评分说明
唯一性⭐⭐⭐⭐⭐数据库保证
有序性⭐⭐⭐⭐⭐严格递增
性能⭐⭐⭐⭐⭐超高性能
可用性⭐⭐⭐⭐需要数据库
扩展性⭐⭐⭐⭐分布式友好

使用建议

强烈推荐

✅ 超高并发系统
✅ 大规模系统
✅ 需要极致性能

下一步

了解了号段模式后,我们学习系统架构设计。

👉 下一节:设计原则