IdGenerator是一款基于Snowflake算法的高性能唯一数字ID生成器,适用于分布式系统中的ID生成。IdGenerator优化的雪花算法—雪花漂移算法,在缩短ID长度的同时,具备极高瞬时并发处理能力(50W/0.1s)。IdGenerator原生支持 C#/Java/Go/Rust/C/JavaScript/TypeScript/Python/Pascal 多语言,提供适用于其它语言的多线程安全调用动态库(FFI)。支持容器环境自动扩容(自动注册 WorkerId ),单机或分布式唯一IdGenerator。

IdGenerator特点

  • 整形数字,随时间单调递增(不一定连续),长度更短,用50年都不会超过 js Number类型最大值。(默认配置)
  • 速度更快,是传统雪花算法的2-5倍,0.1秒可生成50万个(基于8代低压i7)。
  • 支持时间回拨处理。比如服务器时间回拨1秒,本算法能自动适应生成临界时间的唯一ID。
  • 支持手工插入新ID。当业务需要在历史时间生成新ID时,用本算法的预留位能生成5000个每秒。
  • 不依赖任何外部缓存和数据库。(k8s环境下自动注册 WorkerId 的动态库依赖 redis)
    基础功能,开箱即用,无需配置文件、数据库连接等。

IdGenerator的性能问题

关于IdGenerator的性能问题,以下给出3组最佳实践配置:

  • 如果生成ID速度不超过5W/s,不用修改任何配置参数
  • 如果生成ID速度超过5W/s,低于50W,推荐修改:SeqBitLength=10
  • 如果生成ID速度超过50W/s,接近500W,推荐修改:SeqBitLength=12

总之,增加 SeqBitLength 会让性能更高,但生成的 ID 也会更长。

IdGenerator算法介绍

  • 这是优化的雪花算法(雪花漂移),它生成的ID更短、速度更快。
  • 支持 k8s 等容器环境自动扩容(自动注册 WorkerId),可在单机或分布式环境生成数字型唯一ID。
  • 原生支持 C#/Java/Go/C/Rust/Python/Node.js/PHP(C扩展)/SQL/ 等语言,并提供多线程安全调用动态库(FFI)。
  • 兼容所有雪花算法(号段模式或经典模式,大厂或小厂),将来你可做任意的升级切换。
  • 这是计算机历史上最全面的雪花ID生成工具。【截至2022年8月】

IdGenerator已实现的语言

C# 、Java、Go、Rust、Python、C、C (PHP扩展)、Delphi (Pascal)、JavaScript、TypeScript、V、D

IdGenerator 在C#、.NET中的使用

IdGenerator 在C# .NET中的运行环境:.NET Standard 2.0+ (支持:.net framework4.6.1+/.net core 2.0+/.net5/.net6+/mono5.4+/Unity 2018+/Xamarin/)

引用 nuget 包

dotnet add package Yitter.IdGenerator --version 1.0.14
//或
NuGet\Install-Package Yitter.IdGenerator -Version 1.0.14

基本使用方法:

在应用启动时,全局初始化一次

var options = new IdGeneratorOptions(Your_Unique_Worker_Id);
// 保存参数(务必调用,否则参数设置不生效):
YitIdHelper.SetIdGenerator(options);
// 初始化后,在任何需要生成ID的地方,调用以下方法:
var newId = YitIdHelper.NextId();

.NET 中的使用方法

1、ConfigureServices中注册

public void ConfigureServices(IServiceCollection services)
{
    // 配置雪花Id算法
    YitIdHelper.SetIdGenerator(new IdGeneratorOptions
    {
        WorkerId = 1// 取值范围0~63,默认1
    });
}

2、.NET 7及以上可以在Program.cs中进行注册:

var builder = WebApplication.CreateBuilder(args);
builder.Host.UseIdHelper()
//UseIdHelper 扩展
public static IHostBuilder UseIdHelper(this IHostBuilder hostBuilder)
{
    hostBuilder.ConfigureServices((buidler, services) =>
    {
        var options = new IdGeneratorOptions(buidler.Configuration["WorkerId"].ToUshort());
        YitIdHelper.SetIdGenerator(options);
    });
    return hostBuilder;
}

可以在任意需要雪花ID的地方使用

var newId = YitIdHelper.NextId();
07-16 18:22