商交易系統高並發分布式訂單號生成策略
一、要求:
1.全局唯一性,不能重復
2.信息安全加密防止用戶根據id規則獲取數據
3.數據遞增,保證下一個id一定大於上一個id
二,策略
1.UUID 唯一識別碼,16個字節 (128位)
組成部分:當前日期+時間+時鍾的序列+mac地址
uuid 有幾個實現版本,比如jdk 自帶的uuid
優點:生成簡單,不占用寬帶,本地生成,數據遷移不影響。
缺點:字母存儲,無序,無法保證趨勢遞增,查詢慢,不可讀
2.snowflake(雪花twitter開源 分布式id算法)
41字節毫秒+10字節的機器id+10版本號,國內有很多平台有將其實現和優化
優點:本地生成,不占寬帶,毫秒在高位,低位是趨勢遞增。
缺點:依賴時鍾 如果時間回撥可能會重復,效率比uuid慢
3. 數據庫
優點:代碼實現簡單,性能ok,數字排序,可讀性強
缺點:受限於數據庫,單點故障,擴容麻煩,需要插入后才能獲取id增加查詢數據庫主從延遲master才能查到
4.redis 集群
格式:12位=年2位+當年第幾天3+小時2+自增5
優點:不依賴數據庫,靈活,沒有單點故障,性能優於數據庫
缺點:網絡資源,需要增加額外服務插件
總結:
uuid | Token ,圖片id等 | ※※ |
snowflake | Elk,mq,業務系統 | ※※※※ |
數據庫 | 並發不大,業務增長不快 | ※※※ |
redis | 業務系統 | ※※※※※ |