yitter/IdGenerator是一个基于优化雪花算法的高性能唯一数字ID生成器,支持C#、Java、Go、Rust等主流编程语言。该项目通过雪花漂移算法实现了更短的ID长度和更高的生成速度,是构建分布式系统的理想选择。
核心功能特性
该ID生成器具备以下核心特性:
-
多语言原生支持:提供C#、Java、Go、C、Rust、Python、JavaScript、TypeScript等多种编程语言的实现。
-
自动扩容机制:支持在容器化环境中自动注册WorkerId,确保系统的高可用性。
-
时间回拨处理:能够自动适应服务器时间回拨,生成临界时间的唯一ID。
-
高性能并发:在默认配置下,0.1秒可生成50万个ID,具备极高的瞬时并发处理能力。
最佳实践配置
配置参数选择
根据不同的并发需求,建议采用以下配置方案:
低并发场景(不超过5W个/s) 无需修改任何配置参数,使用默认配置即可满足需求。
中等并发场景(5W-50W个/s) 推荐修改序列数位长参数:SeqBitLength=10
高并发场景(50W-500W个/s) 推荐修改序列数位长参数:SeqBitLength=12
Python使用示例
以下是一个完整的Python使用示例:
from source import options, generator, idregister
if __name__ == '__main__':
try:
# 连接redis进行自动注册
register = idregister.Register(host="127.0.0.1", port=6379)
# 获取worker id
worker_id = register.get_worker_id()
# 配置ID生成器参数
options = options.IdGeneratorOptions(worker_id=worker_id, seq_bit_length=10)
options.base_time = 12311111112
idgen = generator.DefaultIdGenerator()
idgen.set_id_generator(options)
# 生成唯一ID
uid = idgen.next_id()
print(f"Worker ID: {worker_id}")
print(f"Generated ID: {uid}")
print(f"Options: {options.__dict__}")
# 退出注册线程
register.stop()
except ValueError as e:
print(e)
自动注册WorkerId
在容器化部署环境中,系统支持通过Redis自动注册全局唯一的WorkerId。自动注册流程如下:
自动注册的核心接口定义:
// 注册一个WorkerId,会先注销所有本机已注册的记录
extern GoInt32 RegisterOne(char* ip, GoInt32 port, char* password, GoInt32 maxWorkerId);
// 注销本机已注册的WorkerId
extern void UnRegister();
// 检查本地WorkerId是否有效(0-有效,其它-无效)
extern GoInt32 Validate(GoInt32 workerId);
性能优化策略
线程安全设计
该算法原生支持多线程安全调用,无需额外加锁操作。在多线程环境中直接调用ID生成方法即可保证ID的唯一性。
参数调优建议
-
WorkerIdBitLength:机器码位长,默认值6,决定WorkerId的最大值。
-
SeqBitLength:序列数位长,默认值6,取值范围[3, 21],建议不小于4。
-
BaseTime:基础时间,是生成ID的时间基准点,一般无需修改。
实际应用场景
电商订单系统
在电商平台的订单生成场景中,该ID生成器能够确保每个订单号的唯一性,同时保持生成的ID随时间单调递增,便于订单数据的时序分析。
物联网设备管理
在物联网系统中,为大量设备生成唯一标识符时,该工具的高并发处理能力能够满足设备快速注册和管理的需求。
配置变更注意事项
在系统运行过程中进行配置变更时,需要注意以下原则:
-
BaseTime只能设置为更旧的时间点,确保生成的ID值较历史最大值更大。
-
增加WorkerIdBitLength或SeqBitLength是允许的,但应慎用减小操作。
-
如果必须减小某个BitLength值,需要确保新的两个BitLength之和大于旧值之和。
异常处理机制
算法会抛出所有异常,外部系统应捕获异常并做好应对处理。特别是在时间回拨等异常情况下,系统能够自动适应并继续提供可用的ID生成服务。
通过合理配置和使用yitter/IdGenerator,开发者可以构建出高性能、高可用的分布式系统,满足各种业务场景下的唯一ID生成需求。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




