面試中關於分散式的問題很多。(分散式事務,基本理論CAP,BASE,分散式鎖)先來一個簡單的。 簡單說一下分散式ID的設計方案? 首先要明確在分散式環境下,分散式id的基本要求。 1, 全局唯一,在分散式集群下,不同的節點併發生成的分散式id要唯一; 2, 順序性,分散式id是有序生成 然後給出分佈 ...
面試中關於分散式的問題很多。(分散式事務,基本理論CAP,BASE,分散式鎖)先來一個簡單的。
簡單說一下分散式ID的設計方案?
首先要明確在分散式環境下,分散式id的基本要求。
1, 全局唯一,在分散式集群下,不同的節點併發生成的分散式id要唯一;
2, 順序性,分散式id是有序生成
然後給出分散式id的設計方案。
1, 基於數據的自增id生成分散式ID,使用比較簡單,缺點是擴展性和可靠性有限;基於資料庫表的自增id
2,基於snowflake 演算法生成;
snowflake生成的分散式id是一個64位整數;位數標識如下:
1 標識正負
41位,一般使用System.currentTimeMilles()得到;
5 數據中心標識
5 機器ip標識
12 單位毫秒內可以生成的序數極限
snowflake的生成跟時間相關的使用的是System.currentTimeMilles(),跟冬令時沒有關係。
分散式id的進一步要求
可靠性: 即高可用
緊湊性: 64位的整數比較長,不太緊湊,作為索引,存儲不占優勢。
有意義: 可以放入業務標識或者時間
snowflake的缺點
受時間影響:需要保證分散式集群的時間同步,即NTP ;
可以預測到:容易按照時間規律預測到,進而影響安全性;
小結
回答了分散式id的基本要求,已經常用方案。
原創不易,點贊關註支持一下吧!轉載請註明出處,讓我們互通有無,共同進步,歡迎溝通交流。
我會持續分享Java軟體編程知識和程式員發展職業之路,歡迎關註,我整理了這些年編程學習的各種資源,關註公眾號‘李福春持續輸出’,發送'學習資料'分享給你!