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

分布式系統中的唯一ID有哪些生成方式

開發 后端
在高度分布式的環境中生成全局唯一標識符實際上是一個具有挑戰性的任務。在本文中,讓我們來看一下一些常見的已知ID生成算法。

在后端系統中,每條記錄都需要一個唯一的ID來進行標識。

雖然一開始聽起來可能很瑣碎,但在高度分布式的環境中生成全局唯一標識符實際上是一個具有挑戰性的任務。

在本文中,讓我們來看一下一些常見的已知ID生成算法。

Ticket 服務 - 集中式數據庫

使用自增功能生成ID

Ticket 服務解決方案利用 SQL 數據庫中的自增功能來生成唯一的ID。

使用集中式數據庫服務器,Web 服務器插入一個新記錄到數據庫中以生成一個自增的ID。

CREATE TABLE `ID` (
`id` bigint(20) unsigned NOT NULL auto_increment,
`stub` char(1) NOT NULL default '',
PRIMARY KEY (`id`),
UNIQUE KEY (stub)
);
REPLACE INTO ID (stub) VALUES ('a');
SELECT LAST_INSERT_ID();

與使用 INSERT INTO 命令不同,我們可以使用 REPLACE INTO 命令來減少數據庫中的記錄數量。

REPLACE INTO 命令以原子方式原地更新單行,并獲取自增的主 ID,而無需創建新記錄。

優點:

  • 實現簡單
  • 生成的ID是64位的
  • ID是順序且可排序的

缺點:

  • 只能使用1個表。多個表或數據庫將導致ID沖突
  • 由于只使用了1個表,數據庫成為了單點故障
  • 如果每秒的寫入數量巨大,將會有寫入瓶頸

Ticket 服務 - 集群式數據庫

使用輪詢路由請求

與使用一個數據庫不同,我們可以使用多個具有偏移量的數據庫,以避免單點故障和寫入瓶頸。

偏移量 用于防止ID沖突。每個數據庫通過 k,k 是正在使用的數據庫服務器數量,增加其ID。

如上所示,如果使用了三個數據庫,每次生成ID時,自增的ID增加3。

優點:

  • 相對容易實現
  • 生成的ID是64位的
  • 能夠在沒有單點故障的情況下處理高吞吐量

缺點:

  • 由于使用了多個數據庫,生成的ID不能保證是可排序的
  • 難以水平擴展。添加新數據庫很棘手,因為它會影響偏移量。

Twitter Snowflake

Snowflake方法在不依賴數據庫的情況下生成 64位的ID。

64位的ID被分成5個主要部分

ID分為5個主要部分:

  • 時間戳(41位)
  • 數據中心ID(5位)
  • 機器ID(5位)
  • 序列號(12位)
  • 符號位(1位)

時間戳。自紀元以來的毫秒數。41位大約會在70年內溢出,對于大多數項目的壽命來說是安全的。

數據中心ID。服務器所在的數據中心。如果兩個服務器在相同的時間收到相同的請求,則可以防止ID沖突。

機器ID。機器的ID。如果兩臺服務器在相似的數據中心中的相同時間收到相同的請求,則可以防止沖突。

序列號。對于在同一服務器上生成的每個ID,序列號會遞增1,并在每毫秒重置為0。這可以防止在同一服務器上的ID沖突。

優點:

  • ID大致是有序的
  • 能夠在沒有單點故障的情況下處理高吞吐量
  • 能夠在機器之間無需協調地生成ID
  • 能夠水平擴展。

缺點:

  • ID不是完全有序的
  • 未來的ID是可預測的。對于安全要求較高的應用程序可能不理想
  • 需要一個Zookeeper來跟蹤機器ID。

MongoDB ObjectID

MongoDB為每個新文檔創建一個唯一的對象ID。

對象ID由 MongoDB驅動程序生成而不是數據庫。這意味著可以在服務器上生成對象ID,而不依賴于MongoDB數據庫。

MongoDB對象ID是一個96位的ID

與Snowflake方法類似,MongoDB對象ID分為4個部分。對象ID是一個96位的ID。

  • 時間戳(32位)
  • 機器ID(24位)
  • 進程ID(16位)
  • 計數器(24位)

大部分字段與Snowflake方法中提到的字段相似。

由于同一臺機器上可能運行多個線程或進程,因此進程ID可以區分在不同進程中由同一臺機器生成的對象ID。

優點:

  • 能夠在沒有單點故障的情況下處理高吞吐量
  • 能夠在機器之間無需協調地生成ID
  • 能夠水平擴展。

缺點:

  • 依賴第三方數據庫解決方案
  • ID的長度為96位,而不是64位,需要更多的存儲空間。

UUID(通用唯一標識符)

128位UUID的示例

通用唯一標識符是一個128位的數字,包括多個部分,例如時間、節點的MAC地址或MD5哈希的命名空間。

有一組標準化的算法用于生成UUID,多年來已經發布了5個不同版本的UUID,以適應不同的需求。

這些算法相當冗長,因此我們不會詳細介紹它們。我們將更多地關注它的優缺點。

優點:

  • 它是一個128位的ID,保證是唯一的
  • 可以獨立生成,無需依賴任何第三方服務
  • 它是隨機的和安全的。下一個ID是不可預測的。

缺點:

  • 它很大,在MySQL中索引不佳
  • 它不是有序的

結論

在分布式環境中實現高度可擴展和可用的ID生成器并不是微不足道的。

責任編輯:趙寧寧 來源: 小技術君
相關推薦

2016-11-29 09:12:21

數據庫分布式ID

2022-02-23 07:09:30

分布式ID雪花算法

2021-11-08 19:25:37

Go生成系統

2023-01-12 17:46:37

分庫分表id如何生成

2024-02-22 17:02:09

IDUUID雪花算法

2024-04-01 13:08:24

唯一IDC#后端

2025-03-28 10:27:29

2021-06-28 14:45:07

分布式框架操作

2017-07-04 16:18:15

分布式云應用導圖

2017-04-12 09:29:02

HiveMapReduceSpark

2017-06-19 17:55:22

CASID分布式

2024-10-31 13:51:58

2020-07-21 11:35:21

開發技能代碼

2024-02-02 10:57:12

Java分布式算法

2021-06-05 07:33:09

ID分布式架構

2017-07-01 16:02:39

分布式ID生成器

2019-09-03 09:22:08

數據庫Redis算法

2021-07-02 06:54:43

分布式環境ID

2023-12-13 09:35:52

算法分布式

2021-10-13 06:49:14

事故復盤ID
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲一卡二卡 | 亚洲高清视频一区 | 午夜成人在线视频 | 福利网站在线观看 | 国产在线成人 | 精品免费国产视频 | 欧美一级大片免费看 | av片毛片 | 久久人人爽人人爽 | 欧美日韩国产精品激情在线播放 | 久久国产精品亚洲 | 高清免费在线 | 日韩精品在线播放 | 国产乱码精品一区二区三区五月婷 | 欧美国产精品一区二区三区 | 男人天堂免费在线 | 在线国产一区二区 | 国产成人免费视频 | 免费a国产 | 国产精品成人久久久久 | 自拍偷拍第1页 | 欧美日韩精品一区 | 可以免费看的毛片 | 国内精品成人 | 成人免费在线观看视频 | 一区二区三区欧美 | 久久久久久99 | 国产精品久久久久av | 秋霞a级毛片在线看 | 欧美精品福利视频 | 九九热在线视频 | 久久国产精品视频免费看 | 亚洲精品一区二三区不卡 | 久久久精品国产 | 国产成人福利在线观看 | 蜜臀网| 久久久久黑人 | 羞羞视频在线观看网站 | 欧美中文字幕在线 | www.久久久久久久久 | 久久国产精品久久久久久 |