業務ID 生成策略

業務ID 生成策略,從技術上說,基本要藉助一個集中式的引擎來幫忙實現。redis

爲了擴大業務ID生成策略的併發問題,還有更爲技巧性的提高。網絡

先來介紹廣泛的分佈式ID生成策略:數據結構

1. 利用DB的自增主鍵併發

 這裏又有兩種作法,一種是 單首創建一個只有自增主鍵的表,來負責主鍵自增,業務表從這裏取得自增的主鍵返回給業務主鍵生成組件使用。分佈式

   另一種: 業務中不使用DB的自增主鍵, 自增主鍵僅存在DB層面,並增長業務主鍵字段,並加以約束。這種比較常見。優化

   一般的步驟爲:  spa

A. Create table `tbl_biz_order`(
    `id` bigint auto_increment primary key NOT NULL,
     `biz_order` bigint NULL,
    
      key `biz_order_idx`(`biz_order`)
  );

B. insert into `tbl_biz_order` (); select last_insert_key();

C. 應用層拿到 id 字段的值,進行一系列拼接。根據規則,生成biz_order。
D. update `tbl_biz_order` set `biz_order`=${biz_order} where id=${id};

時序圖說明這件事情可能更好

2. 利用redis 等生成局部業務IDcode

在防止衝突這裏,基本上能夠使用一些方法進行優化,通常來講,基本上使用redis 的list 數據結構。對象

好比redis 的list 對象預存 100000 序列號,而後進程去lpop。blog

問題在於redis 要考慮網絡不穩定,以及故障恢復後的應用層面要考慮兼容。

 

3. 機器本地生成

內存中維持計數器,如全局的automaticInteger 這種生成方式。

在分佈式狀況可能有問題

相關文章
相關標籤/搜索