分布式唯一ID

在分布式開發(fā)過程中,常常為數(shù)據(jù)唯一標(biāo)識(shí)苦惱,雖然數(shù)據(jù)庫提供了字段自增長,使用起來也簡(jiǎn)單,但是在數(shù)據(jù)庫改造過程中要分庫分表的時(shí)候,不能保證這些數(shù)據(jù)標(biāo)識(shí)的唯一;UUID出現(xiàn),保證了數(shù)據(jù)標(biāo)識(shí)的全球唯一,但是其生成為字符串,索引查詢和存儲(chǔ)效率低,并且生成標(biāo)識(shí)不具有順序性,導(dǎo)致后期的數(shù)據(jù)排序產(chǎn)生新的問題, 下面介紹了三種分布式環(huán)境下生成唯一ID的解決方案:UUID,Redis,SnowFlake,比較了一下它們?nèi)齻€(gè)的優(yōu)缺點(diǎn)

1. UUID

生成方式:?UUID 可以在程序中或者在數(shù)據(jù)庫中生成; 其目的是讓分布式系統(tǒng)中數(shù)據(jù)可以有唯一的存在標(biāo)識(shí); ?生成算法的核心思想是結(jié)合機(jī)器的網(wǎng)卡(若無網(wǎng)卡,找尋其它機(jī)器硬件唯一標(biāo)識(shí)碼代替)访惜、當(dāng)?shù)貢r(shí)間咽筋、一個(gè)隨即數(shù)來生成UUID,可以實(shí)現(xiàn)全球唯一

優(yōu)點(diǎn): ?(1)生成簡(jiǎn)單,性能好;

? ? ? ? ? ?(2)生成規(guī)則和網(wǎng)卡號(hào)等等機(jī)器硬件唯一編號(hào)有關(guān)系,所以可以實(shí)現(xiàn)全球唯一;

? ? ? ? ? ?(3)可以應(yīng)對(duì)系統(tǒng)合并和數(shù)據(jù)遷移的問題;

缺點(diǎn): ?(1) 無序的,不能保證生成ID的遞增關(guān)系,當(dāng)數(shù)據(jù)分庫存儲(chǔ)時(shí),不利于數(shù)據(jù)的排序; ?

? ? ? ? ? ?(2)字符串存儲(chǔ),當(dāng)字符串比較大的時(shí)候,查詢的性能比較低,并且在海量數(shù)據(jù)下占用的存儲(chǔ)空間比較大,系統(tǒng)之間傳輸?shù)拈_銷比較大;

? ? ? ? ? ?(3)生成的字符串不可讀,不友好;

2. Redis實(shí)現(xiàn)

? ? 生成方式: ?利用redis的lua腳本執(zhí)行功能令哟,在每個(gè)節(jié)點(diǎn)上通過lua腳本生成唯一ID

? ? ? ? 實(shí)現(xiàn)比較靈活,生成的ID格式可以自定義, 舉例實(shí)現(xiàn)方式:

????????使用41 bit來存放時(shí)間,精確到毫秒齿椅,可以使用41年; 使用12 bit來存放邏輯分片ID戈轿, ? ? ?最大分片ID是4095; 使用10 bit來存放自增長ID,意味著每個(gè)節(jié)點(diǎn)店雅,每毫秒最多可以生成1024個(gè)ID; 因此, 生成唯一標(biāo)識(shí)為64位;

優(yōu)點(diǎn): ?(1) 生成ID靈活,可以自定義生成唯一標(biāo)識(shí)的格式;

? ? ? ? ? ? (2) 單線程,不存在線程安全的問題;

缺點(diǎn): ?(1) 開發(fā)成本高,相對(duì)于其它解決方案開發(fā)過程復(fù)雜

? ? ? ? ? ? (2)Redis的單線程雖然保證了線程的安全,但是在高負(fù)載的系統(tǒng)中成為系統(tǒng)的瓶頸

? ? ? ? ? ? (3)時(shí)間倒流的時(shí)候,不能保證系統(tǒng)生成的唯一性

3. twitter家自用的Snowflake

(1) 41位的時(shí)間序列(精確到毫秒政基,41位的長度可以使用69年)

(2) 10位的機(jī)器標(biāo)識(shí)(10位的長度最多支持部署1024個(gè)節(jié)點(diǎn))

(3) 12位的計(jì)數(shù)順序號(hào)(12位的計(jì)數(shù)順序號(hào)支持每個(gè)節(jié)點(diǎn)每毫秒產(chǎn)生4096個(gè)ID序號(hào)) 最高位是符號(hào)位,始終為0闹啦。

優(yōu)點(diǎn):高性能沮明,低延遲;獨(dú)立的應(yīng)用窍奋;可以按照按時(shí)間有序,適合分布式環(huán)境數(shù)據(jù)排序

缺點(diǎn):需要獨(dú)立的開發(fā)和部署; 存在時(shí)間倒退的風(fēng)險(xiǎn)問題;



如果是在復(fù)雜分布式系統(tǒng)中,上面三個(gè)傾力推薦Snowflake, 開發(fā)使用相對(duì)UUID來說比較復(fù)雜,但是比Redis來做要簡(jiǎn)單;

未完待續(xù)...

發(fā)現(xiàn)好的解決方案,繼續(xù)添加!!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荐健,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子琳袄,更是在濱河造成了極大的恐慌江场,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挚歧,死亡現(xiàn)場(chǎng)離奇詭異扛稽,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)滑负,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門在张,熙熙樓的掌柜王于貴愁眉苦臉地迎上來用含,“玉大人,你說我怎么就攤上這事帮匾∽暮В” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵瘟斜,是天一觀的道長缸夹。 經(jīng)常有香客問我,道長螺句,這世上最難降的妖魔是什么虽惭? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮蛇尚,結(jié)果婚禮上芽唇,老公的妹妹穿的比我還像新娘。我一直安慰自己取劫,他們只是感情好匆笤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谱邪,像睡著了一般炮捧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惦银,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天咆课,我揣著相機(jī)與錄音,去河邊找鬼扯俱。 笑死傀蚌,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蘸吓。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼撩幽,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼库继!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起窜醉,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤宪萄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后榨惰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拜英,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年琅催,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了居凶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虫给。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖侠碧,靈堂內(nèi)的尸體忽然破棺而出抹估,到底是詐尸還是另有隱情,我是刑警寧澤弄兜,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布药蜻,位于F島的核電站,受9級(jí)特大地震影響替饿,放射性物質(zhì)發(fā)生泄漏语泽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一视卢、第九天 我趴在偏房一處隱蔽的房頂上張望踱卵。 院中可真熱鬧,春花似錦腾夯、人聲如沸颊埃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽班利。三九已至,卻和暖如春榨呆,著一層夾襖步出監(jiān)牢的瞬間罗标,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國打工积蜻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留闯割,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓竿拆,卻偏偏與公主長得像宙拉,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子丙笋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理谢澈,服務(wù)發(fā)現(xiàn),斷路器御板,智...
    卡卡羅2017閱讀 134,659評(píng)論 18 139
  • 本文主要介紹在一個(gè)分布式系統(tǒng)中, 如何去生成全局唯一的 ID锥忿。 前言 單純的生成全局ID并不是什么難題,生成全局的...
    FX_SKY閱讀 2,333評(píng)論 0 6
  • 一怠肋,題記 所有的業(yè)務(wù)系統(tǒng)敬鬓,都有生成ID的需求,如訂單id,商品id钉答,文章ID等础芍。這個(gè)ID會(huì)是數(shù)據(jù)庫中的唯一主鍵,在...
    架構(gòu)師小秘圈閱讀 4,042評(píng)論 1 18
  • 數(shù)據(jù)在分片時(shí)希痴,典型的是分庫分表者甲,就有一個(gè)全局ID生成的問題。 單純的生成全局ID并不是什么難題砌创,但是生成的ID通常...
    小樓聽煙雨閱讀 4,320評(píng)論 0 8
  • 使用之前的準(zhǔn)備 “速易天貿(mào)”進(jìn)銷存是基于網(wǎng)頁的系統(tǒng)嫩实。您完全可以像上網(wǎng)刽辙,打開網(wǎng)頁一樣使用本系統(tǒng)。但通商軟件建議您使用...
    a85d6aa7027f閱讀 258評(píng)論 0 1