08.02 借用Snowflake在JAVA代碼生成不重複唯一ID

說說Snowflake思想,來自Twitter吧

Snowflake算法

snowflake是Twitter開源的分佈式ID生成算法,結果是一個long型的ID。其核心思想是:使用41bit作為毫秒數,10bit作為機器的ID(5個bit是數據中心,5個bit的機器ID),12bit作為毫秒內的流水號(意味著每個節點在每毫秒可以產生 4096 個 ID),最後還有一個符號位,永遠是0。

借用Snowflake在JAVA代碼生成不重複唯一ID

這個算法單機每秒內理論上最多可以生成1000*(2^12),也就是409.6萬個ID。

Java代碼

借用Snowflake在JAVA代碼生成不重複唯一ID

Snowflake算法稍微調整下位段:

  • sign(1bit)
  • 固定1bit符號標識,即生成的暢途分佈式唯一id為正數。
  • delta seconds (38 bits)
  • 當前時間,相對於時間基點"2017-12-21"的增量值,單位:毫秒,最多可支持約8.716年
  • worker id (15 bits)
  • 機器id,最多可支持約3.28萬個節點。
  • sequence (10 bits)
  • 每秒下的併發序列,10 bits,這個算法單機每秒內理論上最多可以生成1000*(2^10),也就是100W的ID,完全能滿足業務的需求。

大佬公司

百度 ------- uid-generator產生就是基於這種情況做的(每次取一批迴來,很好的思想,性能也非常不錯)https://github.com/baidu/uid-generator。

美團 ------ Leaf 點評分佈式ID生成系統(https://tech.meituan.com/MT_Leaf.html)

源碼:私信咯。


分享到:


相關文章: