欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

適用于分布式唯一標識碼的生成算法有哪些

林國瑞2年前16瀏覽0評論

適用于分布式唯一標識碼的生成算法有哪些?

謝邀~

關于這個問題,有幾個方案和大家分享一下。

利用數據庫生成

先說最笨的方法,利用數據庫的自增長序列生成,數據庫內唯一。

優點:理解起來最容易,用起來也最容易。

缺點:也非常明顯了,每種數據庫的實現不同,如果數據庫需要遷移的話比較麻煩;最大的問題是性能問題,不太好擴展,如果并發大的時候,數據庫很可能扛不住。

利用Redis/MongoDB/zookeeper生成

Redis的單線程的,利用incr和increby;MongoDB的ObjectId;ZK通過znode數據版本;都可以生成全局的唯一標識碼。

優點:性能高于數據庫;可以使用集群部署。

缺點:需要引入對應的組件,增加系統的復雜度。

UUID

這個是分布式架構中,生成唯一標識碼最常用的算法。

UUID有基于MAC地址的,加上時間和時鐘序列的,也有基于偽隨機數的,基于加密哈希的。

優點:本地生成,不需要第三方組件,生成比較簡單,性能好。

缺點:長度長,不利于存儲,并且沒有排序,是個字符串,不利于查詢。解決無序問題,可參考Comb算法(combined guid/timestamp)。

Snowflake

Twitter開源,基于zk,41位時間戳(毫秒數)+10位機器的ID+12位毫秒內的流水號+1位符號位(永遠是0)。

優點:性能不錯,單機內遞增。

缺點:依賴zk;依賴于機器時鐘,分布式環境內可能會不是全局遞增。

UidGenerator

百度開源,基于snowflake算法。

Leaf

美團開源。

優點:能保證全局唯一性、高可用、趨勢遞增(不太安全,比如泄露公司訂單數量)、單調遞增等。

缺點:依然會依賴第三方組件,zk或數據庫。

我將持續分享Java開發、架構設計、程序員職業發展等方面的見解,希望能得到你的關注。