分佈式系統訂單號唯一策略

1、分佈式集羣架構

2、分佈式高併發環境的訂單號要求

  • 全局唯一
  • 訂單號信息安全要求
  • 趨勢遞增要求

3、訂單號生成策略總結

策略 優點 缺點 格式
uuid 實現簡單不佔用帶寬 無序、不可讀、查詢慢 32位
db自增 無代碼、遞歸 DB單點故障、擴展有瓶頸
snowflake 不佔用帶寬、低位趨勢遞增 依賴服務器時間 18位
redis 無單點故障、性能優於DB遞增 佔用帶寬、Redis集羣需要維護 12位

3.1、策略一:UUID(通用唯一識別碼)

組成:當前日期+時間+時鐘序列+機器識別號(MAC地址或其他)
分佈式系統中,所有元素(web服務器)都不需要通過中央控制端來判斷數據唯一性。

3.2、策略二:數據庫自增ID

關係型數據庫都實現數據庫自增ID;mysql通過auto_increment實現、oralce通過sequence實現。
在數據庫集羣環境下,不同數據庫節點可設置不同起步值、相同步長值來實現集羣下生成全局唯一、遞增ID。

3.3、策略三:snowflake算法

組成:41位時間戳+10爲機器ID+12位序列號(自增),轉換位長度爲18的長整型。
twitter位滿足每秒上萬條消息的創建,每條消息都必須分配全局唯一id,這些id要趨勢遞增,方便客戶排序。
Github上可以下載到snowflake源碼

3.4、策略四:Redis自增ID

Redis實現了incr(key)API用於將key的值遞增1並返回結果。若key不存在,則創建並賦值爲0。

Redis id自增的方法 :格式 :前綴+自增id 使用超時時間是爲了防止自增到9999時訂單號的位數變長

4、四種ID自增的格式示例

  • uudi:205f1537-7991-4ed3-a2c7-c05aa8f8428b
  • 數據庫自增:自增ID
  • snowflake:386992679587676176
  • redis:173372100001
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章