一般全域性id作為資料庫的主鍵使用,主要有3種實現方式。
1,uuid:唯一但是不連續,作為字串索引效率低,也不保證隨機。
2,自增序列:絕對遞增,長度可控,作為索引時效率高。
3,snowflake:按時間趨勢遞增,單獨使用時效率較高。
目前我們專案主要使用第二種方式,部分使用uuid。
專案架構為dubbo+zk,使用專門流水伺服器來生產id,序號儲存在資料庫的流水表中。
可以自定義流水的生成規則:步長,起始值,最大值,快取個數。
流水伺服器以介面的方式對外提供服務,並將資料庫的id快取起來,減少資料庫的壓力。
請求方可以按自己的需求來獲取id,比如,一次獲取多少個?
同時在客戶端也可以作二級快取,以支援更大的併發。
為了防止臨界值時,請求時間過長,增加預警機制,低於閾值時,提前補充。
分布式系統全域性唯一ID
全域性的唯一流水id 可以將乙個請求在分布式系統中的流轉路徑聚合。生成唯一id有兩種方法 持久型 使用資料庫表自增欄位或者sequence 生成,為了提高效率,每個應用節點可以快取乙個批次的id 如果機器重啟則可能會損失一部分id 但是這並不會產生任何問題。時間型 一般由機器號 業務號 時間 單節點...
分布式全域性唯一ID(二)
redis 實現分布式唯一id,其實這個也很簡單,主要使用redis string資料結構的 increment 方法。原理 使用increment方法,每次自加1,主要使用redis的高效能和單執行緒。實現方式 核心 如下,若是為了保證長度一致,其實可以預先初始化值。現在的這個是從1,2.逐漸遞增...
分布式系統全域性唯一ID生成
在複雜分布式系統中,往往需要對大量的資料和訊息進行唯一標識。如在金融 電商 支付 等產品的系統中,資料日漸增長,對資料分庫分表後需要有乙個唯一id來標識一條資料或訊息,資料庫的自增id顯然不能滿足需求,此時乙個能夠生成全域性唯一id的系統是非常必要的。同時除了對id號碼自身的要求,業務還對id號生成...