分佈式惟一ID生成方案

分佈式ID的需求

在分佈式系統中。ID有以下需求redis

  1. 全局惟一性,不能出現重複的id號
  2. 信息安全:防止惡意用戶規矩id的規則來獲取數據
  3. 數據遞增:保證個人下一ID必定大於上一個ID

UUID

通用惟一識別碼,16個字節128位的長數字
組成部分:當前時間和時間序列+全局惟一性網卡地址
優勢:代碼實現簡單,不佔用寬帶,數據遷移不受影響
缺點:無序,沒法保證趨勢遞增,查詢慢,不可讀算法

雪花算法

國外的twitter分佈式下ID生成算法
1bit+41bit+10bit+10bit=62bit
高位隨機+毫秒數+機器碼(數據中心+機器id)+10的流水號
優勢:代碼實現簡單,不佔用寬帶,數據遷移不受影響,低位趨勢遞增
缺點:多臺服務器時間必定要同樣,無序沒法保證趨勢遞增要求sql

Mysql

優勢:代碼實現方便,性能不錯,數字排序,可讀性很強
缺點:受限數據庫,擴展麻煩,插入數據庫才能拿到ID,單點故障問題
主從同步的時候:電商下單–>支付 intsert master db select 數據 由於數據庫同步延遲致使查不到這個數據,加cahe不是最好的解決方式,數據要求比較嚴謹的話查master主庫.數據庫

Redis

年份+當前這天屬於這一年的第多少天+小時+redis自增
2+3+2+5=12位
數據多了能夠設置一個失效時間從新生成,
優勢:不依賴數據,靈活方便,性能優於數據庫,沒有單故障,高可用
缺點:須要佔用網絡資源,性能要比本地生成慢,須要增長插件安全

相關文章
相關標籤/搜索