Skip to content

bwangelme/order-id-generator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

分布式订单号生成器

基于 Snowflake 算法的分布式订单号生成器,使用 ZooKeeper 进行节点管理和协调。

功能特点

  • 基于 Snowflake 算法生成全局唯一的订单号
  • 使用 ZooKeeper 进行节点管理和协调
  • 支持自定义起始时间戳(epoch)
  • 自动处理节点 ID 分配
  • 支持时间回滚检测和处理
  • 提供健康检查接口
  • 支持优雅关闭

系统架构

组件

  1. 订单号生成服务

    • 基于 Snowflake 算法
    • 支持自定义起始时间戳
    • 41位时间戳 + 10位节点ID + 12位序列号
    • 时间回滚检测和处理机制
  2. ZooKeeper 协调服务

    • 节点注册和管理
    • 节点 ID 分配
    • 节点状态监控
    • 自动故障转移
  3. HTTP API 服务

    • 订单号生成接口
    • 健康检查接口
    • 优雅关闭支持

数据流程

  1. 启动流程

    服务启动 -> 连接 ZooKeeper -> 获取节点 ID -> 初始化 Snowflake 节点 -> 启动 HTTP 服务
    
  2. 订单号生成流程

    接收请求 -> 检查时间回滚 -> 生成订单号 -> 返回结果
    
  3. 节点管理流程

    定期更新节点信息 -> ZooKeeper 心跳检测 -> 自动故障转移
    

配置说明

环境变量

  • PORT: HTTP 服务端口(默认:8100)
  • HOSTNAME: 节点主机名(用于节点标识)

ZooKeeper 配置

// config/config.go
var (
    ZKPath           = "/snowflake"           // ZooKeeper 根路径
    ZKPersistentPath = "/snowflake/nodes"     // 持久节点路径
    ZKEphemeralPath  = "/snowflake/alive"     // 临时节点路径
    ZKUpdateInterval = 1 * time.Second        // 节点信息更新间隔
)

Snowflake 算法配置

// config/config.go
var (
    // 时间戳位数:41位,可以使用约69年
    timestampBits = 41
    // 节点ID位数:10位,支持1024个节点
    nodeIDBits = 10
    // 序列号位数:12位,每毫秒支持4096个序列号
    sequenceBits = 12

    // 自定义起始时间戳,默认为 2024-01-01 00:00:00 UTC
    SnowflakeEpoch = time.Date(2024, 1, 1, 0, 0, 0, 0, time.UTC).UnixMilli()
)

时间回滚配置

// config/config.go
var (
    // 时间回滚检测阈值
    TimeBackwardThreshold int64 = 10
)

API 接口

生成订单号

GET /order-id

Response: 1234567890123456789

健康检查

GET /health

Response: 服务正常,节点 ID: 1

部署说明

前置条件

  • Go 1.23.2 或更高版本
  • ZooKeeper 3.4.0 或更高版本

构建

go build -o order-id-generator

运行

# 设置环境变量
export PORT=8100
export HOSTNAME=node1

# 运行服务
./order-id-generator

监控和维护

日志

  • 使用 logrus 进行日志记录
  • 支持结构化日志
  • 包含详细的错误信息和警告

健康检查

  • 定期检查 ZooKeeper 连接状态
  • 监控节点状态
  • 检测时间回滚

故障处理

  • 自动重连 ZooKeeper
  • 节点 ID 自动重新分配
  • 时间回滚检测和处理

性能考虑

  • 使用互斥锁保护关键操作
  • 支持每毫秒生成 4096 个唯一 ID
  • 支持最多 1024 个节点
  • ID 可以使用约 69 年(从自定义起始时间开始)

注意事项

  1. 确保服务器时间同步
  2. 监控时间回滚情况
  3. 合理设置节点数量
  4. 定期检查 ZooKeeper 连接状态
  5. 注意自定义起始时间戳的设置,确保有足够的使用时间

未来优化方向

  1. 支持更多的配置选项
  2. 添加监控指标
  3. 优化性能
  4. 增加更多的容错机制
  5. 支持动态配置更新

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages