聊一聊Twitter的雪花算法
作者:小技術君
Twitter的雪花算法方法是一種在分布式系統(tǒng)中生成唯一ID的解決方案。Twitter在推文、私信、列表等方面使用這種方法。
什么是Twitter的雪花算法方法?
這是一種在分布式系統(tǒng)中生成唯一ID的解決方案。Twitter在推文、私信、列表等方面使用這種方法。
(1) ID是唯一且可排序的
(2) ID包含時間信息(按日期排序)
(3) ID適用于64位無符號整數(shù)
(4) 僅包含數(shù)字值
- 符號位(1位):保留位(始終為0)。這可以為將來的請求保留。它可以潛在地用于使整體數(shù)字為正數(shù)。
- 時間戳(41位):以毫秒為單位的紀元時間戳(雪花的默認紀元等于2010年11月04日01:42:54 UTC)
- 機器ID(10位):可容納1024臺機器
- 序列號(12位):每臺機器上的本地計數(shù)器,每次增加1。該數(shù)字在每毫秒重置為0。從理論上講,一臺機器每秒最多可以支持4096(212)個新ID。
Twitter雪花算法方法的優(yōu)缺點
- 它長度為64位,是UUID的一半大小
- 可擴展性強(可容納1024臺機器)
- 高可用性(每臺機器每毫秒可以生成4096個唯一ID)
- 一些UUID版本不包含時間戳。在這種情況下,Twitter雪花算法具有可排序的優(yōu)勢。
- 設計需要Zookeeper(缺點)
- 生成的ID不像UUID那樣是隨機的。將來的ID可以預測。
- 41位中可以表示的最大時間戳(約69年)。需要在此之后找到解決方案 :)
使用注意事項
- Discord使用雪花算法,將其紀元設置為2015年的第一秒。
- Instagram使用了格式的修改版本,其中41位用于時間戳,13位用于分片ID,10位用于序列號。
- Mastodon的修改格式具有48位的毫秒級時間戳,它使用了UNIX紀元。剩下的16位用于序列數(shù)據(jù)。
責任編輯:趙寧寧
來源:
小技術君