當前位置:
首頁 > 最新 > 分散式唯一id:snowflake演算法思考

分散式唯一id:snowflake演算法思考

匠心零度 轉載請註明原創出處,謝謝!

緣起

為什麼會突然談到分散式唯一id呢?原因是最近在準備使用RocketMQ,看看官網介紹:

一句話,消息可能會重複,所以消費端需要做冪等。為什麼消息會重複後續RocketMQ章節進行詳細介紹,本節重點不在這裡。

為了達到業務的冪等,必須要有這樣一個id存在,需要滿足下面幾個條件:

在那裡產生,和消費端進行判斷等和這個id沒有關係,這個id的要求就是局部唯一或者全局唯一即可,由於這個id是唯一的,可以用來當資料庫的主鍵,既然要做主鍵那麼之前剛剛好發過一篇文章:從開發者角度談Mysql(1):主鍵問題,文章重點提到為什麼需要自增、或者趨勢自增的好處。(和Mysql數據存儲做法有關)。

那麼該id需要有2個特性:

如果有方法可以生成全局唯一(那麼在局部也一定唯一了),生成分散式唯一id的方法有很多。大家可以看看分散式系統唯一ID生成方案匯總:http://www.cnblogs.com/haoxinyue/p/5208136.html(由於微信不是他的地址都顯示不出來,所以把地址貼出來下),這個文章裡面提到了很多以及各各的優缺點。

本文關注重點是snowflake演算法,該演算法實現得到的id就滿足上面提到的2點。

snowflake演算法

這個演算法單機每秒內理論上最多可以生成1000*(2^12),也就是409.6萬個ID,(吼吼,這個得了的快啊)。

java實現代碼基本上就是類似這樣的(都差不多,基本就是二進位位操作):

參考:https://www.cnblogs.com/relucent/p/4955340.html

優點:

缺點:

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 匠心零度 的精彩文章:

TAG:匠心零度 |