高性能分布式ID生成器yitter/IdGenerator完整使用指南

yitter/IdGenerator是一个基于优化雪花算法的高性能唯一数字ID生成器,支持C#、Java、Go、Rust等主流编程语言。该项目通过雪花漂移算法实现了更短的ID长度和更高的生成速度,是构建分布式系统的理想选择。

【免费下载链接】IdGenerator 💎多语言实现,高性能生成唯一数字ID。 💎优化的雪花算法(SnowFlake)——雪花漂移算法,在缩短ID长度的同时,具备极高瞬时并发处理能力(50W/0.1s)。 💎原生支持 C#/Java/Go/Rust/C/JavaScript/TypeScript/Python/Pascal 多语言,提供其它适用于其它语言的多线程安全调用动态库(FFI)。💎支持容器环境自动扩容(自动注册 WorkerId ),单机或分布式唯一IdGenerator。💎顶尖优化,超强效能。 【免费下载链接】IdGenerator 项目地址: https://gitcode.com/gh_mirrors/id/IdGenerator

核心功能特性

该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生成需求。

【免费下载链接】IdGenerator 💎多语言实现,高性能生成唯一数字ID。 💎优化的雪花算法(SnowFlake)——雪花漂移算法,在缩短ID长度的同时,具备极高瞬时并发处理能力(50W/0.1s)。 💎原生支持 C#/Java/Go/Rust/C/JavaScript/TypeScript/Python/Pascal 多语言,提供其它适用于其它语言的多线程安全调用动态库(FFI)。💎支持容器环境自动扩容(自动注册 WorkerId ),单机或分布式唯一IdGenerator。💎顶尖优化,超强效能。 【免费下载链接】IdGenerator 项目地址: https://gitcode.com/gh_mirrors/id/IdGenerator

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值