分布式唯一ID實現

2021-10-06 10:44:56 字數 761 閱讀 9026

分布式唯一id實現

在業務開發中,大量場景需要用到唯一id,比如系統流水號,訂單號等等。

那麼,分布式唯一id有哪些特徵呢?

唯一性: 生成的id全域性唯一。

高可用: 可保證在高併發下的可用性,確保任何時候都能正確生成id。

自主性:分布式環境下不依賴中心認證,即可自行生成id。

安全性:不暴露系統和業務資訊。

有序性:生成的id按某種規則有序,便於資料庫插入及排序。(某些情況下也需要無序id)

常見的分布式唯一id生成方法有哪些?

資料庫自增id

使用資料庫的id自增策略。

優點:簡單,天然有序。

缺點:

:併發性不好。

:依賴資料庫,資料庫故障後不可用。

redis生成id

redis的所有命令操作都是單執行緒的,本身提供像incr和increby這樣的自增原子命令,能保證生成的id唯一有序。

優點:

:併發效能好

:數字id天然有序,對分頁或排序結果很有幫忙

缺點::如果系統中沒有redis,需要引入新元件,增加系統複雜度。

uuid生成

結合機器的網絡卡(基於名字空間/名字的雜湊值md5/sha1),當地時間(基於時間戳&時鐘序列)及乙個隨機數來生成uuid

優點:本地生成,沒有網路消耗,生成簡單,沒有高可用風險。

缺點:

:不易於儲存:uuid太長,16位元組128位。

:uuid無序,不利於資料庫查詢,查詢效率低。

zookeeper實現分布式唯一id

在過去的單庫單表型系統中,通常第可以使用資料庫字段自帶的auto increment屬性來自動為每條記錄生成個唯一的id。但是分庫分表後,就無法在依靠資料庫的auto increment屬性來唯一標識一條記錄了。此時我們就可以用zookeeper在分布式環境下生成全域性唯一id。設計思路 publi...

分布式唯一ID方案

背景 在複雜的分布式系統中,往往需要對大量的資料和訊息進行唯一標識。如對大量的訂單做分庫分表後,需要有乙個唯一的id來標識一條資料或訊息,資料庫的自增id顯然不能滿足需求。業務系統對分布式唯一id的要求 全域性唯一性,不能重複 趨勢遞增,在mysql innodb引擎中使用的是聚集索引,由於多數rd...

分布式系統全域性唯一ID

全域性的唯一流水id 可以將乙個請求在分布式系統中的流轉路徑聚合。生成唯一id有兩種方法 持久型 使用資料庫表自增欄位或者sequence 生成,為了提高效率,每個應用節點可以快取乙個批次的id 如果機器重啟則可能會損失一部分id 但是這並不會產生任何問題。時間型 一般由機器號 業務號 時間 單節點...