timechannel分布式GUID的设计(snowflake的一种实现)

timechannel算法的由来

受snowflake算法的启发,我们把64个bit位拆分成两个部分,一个部分是时间,另外一个部分是序列号,这样就可以看成一个二维的空间。然后我们将序列号bit位再分成两个部分,前部是频道,后部是序号,那么每个频道都会包含一组私有的序号。这个结构就像是把时间轴线上有很多频道,所以命名为timechannel。


timechannel.jpg

bit位的划分

默认划分如下:

timechannel-bit.jpg

项目中允许自由配置分段,在实现中增加了group的概念,但默认为0 bit。
完整bit划分如下:
1-bit unused + 42-bit timestamp + 0-bit group + 11-bit channel + 12-bit sequence = 64

算法的实现

租约的申请与续期

为了保证guid生成的效率,项目中采用异步线程的提前续期,续期间隔为ttl的1/2


timechannel-lease.jpg

guid的生成

此项与大多数实现都相似,只是这里用了租约,简化了这部分的实现。


timechannel-generate.jpg

项目开源地址

antonybi/timechannel.java: Lightweight GUID SDK (github.com)


注:本文档为GitHub开源项目README的补充内容,更多内容请点击查看timechannel开源项目。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容