分布式唯一ID生成常用方案有哪些

分布式唯一ID生成常用方案有哪些,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

十年的休寧縣網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營(yíng)銷(xiāo)型網(wǎng)站的優(yōu)勢(shì)是能夠根據(jù)用戶(hù)設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整休寧縣建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)建站從事“休寧縣網(wǎng)站設(shè)計(jì)”,“休寧縣網(wǎng)站推廣”以來(lái),每個(gè)客戶(hù)項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

1. 使用JAVA的UUID生成
算法的核心思想是結(jié)合機(jī)器的網(wǎng)卡、當(dāng)?shù)貢r(shí)間、一個(gè)隨記數(shù)來(lái)生成UUID。

優(yōu)點(diǎn):本地生成,生成簡(jiǎn)單,性能好,沒(méi)有高可用風(fēng)險(xiǎn)
缺點(diǎn):長(zhǎng)度過(guò)長(zhǎng),字母和數(shù)字組合,存儲(chǔ)冗余,且無(wú)序不可讀,查詢(xún)效率低

2. 數(shù)據(jù)庫(kù)自增ID

使用數(shù)據(jù)庫(kù)的id自增策略,如 MySQL 的 auto_increment、oracle的sequence。并且可以使用兩臺(tái)數(shù)據(jù)庫(kù)分別設(shè)置不同步長(zhǎng),生成不重復(fù)ID的策略來(lái)實(shí)現(xiàn)高可用。

優(yōu)點(diǎn):數(shù)據(jù)庫(kù)生成的ID絕對(duì)有序,高可用實(shí)現(xiàn)方式簡(jiǎn)單
缺點(diǎn):需要獨(dú)立部署數(shù)據(jù)庫(kù)實(shí)例,成本高,實(shí)時(shí)操作數(shù)據(jù)庫(kù),大并發(fā)時(shí)存在性能瓶頸問(wèn)題

3. 數(shù)據(jù)庫(kù)+程序(批量生成ID
一次按需批量生成多個(gè)ID,每次生成都需要訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),將數(shù)據(jù)庫(kù)修改為最大的ID值,并在內(nèi)存中記錄當(dāng)前值及最大值。

優(yōu)點(diǎn):避免了每次生成ID都要訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)并帶來(lái)壓力,提高了性能
缺點(diǎn):屬于本地生成策略,存在單點(diǎn)故障,如果服務(wù)器宕機(jī),重啟服務(wù)造成ID不連續(xù)

4. redis生成ID
Redis的所有命令操作都是單線(xiàn)程的,本身提供像 incr 和 increby 這樣的自增原子命令,所以能保證生成的 ID 肯定是唯一有序的。

優(yōu)點(diǎn):不依賴(lài)于數(shù)據(jù)庫(kù),靈活方便,且性能優(yōu)于數(shù)據(jù)庫(kù);數(shù)字ID天然排序,對(duì)分頁(yè)或者需要排序的結(jié)果很有幫助。

缺點(diǎn):如果系統(tǒng)中沒(méi)有Redis,還需要引入新的組件,增加系統(tǒng)復(fù)雜度;需要編碼和配置的工作量比較大。

考慮到單節(jié)點(diǎn)的性能瓶頸,可以使用 Redis 集群來(lái)獲取更高的吞吐量。假如一個(gè)集群中有3臺(tái) Redis??梢猿跏蓟颗_(tái) Redis 的值分別是1, 2, 3,然后步長(zhǎng)都是3。各個(gè) Redis 生成的 ID 為:

A:1, 4, 7, 10, 13
B:2, 5, 8, 11, 14
C:3, 6, 9, 12, 15

隨便負(fù)載到哪個(gè)機(jī)確定好,未來(lái)很難做修改。步長(zhǎng)和初始值一定需要事先確定。使用 Redis 集群也可以方式單點(diǎn)故障的問(wèn)題。
另外,比較適合使用 Redis 來(lái)生成每天從0開(kāi)始的流水號(hào)。比如訂單號(hào) = 日期 + 當(dāng)日自增長(zhǎng)號(hào)??梢悦刻煸?Redis 中生成一個(gè) Key ,使用 INCR 進(jìn)行累加。

5.MongoDB生成ID

MongoDB的ObjectId和snowflake算法類(lèi)似。它設(shè)計(jì)成輕量型的,不同的機(jī)器都能用全局唯一的同種方法方便地生成它。MongoDB 從一開(kāi)始就設(shè)計(jì)用來(lái)作為分布式數(shù)據(jù)庫(kù),處理多個(gè)節(jié)點(diǎn)是一個(gè)核心要求。使其在分片環(huán)境中要容易生成得多。

6.其他一些常用的方案

  

      百度uid生成器:https://github.com/baidu/uid-generator

      美團(tuán)點(diǎn)評(píng)生成器:http://tech.meituan.com/MT_Leaf.html

      zookeeper方式生成唯一UUID

      snowflake算法生成UUID

分布式唯一ID生成常用方案有哪些

看完上述內(nèi)容,你們掌握分布式唯一ID生成常用方案有哪些的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

本文標(biāo)題:分布式唯一ID生成常用方案有哪些
轉(zhuǎn)載來(lái)源:http://bm7419.com/article16/jceddg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作網(wǎng)頁(yè)設(shè)計(jì)公司、品牌網(wǎng)站設(shè)計(jì)商城網(wǎng)站、定制開(kāi)發(fā)、App開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)