分布式 ID 生成方案

- 前言 -


- ID 生成方案 -
UUID/GUID
123e4567-e89b-12d3-a456-426655440000xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
"版本1" UUID 是根據(jù)時(shí)間和節(jié)點(diǎn) ID(通常是MAC地址)生成; "版本2" UUID是根據(jù)標(biāo)識(shí)符(通常是組或用戶ID)、時(shí)間和節(jié)點(diǎn)ID生成; "版本3" 和 "版本5" 確定性UUID 通過(guò)散列 (hashing) 命名空間 (namespace) 標(biāo)識(shí)符和名稱(chēng)生成; "版本4" UUID 使用隨機(jī)性或偽隨機(jī)性生成。
優(yōu)點(diǎn) 容易實(shí)現(xiàn),產(chǎn)生快 ID唯一(幾乎不會(huì)產(chǎn)生重復(fù)id) 無(wú)需中心化的服務(wù)器 不會(huì)泄漏商業(yè)機(jī)密 缺點(diǎn) 可讀性差 占用空間太多(16個(gè)字節(jié)) 影響數(shù)據(jù)庫(kù)的性能, 比如UUID or GUID as Primary Keys? Be Careful!

- 遞增的整數(shù) -
優(yōu)點(diǎn) 容易產(chǎn)生 可讀性好,容易記住 存儲(chǔ)很小,比如4個(gè)字節(jié) 缺點(diǎn) 需要中心化的服務(wù)器,并且需要處理單點(diǎn)的問(wèn)題,而且單點(diǎn)有性能瓶頸的問(wèn)題。 如果ID暴露給公共訪問(wèn),可能會(huì)泄漏商業(yè)機(jī)密。比如最近渾水報(bào)告通過(guò)統(tǒng)計(jì)銷(xiāo)售小票推斷出某商業(yè)模式的每日單量。 需要訪問(wèn)一次數(shù)據(jù)庫(kù)獲取ID

- 隨機(jī)數(shù) -
優(yōu)點(diǎn) 可讀性高 占用存儲(chǔ)小,4個(gè)字節(jié)就可以了 隨機(jī),不會(huì)泄漏信息 缺點(diǎn) 同樣需要中心化的服務(wù),有單點(diǎn)問(wèn)題和性能問(wèn)題 需要兩步,先產(chǎn)生遞增的ID,再進(jìn)行隨機(jī)加密

- 隨機(jī)字符串 -
優(yōu)點(diǎn) 短,5個(gè)字符(字節(jié))就可以表示10億個(gè)ID。 可讀性高 隨機(jī),不會(huì)泄漏信息 缺點(diǎn) ID可能不唯一,需要檢查和處理

- Twitter的snowflake算法 -

優(yōu)點(diǎn) 存儲(chǔ)少, 8個(gè)字節(jié) 可讀性高 性能好,可以中心化的產(chǎn)生ID,也可以獨(dú)立節(jié)點(diǎn)生成 缺點(diǎn) 時(shí)間回?fù)軙?huì)重復(fù)產(chǎn)生ID ID生成有規(guī)律性,信息容易泄漏

- MongoDB ObjectID -

優(yōu)點(diǎn) 可讀性高 性能好,可以中心化的產(chǎn)生ID,也可以獨(dú)立節(jié)點(diǎn)生成 缺點(diǎn) 占用存儲(chǔ)較多 時(shí)間回?fù)軙?huì)重復(fù)產(chǎn)生ID ID生成有規(guī)律性,信息容易泄漏

- 分布式 ID 生成器服務(wù) did -
1、256個(gè)client并發(fā),每次只獲取1個(gè)ID, ID的產(chǎn)生速度是 12萬(wàn)個(gè)ID/秒。./bclient -addr 192.168.15.225:8972 -n 100000total IDs: 25600000, duration: 3m31.581592489s, id/s: 1209932、如果采用批量獲取,盡量減少網(wǎng)絡(luò)消耗,256個(gè)client并發(fā),每次只獲取100個(gè)ID, ID的產(chǎn)生速度是 297萬(wàn)個(gè)ID/秒。./bclient -addr 192.168.15.225:8972 -n 1000000 -b 100total IDs: 256000000, duration: 1m26.178942509s, id/s: 2970563
https://www.simpleorientedarchitecture.com/7-strategies-for-assigning-ids/ https://www.callicoder.com/distributed-unique-id-sequence-number-generator/ https://juejin.im/post/5b3a23746fb9a024e15cad79 https://tech.meituan.com/2017/04/21/mt-leaf.html https://i6448038.github.io/2019/09/28/snowflake/ https://soulmachine.gitbooks.io/system-design/content/cn/distributed-id-generator.html https://juejin.im/post/5bb0217ef265da0ac2567b42 https://chai2010.cn/advanced-go-programming-book/ch6-cloud/ch6-01-dist-id.html https://zh.wikipedia.org/zh-hans/%E9%80%9A%E7%94%A8%E5%94%AF%E4%B8%80%E8%AF%86%E5%88%AB%E7%A0%81 https://zhuanlan.zhihu.com/p/46404167
作者:smallnest
來(lái)源:
https://colobu.com/2020/02/21/ID-generator/

評(píng)論
圖片
表情
