成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

分享代碼片段:web集群全局唯一request id生成算法, 替代uuid等“通用”方案

daryl / 2844人閱讀

摘要:如何為每一個(gè)請(qǐng)求分配一個(gè)在全集群范圍內(nèi)都唯一的,卻又不想去實(shí)現(xiàn)一個(gè)復(fù)雜的集中式序列生成器呢這或許是個(gè)辦法,但不覺得不太甘心么下面的這個(gè)方式可能可以幫到你自增,用于的生成過(guò)程啟動(dòng)加載時(shí)的時(shí)間戳,用于的生成過(guò)程本機(jī)地址,用于的生成過(guò)程規(guī)則將

如何為每一個(gè)web請(qǐng)求分配一個(gè)在全集群范圍內(nèi)都唯一的request id,卻又不想去實(shí)現(xiàn)一個(gè)復(fù)雜的集中式id序列生成器呢?
UUID? 這或許是個(gè)辦法,但不覺得不太甘心么?
下面的這個(gè)方式可能可以幫到你:

package test;

import java.util.concurrent.atomic.AtomicLong;

import test.LocalIpAddressUtil;

public class UniqRequestIdGen {

    private static AtomicLong   lastId         = new AtomicLong();                                         // 自增id,用于requestId的生成過(guò)程
    private static final long   startTimeStamp = System.currentTimeMillis();                               // 啟動(dòng)加載時(shí)的時(shí)間戳,用于requestId的生成過(guò)程
    private static final String ip             = LocalIpAddressUtil.resolveLocalAddress().getHostAddress(); // 本機(jī)ip地址,用于requestId的生成過(guò)程

    public static void main(String[] args) {
        System.out.println(resolveReqId());
    }

    private static String resolveReqId() {
        // 規(guī)則: hexIp(ip)base36(timestamp)-seq
        return hexIp(ip) + Long.toString(startTimeStamp, Character.MAX_RADIX) + "-" + lastId.incrementAndGet();
    }

    // 將ip轉(zhuǎn)換為定長(zhǎng)8個(gè)字符的16進(jìn)制表示形式:255.255.255.255 -> FFFFFFFF
    private static String hexIp(String ip) {
        StringBuilder sb = new StringBuilder();
        for (String seg : ip.split(".")) {
            String h = Integer.toHexString(Integer.parseInt(seg));
            if (h.length() == 1) sb.append("0");
            sb.append(h);
        }
        return sb.toString();
    }

}

其思路在注釋里已經(jīng)解釋清楚了:這個(gè)id包含了本機(jī)ip、本應(yīng)用啟動(dòng)時(shí)的時(shí)間戳、本應(yīng)用內(nèi)部自增id這三個(gè)要素,并且以合適的轉(zhuǎn)碼方式組合而成,可以簡(jiǎn)單地做到全局唯一性

生成的唯一性requestId形如:0a11d448iaxk1z35-112
利用它不僅能唯一標(biāo)識(shí)一個(gè)請(qǐng)求,還能通過(guò)它反查到具體的機(jī)器ip

(注:其中引用到的LocalIpAddressUtil參見文章:http://segmentfault.com/a/1190000002637818 )

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64378.html

相關(guān)文章

  • 關(guān)于生成訂單號(hào)規(guī)則的一些思考

    摘要:關(guān)于我為什么寫這篇文章是因?yàn)榻裉煸谧鲇唵文K的時(shí)候看到之前的上描述的年月日用戶位企業(yè)位四位自增長(zhǎng)數(shù)。背景對(duì)于其定訂單的生成。個(gè)人的看法是主要是唯一,其他關(guān)于業(yè)務(wù)方面的不是太太重要。自增實(shí)現(xiàn)了用于將的值遞增,并返回結(jié)果。 關(guān)于我為什么寫這篇文章是因?yàn)榻裉煸谧鲇唵文K的時(shí)候,看到之前的PRD上描述的年月日+用戶id2位+企業(yè)id位+四位自增長(zhǎng)數(shù)。然后竟被我反駁的突然改成了精確時(shí)間+4位自增...

    omgdog 評(píng)論0 收藏0
  • php與唯一ID生成的相關(guān)事宜

    摘要:原文地址唯一的生成并不是一件小事想說(shuō)愛它也并不是像簡(jiǎn)單來(lái)一個(gè)這樣一件容易的事為什么要唯一數(shù)據(jù)庫(kù)的自增在分庫(kù)的時(shí)候會(huì)是一場(chǎng)災(zāi)難假設(shè)分兩個(gè)庫(kù)因?yàn)槊總€(gè)庫(kù)都會(huì)開始從開始自增屆時(shí)系統(tǒng)中將會(huì)出現(xiàn)兩個(gè)為的用戶自增會(huì)暴露用戶量或者其他業(yè)務(wù)量自增會(huì)讓有心者 [原文地址:https://blog.ti-node.com/blog...] 唯一ID的生成并不是一件小事 , 想說(shuō)愛它 , 也并不是像簡(jiǎn)單來(lái)一個(gè)...

    pepperwang 評(píng)論0 收藏0
  • 分布式系統(tǒng)全局發(fā)號(hào)器的幾點(diǎn)思考

    摘要:為什么需要發(fā)號(hào)器在分布式系統(tǒng)中,經(jīng)常需要對(duì)大量的數(shù)據(jù)消息請(qǐng)求等進(jìn)行唯一標(biāo)識(shí),例如對(duì)于分布式系統(tǒng),服務(wù)間相互調(diào)用需要唯一標(biāo)識(shí),調(diào)用鏈路分析,日志追蹤的時(shí)候需要使用這個(gè)唯一標(biāo)識(shí)。 原文鏈接:何曉東 博客 文章起源于 康神交流群的 panda大佬和boss li關(guān)于發(fā)號(hào)器的一些交流,特此感謝讓我們學(xué)到了新知識(shí)。 為什么需要發(fā)號(hào)器 在分布式系統(tǒng)中,經(jīng)常需要對(duì)大量的數(shù)據(jù)、消息、http 請(qǐng)求等進(jìn)...

    dayday_up 評(píng)論0 收藏0
  • 分布式ID生成方案小結(jié)

    摘要:幾乎所有的系統(tǒng)都存在生成唯一的需求,如用戶賬單等,由于系統(tǒng)通常是分布式架構(gòu),因而需要有合適的分布式生成方案。優(yōu)勢(shì)和數(shù)據(jù)庫(kù)自增方案類似缺點(diǎn)同樣仍然有性能上限,依賴數(shù)據(jù)庫(kù)的可用性。使用時(shí),可以使用具體的場(chǎng)景選擇合適的方案。幾乎所有的系統(tǒng)都存在生成唯一ID的需求,如用戶ID、賬單ID等,由于系統(tǒng)通常是分布式架構(gòu),因而需要有合適的分布式ID生成方案。常見的分布式唯一ID方法有(歡迎補(bǔ)充):時(shí)間戳數(shù)據(jù)...

    Tecode 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<