成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺談CAS在分布式ID生成方案上的應用

開發 開發工具 分布式
所謂“分布式ID生成方案”,是指在分布式環境下,生成全局唯一ID的方法。本文介紹了CAS在分布式ID生成方案上的一種應用

今天還是聊CAS,談談CAS在一種“分布式ID生成方案”上的應用。

所謂“分布式ID生成方案”,是指在分布式環境下,生成全局唯一ID的方法。

可以利用DB自增鍵(auto inc id)來生成全局唯一ID,插入一條記錄,生成一個ID:

ID

這個方案利用了數據庫的單點特性,其優點為:

  • 無需寫額外代碼
  • 全局唯一
  • 絕對遞增
  • 遞增ID的步長確定

其不足為:

  • 需要做數據庫HA,保證生成ID的高可用
  • 數據庫中記錄數較多
  • 生成ID的性能,取決于數據庫插入性能

優化方案為:

  • 利用雙主保證高可用
  • 定期刪除數據
  • 增加一層服務,采用批量生成的方式降低數據庫的寫壓力,提升整體性能

增加服務后,DB中只需保存當前***的ID即可,在服務啟動初始化的過程中,首先拉取當前的max-id:

  1. select max_id from T; 

然后批量獲取一批ID,放到id-servcie內存里,并將max-id寫回數據庫:

  1. update T set max_id=200

這樣,id-service就拿到了[100, 200]這一批ID,上游在獲取ID時,不用每次都插入數據庫,而是分配完100個ID后,再修改max-id的值,這樣分配ID的整體性能就增加了100倍。

這個方案的優點:

  • 數據庫只保存一條記錄
  • 性能極大增強

其不足為:

  • 如果id-service重啟,可能內存會有一段已經申請的ID沒有分配出去,導致ID空洞,當然,這不是一個嚴重的問題
  • 服務沒有做HA,無法保證高可用

優化方案為:

  • 冗余服務,做集群保證高可用

冗余了服務后,多個服務在啟動過程中,進行ID批量申請時,可能由于并發導致數據不一致:

  1. select max_id from T; 

如上圖所示,兩個id-service在啟動的過程中,同時拿到了max-id為100。

兩個id-service同時對數據庫的max-id進行寫回:

  1. update T set max_id=200

寫回max-id成功后,這兩個id-service都以為自己拿到了[100,200]這一批ID,導致集群會生成重復的ID。

問題發生的原因,是并發寫回時,沒有對max-id的初始值進行比對:

  • id-service1寫回max-id=200成功的條件是,max-id必須等于100
  • id-service2寫回max-id=200成功的條件是,max-id也必須等于100
  • id-service1寫回時,max-id是100,理應寫回成功
  • id-service2寫回時,max-id已經被改成了200,不應該寫回成功

只要實施CAS樂觀鎖,在寫回時對max-id的初始條件進行比對,就能避免數據的不一致,寫回SQL由:

  1. update T set max_id=200

升級為:

  1. update T set max_id=200 where max_id=100

這樣,id-service2寫回時,就會失敗:

失敗后,id-service2要再次查詢max-id:

此時max-id已經變為200,于是id-service2獲取到了[200, 300]這一批ID,并將max-id=300寫回:

  1. update t set max_id=300 where max_id=200

寫回成功。

這種方案的好處是:

  • 能夠通過水平擴展的方式,達到分布式ID生成服務的***性能
  • 使用CAS簡潔的保證不會生成重復的ID

其不足為:

  • 由于有多個service,生成的ID 不是絕對遞增的,而是趨勢遞增的

【本文為51CTO專欄作者“58沈劍”原創稿件,轉載請聯系原作者】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2025-03-28 10:27:29

2016-11-29 09:12:21

數據庫分布式ID

2024-02-22 17:02:09

IDUUID雪花算法

2022-06-16 07:31:15

MySQL服務器服務

2020-11-10 07:44:18

分庫分表生成

2017-07-04 16:18:15

分布式云應用導圖

2023-09-03 22:14:23

分布式ID

2023-01-12 17:46:37

分庫分表id如何生成

2017-07-01 16:02:39

分布式ID生成器

2023-03-05 18:23:38

分布式ID節點

2019-09-05 13:06:08

雪花算法分布式ID

2017-07-26 15:08:05

大數據分布式事務

2025-05-27 03:22:00

分布式ID部署

2025-03-11 08:50:00

CASID分布式

2024-11-19 15:55:49

2013-03-26 13:43:08

Java分布式計算

2022-02-23 07:09:30

分布式ID雪花算法

2017-07-27 14:32:05

大數據分布式消息Kafka

2009-10-09 17:17:11

安裝VB dcom分布

2013-06-13 11:29:14

分布式分布式緩存
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲高清视频在线观看 | 久久久久久久久国产精品 | 日韩av第一页 | 精品欧美一区二区三区久久久小说 | 欧美成人一区二区三区片免费 | 九九热在线免费视频 | 国产在线一区二区三区 | 91久久国产综合久久91精品网站 | 久久久久亚洲精品中文字幕 | 久久ww| 天天精品在线 | 国产精品黄色 | 欧美888| 精品欧美一区二区三区 | 欧美一区二区三区视频在线观看 | 国产91久久精品一区二区 | 一区二区在线 | 在线观看日韩精品视频 | 成人啊啊啊 | 国产线视频精品免费观看视频 | 国产精品久久久久久久久久 | 99精彩视频 | 久久伊人青青草 | 一区二区三区视频 | 精品国产精品国产偷麻豆 | 国产高清精品一区 | 精品亚洲永久免费精品 | 久热中文字幕 | 欧美日韩精品一区 | av男人的天堂av | 午夜精品一区二区三区在线播放 | 久久久91 | 综合九九 | 免费的一级视频 | 成人在线视频免费观看 | 亚洲综合日韩精品欧美综合区 | 久久99精品久久久久 | 99re在线视频免费观看 | 麻豆av网站 | 日韩a在线 | 青青草网站在线观看 |