分佈式系統中,有一些須要使用全局惟一ID的場景,這種時候爲了防止ID衝突可使用36位的UUID,可是UUID有一些缺點,首先他相對比較長,另外UUID通常是無序的。分佈式
有些時候咱們但願能使用一種簡單一些的ID,而且但願ID可以按照時間有序生成。測試
而twitter的snowflake解決了這種需求,最初Twitter把存儲系統從MySQL遷移到Cassandra,由於Cassandra沒有順序ID生成機制,因此開發了這樣一套全局惟一ID生成服務。spa
snowflake的結構以下(每部分用-分開):
blog
一共加起來恰好64位,爲一個Long型。(轉換成字符串後長度最多19)排序
snowflake生成的ID總體上按照時間自增排序,而且整個分佈式系統內不會產生ID碰撞(由datacenter和workerId做區分),而且效率較高。經測試snowflake每秒可以產生26萬個ID。ip