雪花算法 是由Twitter公司開源的snowflake(雪花)算法。
簡單原理:
雪花算法會生成一個64位的二進制數據,為一個Long型。(轉換成字符串后長度最多19) ,其基本結構:
第一位:為未使用
第二部分:41位為毫秒級時間(41位的長度可以使用69年)
第三部分:5位datacenterId和5位workerId(10位的長度最多支持部署1024個節點)
第四部分:最后12位是毫秒內的計數(12位的計數順序號支持每個節點每毫秒產生4096個ID序號)
snowflake生成的ID整體上按照時間自增排序,並且整個分布式系統內不會產生ID碰撞(由datacenter和workerId作區分),並且效率較高。經測試snowflake每秒能夠產生26萬個ID。
缺點:
- 強依賴機器時鍾,如果機器上時鍾回撥,會導致發號重復或者服務會處於不可用狀態。
- 針對此,美團做出了改進:https://github.com/Meituan-Dianping/Leaf