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