京東一面:分布式 ID 生成方案怎么選?寫得太好了!
點(diǎn)擊關(guān)注公眾號(hào),Java干貨及時(shí)送達(dá)
背景
在分布式系統(tǒng)中,經(jīng)常需要用到全局唯一ID發(fā)生器,標(biāo)識(shí)需要存儲(chǔ)的數(shù)據(jù)。我們需要什么樣的ID生成器?
ID生成器除了是數(shù)據(jù)的唯一標(biāo)識(shí)以外,一般需要在系統(tǒng)中承擔(dān)更多的責(zé)任,概括起來(lái)有以下幾點(diǎn)。另外,分布式系列面試題和答案全部整理好了,微信搜索Java技術(shù)棧,在后臺(tái)發(fā)送:面試,可以在線閱讀。
唯一性:“全局唯一” vs “業(yè)務(wù)唯一”?
時(shí)間相關(guān):“秒級(jí)” vs “毫秒”?
有序:“粗略有序” vs “精確有序”?
設(shè)計(jì)細(xì)節(jié)
看下業(yè)界如何設(shè)計(jì)ID發(fā)生器。另外,想成為架構(gòu)師,這份架構(gòu)師圖譜建議看看,少走彎路。
SnowFlake
41bit留給毫秒時(shí)間,10bit給機(jī)器 (MachineID) ,剩下12bit留給Sequence。
Flicker
REPLACE?INTO?Tickets64?(stub)?VALUES?('a');
SELECT?LAST_INSERT_ID();
TicketServer1:
auto-increment-increment?=?2
auto-increment-offset?=?1
TicketServer2:
auto-increment-increment?=?2
auto-increment-offset?=?2
微信

Shopee Feeds 如何生成ID ?
考慮到Feeds業(yè)務(wù)的特性,并不需要精確有序,因此我們使用snowflake算法進(jìn)行ID生成。使用39 (毫秒)+ 5(機(jī)器) + 9(seq),來(lái)保證ID作為Redis的score不會(huì)溢出。最新面試題整理好了,大家可以在Java面試庫(kù)小程序在線刷題。
這樣的ID生成器可以使用大約17年,對(duì)于一款產(chǎn)品的生命周期來(lái)說(shuō)已經(jīng)足夠使用。
作者:cyningsun
來(lái)源:www.cyningsun.com/12-26-2018/id-generator.html
????
往 期 推 薦
1、來(lái)自谷歌的開(kāi)發(fā)心得:所有SQL和代碼,都沒(méi)必要藏著掖著
2、用了這么久的?Chrome,你不會(huì)還沒(méi)掌握這個(gè)功能吧?
點(diǎn)分享
點(diǎn)收藏
點(diǎn)點(diǎn)贊
點(diǎn)在看





