timechannel算法的由来
受snowflake算法的启发,我们把64个bit位拆分成两个部分,一个部分是时间,另外一个部分是序列号,这样就可以看成一个二维的空间。然后我们将序列号bit位再分成两个部分,前部是频道,后部是序号,那么每个频道都会包含一组私有的序号。这个结构就像是把时间轴线上有很多频道,所以命名为timechannel。
bit位的划分
默认划分如下:
项目中允许自由配置分段,在实现中增加了group的概念,但默认为0 bit。
完整bit划分如下:
1-bit unused
+ 42-bit timestamp
+ 0-bit group
+ 11-bit channel
+ 12-bit sequence
= 64
算法的实现
租约的申请与续期
为了保证guid生成的效率,项目中采用异步线程的提前续期,续期间隔为ttl的1/2
guid的生成
此项与大多数实现都相似,只是这里用了租约,简化了这部分的实现。
项目开源地址
antonybi/timechannel.java: Lightweight GUID SDK (github.com)
注:本文档为GitHub开源项目README的补充内容,更多内容请点击查看timechannel开源项目。