Twitter 类似 Snowflake 的 ID 生成器 (适用于 .Net)
Twitter 类似的 Snowflake ID 生成器,适用于 .Net。可作为 Nuget 包 使用。
在某些情况下,您需要一个低延迟、分布式、无协调、(大致)按时间顺序排序、紧凑且高可用性的 Id 生成系统。本项目受到 Twitter 的 Snowflake 项目的启发,该项目已被淘汰。请注意,本项目受到 Snowflake 的启发,但并非完全一致的实现。此库为 Id 生成提供了基础;它不提供分配这些 Id 的服务,也不提供生成器 Id(即"工作 ID")的协调。
IdGen 就像 Snowflake 一样生成 64 位的 Id。签名位 无法使用,因为这可能会导致某些无法使用无符号类型的系统出现错误的排序,或者使得正确的排序变得困难。因此,实际上,IdGen 生成 63 位的 Id。一个 Id 包含 3 部分:
不过,使用 IdStructure 类,您可以根据自己的需要调整创建的 ID 的结构;如果需要,可以使用 45 位时间戳、2 位生成器 ID 和 16 位序列。只要 3 部分(时间戳、生成器和序列)的总和为 63 位,您就可以继续使用了!
Id 的 timestamp 部分应该说得自明;默认情况下,它每毫秒都会增加一次,表示自特定纪元以来的毫秒数。然而,IdGen 依赖于 ITimeSource,该对象使用一个 'tick' 可以定义为任何值;无论是毫秒(默认值)、秒还是日或纳秒(硬件支持等允许)。默认情况下,IdGen 使用 2015-01-01 0:00:00Z 作为纪元,但您也可以指定自定义纪元。
Id 的 generator-id 部分是您要"配置"的部分;它可以对应主机、线程、数据中心或大洲:这取决于您。不过,generator-id 在系统中应是唯一的:如果您有多个主机或线程,则 generator-id 也应是唯一的。
暂无开放 Issues,或尚未同步最近议题。