《演算法 雪花演算法》

2022-05-02 08:45:09 字數 950 閱讀 7162

一:概述

-snowflake 演算法

- 是 twitter 開源的分布式 id 生成演算法。

-應用場景

- 高效能的產生不重複id,支援集群的橫向擴充套件。

二:原理

- 其核心思想就是:

- 使用乙個 64 bit 的 long 型的數字作為全域性唯一 id。

- 在分布式系統中的應用十分廣泛,且id 引入了時間戳,基本上保持自增的。 

- 產生公式

-  | 0(最高位預留) | 時間戳(41位) | 機器id(10位) | 隨機序列(12位) |

- 形成 64位bit

三:實現解析

- 0(最高位預留)

- 因為二進位制裡第乙個 bit 為如果是 1,那麼都是負數,但是我們生成的 id 都是正數,所以第乙個 bit 統一都是 0。

- 時間戳(41位)

- 41 bits 的 timestamp,每次要生成乙個新 id 的時候,都會獲取一下當前的 timestamp,保證每個timestamp都是不同的。

- 機器id(10位)

- 10 bits 的機器號, 在 id 分配 worker 啟動的時候,從乙個 集群獲取 (保證所有的 worker 不會有重複的機器號)。

- 隨機序列(12位)

- 12 bit 隨機數。

- 組成 64 位 bits,成為 10 進製的 16 位 unique id

四:**簡單實現

《演算法競賽高階指南》 雪花雪花雪花

有n片雪花,每片雪花由六個角組成,每個角都有長度。第i片雪花六個角的長度從某個角開始順時針依次記為ai,1,ai,2,ai,6。因為雪花的形狀是封閉的環形,所以從任何乙個角開始順時針或逆時針往後記錄長度,得到的六元組都代表形狀相同的雪花。例如ai,1,ai,2,ai,6和ai,2,ai,3,ai,6...

雪花演算法詳解

前言 雪花演算法是用來在分布式場景下生成唯一id的。敘述 雪花演算法簡單描述 最高位是符號位,始終為0,不可用。41位的時間序列,精確到毫秒級,41位的長度可以使用69年。時間位還有乙個很重要的作用是可以根據時間進行排序。10位的機器標識,10位的長度最多支援部署1024個節點。12位的計數序列號,...

雪花演算法 snowflake

分布式系統中,有一些需要使用全域性唯一id的場景,這種時候為了防止id衝突可以使用36位的uuid,但是uuid有一些缺點,首先他相對比較長,另外uuid一般是無序的。有些時候我們希望能使用一種簡單一些的id,並且希望id能夠按照時間有序生成。而twitter的snowflake解決了這種需求,最初...