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

認識“雪花ID”:如何在分布式環境中大規模生成唯一ID?

新聞 前端 分布式
唯一的ID使開發人員能夠正確識別、保存和檢索數據對象,并使數據對象參與到復雜的關系模式中。

 [[334452]]

圖源:unsplash

唯一的ID使開發人員能夠正確識別、保存和檢索數據對象,并使數據對象參與到復雜的關系模式中。在應用程序開發周期中,程序員總會遇到要處理生成唯一的標識符這項任務。

這些獨特的ID是如何生成的呢?哪種方法在不同的負載規模下最有效?ID如何在多個計算節點競爭下一個可用ID的分布式環境中保持唯一性?從小型單節點,到Twitter級別,本文筆者就將介紹三種最常見的技術。

通用唯一標識符——UUID

通用唯一標識符(UUID)這個概念大家不會陌生,它在軟件中已經使用多年了。它是一個128位的數字,以受控和標準化的方式生成時,能夠提供非常大的鍵空間,幾乎消除了沖突的可能性。

UUID是由幾個不同部分組成的合成ID,例如時間、節點的MAC地址或MD5散列的命名空間。為了適應所有這些組合,多年來,UUID規格已經發展出多個版本,特別是版本1和版本4。

根據數據和業務域的不同,一些開發人員可能會對其他版本感興趣。處理128位數字并不是最適合開發人員描述信息的方式,因此UUID通常以規范文本形式表示,其中16個八位字節轉換為32個十六進制字符,用連字符分隔,總共36個字符:

認識“雪花ID”:如何在分布式環境中大規模生成唯一ID?

UUID樣本-版本4

UUID最有趣的特性是其可以單獨生成,且仍能保證在分布式環境中的唯一性。基本的ID生成算法并不復雜,也不需要任何同步(至少是低至100納秒級別),可以并行執行:

認識“雪花ID”:如何在分布式環境中大規模生成唯一ID?

分布式環境中生成唯一ID

能夠自生成唯一性的內在屬性,使得UUID成為分布式環境中最常用的ID生成技術之一。但UUID需要額外的存儲空間,這可能會對查詢性能產生負面影響。

持久層生成的ID

如果不想在應用程序級別生成唯一ID時,另一種常見的方法是用永續性儲存體來處理。

最近所有的RDBMS都提供了某種列數據類型,開發人員能夠委托它們生成唯一標識符。MongoDB提供ObjectID,MySQL和MariaDB提供AUTO_INCREMENT,MS-SQL-Server提供IDENTITY,等等。執行不同的數據庫,ID的實際表現會有所不同,但唯一性的含義保持不變。

持久層生成的ID緩解了必須在應用程序代碼中生成唯一ID的問題。但如果操作一個大型數據庫集群,且有非常繁忙的應用程序在前,這種方法可能就無法滿足需要了。

還有另一個問題:如果不往返數據庫,則生成的ID對于代碼來說是未知的:

認識“雪花ID”:如何在分布式環境中大規模生成唯一ID?

RDBMS vs代碼生成ID

上圖中,額外往返于RDBMS可能會減慢應用程序的速度,可能使代碼不必要地復雜化。然而,無論使用的是否是基礎RDBMS產品,現代ORM框架都有助于以標準化的方式完成這項工作。

ID服務器還是Snowflake ID

ID服務器負責為分布式基礎設施生成唯一的ID。根據ID服務器執行功能的不同,可以是創建ID的單個服務器,也可以是每秒創建大量ID的服務器集群。

Twitter就不用我介紹了吧,平均每秒有9000條推特產生,峰值高達每秒143199條。Twitter需要一個解決方案,擴大其龐大服務器基礎設施的規模,生成高效的存儲ID。

[[334454]]

圖源:unsplash

這就是Twitter推出Snowflake計劃的原因:Snowflake是一種能大規模生成唯一ID號的網絡服務,同時具備一些基礎的保證。

Twitter之前使用過一種每個進程每秒至少生成10000個ID且響應速度小于2ms的服務器。ID服務器之間不需要任何網絡協調,生成的ID應大致按時間順序排列,為了將存儲保持在最低限度,生成的ID必須緊湊。

為了解決上述項目,Twitter開發了Snowflake項目作為用Scala編寫的Thrift服務器。生成的ID包括:

· 時間——41位(毫秒精度)

· 配置的機器ID——10位

· 序列號——12位(每臺機器每4096轉一次)

雖然現在Snowflake項目已經結束,以一個更廣泛的項目TwitterServer取而代之,但是分布式ID生成器工作的基本原則仍然適用。由于每個生成器具有獨立性,Twitter能夠根據需要擴展其基礎設施,不會產生由于集群同步和協調而造成額外的延遲。

使用ID服務器的解決方案與代碼生成ID的運作方式類似:

認識“雪花ID”:如何在分布式環境中大規模生成唯一ID?

ID服務器生成ID

你會發現,其性能仍然會由于往返于ID服務器而降低,但因為不涉及復雜的數據庫操作,這一額外的延遲比將對象刷新到RDBMS要短得多。ID服務器提供了一個中間解決方案,使開發人員能夠控制生成唯一ID的方式與地點,無需引入復雜的、導致高延遲的基礎設施。

對于最終需要保存數據的所有應用程序來說,生成唯一標識符都是必要步驟。本文討論了三種常用的方法:UUID——本地生成ID,持久層驅動ID——集中創建ID,以及SnowflakeID——作為網絡服務生成ID。

沒有一勞永逸的解決方案。在應用程序中,選擇生成唯一ID的方法需要考慮數據、持久性選項和網絡基礎設施等各個方面,這樣才能挑到符合你需求和想法規模的方案。

責任編輯:張燕妮 來源: 讀芯術
相關推薦

2022-02-23 07:09:30

分布式ID雪花算法

2019-09-05 13:06:08

雪花算法分布式ID

2024-02-02 10:57:12

Java分布式算法

2023-12-13 09:35:52

算法分布式

2023-12-12 07:13:39

雪花算法分布式ID

2021-07-02 06:54:43

分布式環境ID

2021-06-28 14:45:07

分布式框架操作

2017-04-12 09:29:02

HiveMapReduceSpark

2017-07-01 16:02:39

分布式ID生成器

2021-11-08 19:25:37

Go生成系統

2017-10-27 08:40:44

分布式存儲剪枝系統

2021-06-05 07:33:09

ID分布式架構

2023-09-03 22:14:23

分布式ID

2024-11-19 15:55:49

2016-11-29 09:12:21

數據庫分布式ID

2024-10-31 13:51:58

2022-09-28 07:58:06

MongoDB分布式ID

2016-01-12 14:59:40

分布式存儲分布式存儲架構

2013-03-22 14:44:52

大規模分布式系統飛天開放平臺

2023-01-12 17:46:37

分庫分表id如何生成
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久99国产精品免费 | 日韩中文字幕在线观看 | 中文字幕1区2区 | 综合精品久久久 | 欧美一区免费 | 久久国产高清 | 亚洲精品自在在线观看 | 日韩免费看视频 | 欧美一级二级视频 | 国产精品久久久久久久久久免费看 | 精品二三区 | 亚洲一区二区三区免费观看 | 欧美日韩久久 | 欧美中文字幕一区 | 黄网站免费在线观看 | 成人免费在线播放 | 国产在线一区二区三区 | 成年人黄色一级片 | 97伦理电影| 一区二区三区免费观看 | h片在线看 | 国产精品亚洲一区 | 亚洲一区二区三区四区在线观看 | 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | 亚洲综合99 | 久久精品国产一区二区电影 | 请别相信他免费喜剧电影在线观看 | 国产免费av在线 | 久久精品播放 | 一区二区三区在线 | 美女天天操| 欧美一区二区在线免费观看 | 岛国二区| 日本三级全黄三级a | 国产在线麻豆精品入口 | 亚洲一区二区三区免费视频 | 国产日韩欧美在线播放 | 免费在线精品视频 | 日本一区二区三区精品视频 | 欧美精品乱码久久久久久按摩 | 国产丝袜一区二区三区免费视频 |