Skip to content

Optimized 'snowflake' ID generator. Compatible time backtracking.

License

Notifications You must be signed in to change notification settings

glowdan/snowflake

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 

Repository files navigation

another snowflake

Optimized 'snowflake' ID generator. Compatible time backtracking.

snowflake优点

  1. 不依赖中心服务器
  2. 随机性高

snowflake缺点

  1. 受时间回拨影响较大
  2. 可支持的工作线程为1024个

本项目改进点

  1. 调整时间微秒至秒
  2. 调整实例ID至最后,在单实例上的服务上可以实现按照大小对比顺序

区间分配

A. 0 1bit 不用。

B. 32位 秒级

C. 16位 序列号 6.5万 单进程不需要扩容

D. 15位 3.2万 最大支持160个实例,每个实例100线程或者进程。可以按照不同的业务进行区分。

优化后参数

每秒容量 2^31 = 21.47亿。原方案 每秒支持 41.9亿

总容量支撑135.8年,2^32/86400/366=135.8。原方案 可以支持 68年

机器码采用redis incr方案,或者使用MySQL 自增ID。不需要考虑这个服务的性能,只有启动及特殊情况需要进行同步。

把毫秒转换到秒之后,富余了9位,可以留给后面进程使用。

原方案的时间兼容性 较低,只支持1024个节点。假设机器ID需要复用,就必定会出现重复ID 扩充机器ID从10到15,扩充序列号从12到16。 机器ID扩大32倍之后,给了我们很大的可操作空间。比如可以随时更换新ID,而不是唯一。可以按照业务分配ID,用以区分。

初始数字可以使用随机,而不是从0开始 0~2^10,这样对于避免猜出实际调用量有意义。

性能测试,一秒钟能生成5亿。大多数时间消耗在了时间获取上。

About

Optimized 'snowflake' ID generator. Compatible time backtracking.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages