說說生成唯一 ID 的雪花算法是怎麼樣的?
每天一道面試題 16
悟空擰螺絲 2021-07-28
snowflake
(雪花算法):Twitter 開源的分布式 id 生成算法,64 位的 long 型的 id,分為 4 部分:
- 1 bit:不用,統一為 0
- 41 bits:毫秒時間戳,可以表示 69 年的時間。
- 10 bits:5 bits 代表機房 id,5 個 bits 代表機器 id。最多代表 32 個機房,每個機房最多代表 32 台機器。
- 12 bits:同一毫秒内的 id,最多 4096 個不同 id,自增模式
- 毫秒數在高位,自增序列在低位,整個ID都是趨勢遞增的。
- 不依賴資料庫等第三方系統,以服務的方式部署,穩定性更高,生成ID的性能也是非常高的。
- 可以根據自身業務特性配置設定bit位,非常靈活。
- 強依賴機器時鐘,如果機器上時鐘回撥(可以搜尋 2017 年閏秒 7:59:60),會導緻發号重複或者服務會處于不可用狀态。