介紹:
snowflake是 Twitter公司 開源的 分布式ID生成 算法
2020年8月4日,《蘇州高新區·2020胡潤全球獨角獸榜》發布,雪花算法排名第17位
那么,本人來通過 一張圖 基本展示下 雪花算法
的 原理:
原理:
相信有同學不理解上圖的內容,
那么,本人來 解釋 下上圖的內容:
解釋:
- 最高位是符號位,始終為0,不可用。
- 41位的時間序列,精確到毫秒級,41位的長度可以使用69年。
時間位還有一個很重要的作用是可以根據時間進行排序。
注意,41位時間截不是存儲當前時間的時間截,而是存儲時間截的差值(當前時間截 - 開始時間截) 后得到的值,
這里的 開始時間戳,一般是我們的 id生成器開始使用的時間,
由我們程序來指定的(如下下面程序SnowFlake類的START_STMP屬性)
41位 的時間截,可以使用69年,
$$ 年T = (1L << 41) / (1000L * 60 * 60 * 24 * 365) = 69 $$- 10位的機器標識,
(5bit是 數據中心,5bit是 機器ID)
10位的長度最多支持部署1024個節點。- 12位的計數序列號,序列號即一系列的自增id,可以支持同一節點同一毫秒生成多個ID序號,12位的計數序列號支持 每個節點每毫秒 產生4096個ID序號
加起來剛好64位,為一個Long型。這個算法很簡潔,但依舊是一個很好的ID生成策略