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

分布式系統(tǒng)中的唯一ID有哪些生成方式

開(kāi)發(fā) 后端
在高度分布式的環(huán)境中生成全局唯一標(biāo)識(shí)符實(shí)際上是一個(gè)具有挑戰(zhàn)性的任務(wù)。在本文中,讓我們來(lái)看一下一些常見(jiàn)的已知ID生成算法。

在后端系統(tǒng)中,每條記錄都需要一個(gè)唯一的ID來(lái)進(jìn)行標(biāo)識(shí)。

雖然一開(kāi)始聽(tīng)起來(lái)可能很瑣碎,但在高度分布式的環(huán)境中生成全局唯一標(biāo)識(shí)符實(shí)際上是一個(gè)具有挑戰(zhàn)性的任務(wù)。

在本文中,讓我們來(lái)看一下一些常見(jiàn)的已知ID生成算法。

Ticket 服務(wù) - 集中式數(shù)據(jù)庫(kù)

使用自增功能生成ID

Ticket 服務(wù)解決方案利用 SQL 數(shù)據(jù)庫(kù)中的自增功能來(lái)生成唯一的ID。

使用集中式數(shù)據(jù)庫(kù)服務(wù)器,Web 服務(wù)器插入一個(gè)新記錄到數(shù)據(jù)庫(kù)中以生成一個(gè)自增的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 命令來(lái)減少數(shù)據(jù)庫(kù)中的記錄數(shù)量。

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

優(yōu)點(diǎn):

  • 實(shí)現(xiàn)簡(jiǎn)單
  • 生成的ID是64位的
  • ID是順序且可排序的

缺點(diǎn):

  • 只能使用1個(gè)表。多個(gè)表或數(shù)據(jù)庫(kù)將導(dǎo)致ID沖突
  • 由于只使用了1個(gè)表,數(shù)據(jù)庫(kù)成為了單點(diǎn)故障
  • 如果每秒的寫(xiě)入數(shù)量巨大,將會(huì)有寫(xiě)入瓶頸

Ticket 服務(wù) - 集群式數(shù)據(jù)庫(kù)

使用輪詢(xún)路由請(qǐng)求

與使用一個(gè)數(shù)據(jù)庫(kù)不同,我們可以使用多個(gè)具有偏移量的數(shù)據(jù)庫(kù),以避免單點(diǎn)故障和寫(xiě)入瓶頸。

偏移量 用于防止ID沖突。每個(gè)數(shù)據(jù)庫(kù)通過(guò) k,k 是正在使用的數(shù)據(jù)庫(kù)服務(wù)器數(shù)量,增加其ID。

如上所示,如果使用了三個(gè)數(shù)據(jù)庫(kù),每次生成ID時(shí),自增的ID增加3。

優(yōu)點(diǎn):

  • 相對(duì)容易實(shí)現(xiàn)
  • 生成的ID是64位的
  • 能夠在沒(méi)有單點(diǎn)故障的情況下處理高吞吐量

缺點(diǎn):

  • 由于使用了多個(gè)數(shù)據(jù)庫(kù),生成的ID不能保證是可排序的
  • 難以水平擴(kuò)展。添加新數(shù)據(jù)庫(kù)很棘手,因?yàn)樗鼤?huì)影響偏移量。

Twitter Snowflake

Snowflake方法在不依賴(lài)數(shù)據(jù)庫(kù)的情況下生成 64位的ID。

64位的ID被分成5個(gè)主要部分

ID分為5個(gè)主要部分:

  • 時(shí)間戳(41位)
  • 數(shù)據(jù)中心ID(5位)
  • 機(jī)器ID(5位)
  • 序列號(hào)(12位)
  • 符號(hào)位(1位)

時(shí)間戳。自紀(jì)元以來(lái)的毫秒數(shù)。41位大約會(huì)在70年內(nèi)溢出,對(duì)于大多數(shù)項(xiàng)目的壽命來(lái)說(shuō)是安全的。

數(shù)據(jù)中心ID。服務(wù)器所在的數(shù)據(jù)中心。如果兩個(gè)服務(wù)器在相同的時(shí)間收到相同的請(qǐng)求,則可以防止ID沖突。

機(jī)器ID。機(jī)器的ID。如果兩臺(tái)服務(wù)器在相似的數(shù)據(jù)中心中的相同時(shí)間收到相同的請(qǐng)求,則可以防止沖突。

序列號(hào)。對(duì)于在同一服務(wù)器上生成的每個(gè)ID,序列號(hào)會(huì)遞增1,并在每毫秒重置為0。這可以防止在同一服務(wù)器上的ID沖突。

優(yōu)點(diǎn):

  • ID大致是有序的
  • 能夠在沒(méi)有單點(diǎn)故障的情況下處理高吞吐量
  • 能夠在機(jī)器之間無(wú)需協(xié)調(diào)地生成ID
  • 能夠水平擴(kuò)展。

缺點(diǎn):

  • ID不是完全有序的
  • 未來(lái)的ID是可預(yù)測(cè)的。對(duì)于安全要求較高的應(yīng)用程序可能不理想
  • 需要一個(gè)Zookeeper來(lái)跟蹤機(jī)器ID。

MongoDB ObjectID

MongoDB為每個(gè)新文檔創(chuàng)建一個(gè)唯一的對(duì)象ID。

對(duì)象ID由 MongoDB驅(qū)動(dòng)程序生成而不是數(shù)據(jù)庫(kù)。這意味著可以在服務(wù)器上生成對(duì)象ID,而不依賴(lài)于MongoDB數(shù)據(jù)庫(kù)。

MongoDB對(duì)象ID是一個(gè)96位的ID

與Snowflake方法類(lèi)似,MongoDB對(duì)象ID分為4個(gè)部分。對(duì)象ID是一個(gè)96位的ID。

  • 時(shí)間戳(32位)
  • 機(jī)器ID(24位)
  • 進(jìn)程ID(16位)
  • 計(jì)數(shù)器(24位)

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

由于同一臺(tái)機(jī)器上可能運(yùn)行多個(gè)線(xiàn)程或進(jìn)程,因此進(jìn)程ID可以區(qū)分在不同進(jìn)程中由同一臺(tái)機(jī)器生成的對(duì)象ID。

優(yōu)點(diǎn):

  • 能夠在沒(méi)有單點(diǎn)故障的情況下處理高吞吐量
  • 能夠在機(jī)器之間無(wú)需協(xié)調(diào)地生成ID
  • 能夠水平擴(kuò)展。

缺點(diǎn):

  • 依賴(lài)第三方數(shù)據(jù)庫(kù)解決方案
  • ID的長(zhǎng)度為96位,而不是64位,需要更多的存儲(chǔ)空間。

UUID(通用唯一標(biāo)識(shí)符)

128位UUID的示例

通用唯一標(biāo)識(shí)符是一個(gè)128位的數(shù)字,包括多個(gè)部分,例如時(shí)間、節(jié)點(diǎn)的MAC地址或MD5哈希的命名空間。

有一組標(biāo)準(zhǔn)化的算法用于生成UUID,多年來(lái)已經(jīng)發(fā)布了5個(gè)不同版本的UUID,以適應(yīng)不同的需求。

這些算法相當(dāng)冗長(zhǎng),因此我們不會(huì)詳細(xì)介紹它們。我們將更多地關(guān)注它的優(yōu)缺點(diǎn)。

優(yōu)點(diǎn):

  • 它是一個(gè)128位的ID,保證是唯一的
  • 可以獨(dú)立生成,無(wú)需依賴(lài)任何第三方服務(wù)
  • 它是隨機(jī)的和安全的。下一個(gè)ID是不可預(yù)測(cè)的。

缺點(diǎn):

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

結(jié)論

在分布式環(huán)境中實(shí)現(xiàn)高度可擴(kuò)展和可用的ID生成器并不是微不足道的。

責(zé)任編輯:趙寧寧 來(lái)源: 小技術(shù)君
相關(guān)推薦

2016-11-29 09:12:21

數(shù)據(jù)庫(kù)分布式ID

2022-02-23 07:09:30

分布式ID雪花算法

2021-11-08 19:25:37

Go生成系統(tǒng)

2023-01-12 17:46:37

分庫(kù)分表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

分布式云應(yīng)用導(dǎo)圖

2017-06-19 17:55:22

CASID分布式

2017-04-12 09:29:02

HiveMapReduceSpark

2024-10-31 13:51:58

2020-07-21 11:35:21

開(kāi)發(fā)技能代碼

2024-02-02 10:57:12

Java分布式算法

2017-07-01 16:02:39

分布式ID生成器

2021-06-05 07:33:09

ID分布式架構(gòu)

2019-09-03 09:22:08

數(shù)據(jù)庫(kù)Redis算法

2021-07-02 06:54:43

分布式環(huán)境ID

2023-12-13 09:35:52

算法分布式

2021-10-13 06:49:14

事故復(fù)盤(pán)ID
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 91 中文字幕| 中文字幕1区2区 | 免费国产一区二区 | 欧美在线看片 | 国产欧美精品一区二区色综合朱莉 | 久久久99国产精品免费 | 国产精品一区二区福利视频 | 91看片网| 成人免费福利 | 国产电影一区二区在线观看 | 国产日韩一区二区三免费高清 | 在线观看av网站永久 | 国产一区不卡在线观看 | 亚洲一区二区在线播放 | 亚洲国产aⅴ成人精品无吗 亚洲精品久久久一区二区三区 | 亚洲天堂av网 | 国产精品日女人 | 91在线电影 | 成人福利影院 | 成人久久久久 | 午夜精品一区二区三区在线视频 | 一区二区三区小视频 | 在线欧美一区二区 | 91欧美精品成人综合在线观看 | 国产精品一区在线观看 | 久草青青| 亚洲在线一区二区 | 天天躁日日躁狠狠的躁天龙影院 | 韩国av电影网 | 国产农村妇女毛片精品久久麻豆 | 男人午夜视频 | 在线一区视频 | 特黄特色大片免费视频观看 | 久久久久亚洲精品国产 | 免费观看视频www | 黄色精品 | 韩国毛片一区二区三区 | 欧美高清视频一区 | 四虎影院免费在线播放 | 亚洲视频免费一区 | 91婷婷韩国欧美一区二区 |