分佈式 ID 生成算法 -- Snowflake
Snowflake 是 Twitter 採用的一種分佈式 ID 生成算法。
核心
Snowflake 算法生成的 ID 包含四個部分:
-
最高一位
佔用
1 bit
,值始終是0
,沒有實際作用 -
時間戳
默認佔用
41 bit
,精確到毫秒,總共可以容納約 69 年的時間 -
工作機器 ID
佔用
10 bit
,高位5 bit
是數據中心 ID,低位5 bit
是工作節點 ID,最多可以容納1024
個節點。 -
序列號
佔用 12 bit,這個值在同一毫秒同一節點上從
0
開始不斷累加,最多可以累加到4095
因此 SnowFlake 算法在同一毫秒內在單一節點上可以生成 4096
個全局唯一 ID,考慮到最大 1024
個節點,因此 SnowFlake 算法在同一毫秒內可以生成 1024 * 4096
個全局唯一 ID。
除最高位外,其餘三組佔位均可浮動,視具體業務需求而定。
與 UUID 的對比
- UUID(Universally Unique Identifier),通用唯一識別碼,佔用 32 位的無序字符串,入庫性能較差