欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Dubbo負(fù)載均衡策略之一致性哈希

OSC開(kāi)源社區(qū) ? 來(lái)源:京東技術(shù) ? 2023-06-16 15:30 ? 次閱讀

導(dǎo)讀

本文主要講解了一致性哈希算法的原理以及其存在的數(shù)據(jù)傾斜的問(wèn)題,然后引出解決數(shù)據(jù)傾斜問(wèn)題的方法,最后分析一致性哈希算法在Dubbo中的使用。通過(guò)這篇文章,可以了解到一致性哈希算法的原理以及這種算法存在的問(wèn)題和解決方案。

01負(fù)載均衡

在這里引用dubbo官網(wǎng)的一段話——

LoadBalance 中文意思為負(fù)載均衡,它的職責(zé)是將網(wǎng)絡(luò)請(qǐng)求,或者其他形式的負(fù)載“均攤”到不同的機(jī)器上。避免集群中部分服務(wù)器壓力過(guò)大,而另一些服務(wù)器比較空閑的情況。通過(guò)負(fù)載均衡,可以讓每臺(tái)服務(wù)器獲取到適合自己處理能力的負(fù)載。在為高負(fù)載服務(wù)器分流的同時(shí),還可以避免資源浪費(fèi),一舉兩得。負(fù)載均衡可分為軟件負(fù)載均衡和硬件負(fù)載均衡。在我們?nèi)粘i_(kāi)發(fā)中,一般很難接觸到硬件負(fù)載均衡。但軟件負(fù)載均衡還是可以接觸到的,比如 Nginx。在 Dubbo 中,也有負(fù)載均衡的概念和相應(yīng)的實(shí)現(xiàn)。Dubbo 需要對(duì)服務(wù)消費(fèi)者的調(diào)用請(qǐng)求進(jìn)行分配,避免少數(shù)服務(wù)提供者負(fù)載過(guò)大。服務(wù)提供者負(fù)載過(guò)大,會(huì)導(dǎo)致部分請(qǐng)求超時(shí)。因此將負(fù)載均衡到每個(gè)服務(wù)提供者上,是非常必要的。Dubbo 提供了4種負(fù)載均衡實(shí)現(xiàn),分別是基于權(quán)重隨機(jī)算法的 RandomLoadBalance、基于最少活躍調(diào)用數(shù)算法的 LeastActiveLoadBalance、基于hash 一致性的 ConsistentHashLoadBalance,以及基于加權(quán)輪詢算法的 RoundRobinLoadBalance。這幾個(gè)負(fù)載均衡算法代碼不是很長(zhǎng),但是想看懂也不是很容易,需要對(duì)這幾個(gè)算法的原理有一定了解才行。

02 哈希算法

7d315652-0c16-11ee-962d-dac502259ad0.png

圖1無(wú)哈希算法請(qǐng)求

如上所示,假設(shè)0,1,2號(hào)服務(wù)器都存儲(chǔ)的有用戶信息,那么當(dāng)我們需要獲取某用戶信息時(shí),因?yàn)槲覀儾恢涝撚脩粜畔⒋娣旁谀囊慌_(tái)服務(wù)器中,所以需要分別查詢0,1,2號(hào)服務(wù)器。這樣獲取數(shù)據(jù)的效率是極低的。

對(duì)于這樣的場(chǎng)景,我們可以引入哈希算法。

7d532782-0c16-11ee-962d-dac502259ad0.png

圖2引入哈希算法后的請(qǐng)求

還是上面的場(chǎng)景,但前提是每一臺(tái)服務(wù)器存放用戶信息時(shí)是根據(jù)某一種哈希算法存放的。所以取用戶信息的時(shí)候,也按照同樣的哈希算法取即可。

假設(shè)我們要查詢用戶號(hào)為100的用戶信息,經(jīng)過(guò)某個(gè)哈希算法,比如這里的userId mod n,即100 mod 3結(jié)果為1。所以用戶號(hào)100的這個(gè)請(qǐng)求最終會(huì)被1號(hào)服務(wù)器接收并處理。

這樣就解決了無(wú)效查詢的問(wèn)題。

但是這樣的方案會(huì)帶來(lái)什么問(wèn)題呢?

擴(kuò)容或者縮容時(shí),會(huì)導(dǎo)致大量的數(shù)據(jù)遷移。最少也會(huì)影響50%的數(shù)據(jù)。

7d6e16a0-0c16-11ee-962d-dac502259ad0.png

圖3增加一臺(tái)服務(wù)器

為了說(shuō)明問(wèn)題,加入一臺(tái)服務(wù)器3。服務(wù)器的數(shù)量n就從3變成了4。還是查詢用戶號(hào)為100的用戶信息時(shí),100 mod 4結(jié)果為0。這時(shí),請(qǐng)求就被0號(hào)服務(wù)器接收了。

當(dāng)服務(wù)器數(shù)量為3時(shí),用戶號(hào)為100的請(qǐng)求會(huì)被1號(hào)服務(wù)器處理。

當(dāng)服務(wù)器數(shù)量為4時(shí),用戶號(hào)為100的請(qǐng)求會(huì)被0號(hào)服務(wù)器處理。

所以,當(dāng)服務(wù)器數(shù)量增加或者減少時(shí),一定會(huì)涉及到大量數(shù)據(jù)遷移的問(wèn)題。

對(duì)于上述哈希算法其優(yōu)點(diǎn)是簡(jiǎn)單易用,大多數(shù)分庫(kù)分表規(guī)則就采取的這種方式。一般是提前根據(jù)數(shù)據(jù)量,預(yù)先估算好分區(qū)數(shù)。

其缺點(diǎn)是由于擴(kuò)容或收縮節(jié)點(diǎn)導(dǎo)致節(jié)點(diǎn)數(shù)量變化時(shí),節(jié)點(diǎn)的映射關(guān)系需要重新計(jì)算,會(huì)導(dǎo)致數(shù)據(jù)進(jìn)行遷移。所以擴(kuò)容時(shí)通常采用翻倍擴(kuò)容,避免數(shù)據(jù)映射全部被打亂,導(dǎo)致全量遷移的情況,這樣只會(huì)發(fā)生50%的數(shù)據(jù)遷移。

03一致性哈希算法

一致性 hash 算法由麻省理工學(xué)院的 Karger 及其合作者于1997年提出的,算法提出之初是用于大規(guī)模緩存系統(tǒng)的負(fù)載均衡。它的工作過(guò)程是這樣的,首先根據(jù) ip 或者其他的信息為緩存節(jié)點(diǎn)生成一個(gè) hash,并將這個(gè) hash 投射到 [0, 232 - 1] 的圓環(huán)上。當(dāng)有查詢或?qū)懭胝?qǐng)求時(shí),則為緩存項(xiàng)的 key 生成一個(gè) hash 值。然后查找第一個(gè)大于或等于該 hash 值的緩存節(jié)點(diǎn),并到這個(gè)節(jié)點(diǎn)中查詢或?qū)懭刖彺骓?xiàng)。如果當(dāng)前節(jié)點(diǎn)掛了,則在下一次查詢或?qū)懭刖彺鏁r(shí),為緩存項(xiàng)查找另一個(gè)大于其 hash 值的緩存節(jié)點(diǎn)即可。大致效果如下圖所示,每個(gè)緩存節(jié)點(diǎn)在圓環(huán)上占據(jù)一個(gè)位置。如果緩存項(xiàng)的 key 的 hash 值小于緩存節(jié)點(diǎn) hash 值,則到該緩存節(jié)點(diǎn)中存儲(chǔ)或讀取緩存項(xiàng)。比如下面綠色點(diǎn)對(duì)應(yīng)的緩存項(xiàng)將會(huì)被存儲(chǔ)到 cache-2 節(jié)點(diǎn)中。由于 cache-3 掛了,原本應(yīng)該存到該節(jié)點(diǎn)中的緩存項(xiàng)最終會(huì)存儲(chǔ)到cache-4節(jié)點(diǎn)中。

7daecbaa-0c16-11ee-962d-dac502259ad0.png

圖4一致性哈希算法

在一致性哈希算法中,不管是增加節(jié)點(diǎn),還是宕機(jī)節(jié)點(diǎn),受影響的區(qū)間僅僅是增加或者宕機(jī)服務(wù)器在哈希環(huán)空間中,逆時(shí)針方向遇到的第一臺(tái)服務(wù)器之間的區(qū)間,其它區(qū)間不會(huì)受到影響。

但是一致性哈希也是存在問(wèn)題的:

7dda212e-0c16-11ee-962d-dac502259ad0.png

圖5數(shù)據(jù)傾斜

當(dāng)節(jié)點(diǎn)很少的時(shí)候可能會(huì)出現(xiàn)這樣的分布情況,A服務(wù)會(huì)承擔(dān)大部分請(qǐng)求。這種情況就叫做數(shù)據(jù)傾斜。

那如何解決數(shù)據(jù)傾斜的問(wèn)題呢?

加入虛擬節(jié)點(diǎn)。

首先一個(gè)服務(wù)器根據(jù)需要可以有多個(gè)虛擬節(jié)點(diǎn)。假設(shè)一臺(tái)服務(wù)器有n個(gè)虛擬節(jié)點(diǎn)。那么哈希計(jì)算時(shí),可以使用IP+端口+編號(hào)的形式進(jìn)行哈希值計(jì)算。其中的編號(hào)就是0到n的數(shù)字。由于IP+端口是一樣的,所以這n個(gè)節(jié)點(diǎn)都是指向的同一臺(tái)機(jī)器。

7e009e30-0c16-11ee-962d-dac502259ad0.png

圖6引入虛擬節(jié)點(diǎn)

在沒(méi)有加入虛擬節(jié)點(diǎn)之前,A服務(wù)器承擔(dān)了絕大多數(shù)的請(qǐng)求。但是假設(shè)每個(gè)服務(wù)器有一個(gè)虛擬節(jié)點(diǎn)(A-1,B-1,C-1),經(jīng)過(guò)哈希計(jì)算后落在了如上圖所示的位置。那么A服務(wù)器的承擔(dān)的請(qǐng)求就在一定程度上(圖中標(biāo)注了五角星的部分)分?jǐn)偨o了B-1、C-1虛擬節(jié)點(diǎn),實(shí)際上就是分?jǐn)偨o了B、C服務(wù)器。

一致性哈希算法中,加入虛擬節(jié)點(diǎn),可以解決數(shù)據(jù)傾斜問(wèn)題。

04一致性哈希在DUBBO中的應(yīng)用

7e38a140-0c16-11ee-962d-dac502259ad0.png

圖7Dubbo中一致性哈希環(huán)

這里相同顏色的節(jié)點(diǎn)均屬于同一個(gè)服務(wù)提供者,比如 Invoker1-1,Invoker1-2,……, Invoker1-160。這樣做的目的是通過(guò)引入虛擬節(jié)點(diǎn),讓 Invoker 在圓環(huán)上分散開(kāi)來(lái),避免數(shù)據(jù)傾斜問(wèn)題。所謂數(shù)據(jù)傾斜是指,由于節(jié)點(diǎn)不夠分散,導(dǎo)致大量請(qǐng)求落到了同一個(gè)節(jié)點(diǎn)上,而其他節(jié)點(diǎn)只會(huì)接收到了少量請(qǐng)求的情況。比如:

7e6dc262-0c16-11ee-962d-dac502259ad0.png

圖8數(shù)據(jù)傾斜問(wèn)題

如上,由于 Invoker-1 和 Invoker-2 在圓環(huán)上分布不均,導(dǎo)致系統(tǒng)中75%的請(qǐng)求都會(huì)落到 Invoker-1 上,只有 25% 的請(qǐng)求會(huì)落到 Invoker-2 上。解決這個(gè)問(wèn)題辦法是引入虛擬節(jié)點(diǎn),通過(guò)虛擬節(jié)點(diǎn)均衡各個(gè)節(jié)點(diǎn)的請(qǐng)求量。

到這里背景知識(shí)就普及完了,接下來(lái)開(kāi)始分析源碼。我們先從 ConsistentHashLoadBalance 的 doSelect 方法開(kāi)始看起,如下:

public class ConsistentHashLoadBalance extends AbstractLoadBalance {


    private final ConcurrentMap> selectors = 
        new ConcurrentHashMap>();


    @Override
    protected  Invoker doSelect(List> invokers, URL url, Invocation invocation) {
        String methodName = RpcUtils.getMethodName(invocation);
        String key = invokers.get(0).getUrl().getServiceKey() + "." + methodName;


        // 獲取 invokers 原始的 hashcode
        int identityHashCode = System.identityHashCode(invokers);
        ConsistentHashSelector selector = (ConsistentHashSelector) selectors.get(key);
        // 如果 invokers 是一個(gè)新的 List 對(duì)象,意味著服務(wù)提供者數(shù)量發(fā)生了變化,可能新增也可能減少了。
        // 此時(shí) selector.identityHashCode != identityHashCode 條件成立
        if (selector == null || selector.identityHashCode != identityHashCode) {
            // 創(chuàng)建新的 ConsistentHashSelector
            selectors.put(key, new ConsistentHashSelector(invokers, methodName, identityHashCode));
            selector = (ConsistentHashSelector) selectors.get(key);
        }


        // 調(diào)用 ConsistentHashSelector 的 select 方法選擇 Invoker
        return selector.select(invocation);
    }
    
    private static final class ConsistentHashSelector {...}
}

如上,doSelect 方法主要做了一些前置工作,比如檢測(cè) invokers 列表是不是變動(dòng)過(guò),以及創(chuàng)建 ConsistentHashSelector。這些工作做完后,接下來(lái)開(kāi)始調(diào)用 ConsistentHashSelector 的 select 方法執(zhí)行負(fù)載均衡邏輯。在分析 select 方法之前,我們先來(lái)看一下一致性 hash 選擇器 ConsistentHashSelector 的初始化過(guò)程,如下:

private static final class ConsistentHashSelector {


    // 使用 TreeMap 存儲(chǔ) Invoker 虛擬節(jié)點(diǎn)
    private final TreeMap> virtualInvokers;


    private final int replicaNumber;


    private final int identityHashCode;


    private final int[] argumentIndex;


    ConsistentHashSelector(List> invokers, String methodName, int identityHashCode) {
        this.virtualInvokers = new TreeMap>();
        this.identityHashCode = identityHashCode;
        URL url = invokers.get(0).getUrl();
        // 獲取虛擬節(jié)點(diǎn)數(shù),默認(rèn)為160
        this.replicaNumber = url.getMethodParameter(methodName, "hash.nodes", 160);
        // 獲取參與 hash 計(jì)算的參數(shù)下標(biāo)值,默認(rèn)對(duì)第一個(gè)參數(shù)進(jìn)行 hash 運(yùn)算
        String[] index = Constants.COMMA_SPLIT_PATTERN.split(url.getMethodParameter(methodName, "hash.arguments", "0"));
        argumentIndex = new int[index.length];
        for (int i = 0; i < index.length; i++) {
            argumentIndex[i] = Integer.parseInt(index[i]);
        }
        for (Invoker invoker : invokers) {
            String address = invoker.getUrl().getAddress();
            for (int i = 0; i < replicaNumber / 4; i++) {
                // 對(duì) address + i 進(jìn)行 md5 運(yùn)算,得到一個(gè)長(zhǎng)度為16的字節(jié)數(shù)組
                byte[] digest = md5(address + i);
                // 對(duì) digest 部分字節(jié)進(jìn)行4次 hash 運(yùn)算,得到四個(gè)不同的 long 型正整數(shù)
                for (int h = 0; h < 4; h++) {
                    // h = 0 時(shí),取 digest 中下標(biāo)為 0 ~ 3 的4個(gè)字節(jié)進(jìn)行位運(yùn)算
                    // h = 1 時(shí),取 digest 中下標(biāo)為 4 ~ 7 的4個(gè)字節(jié)進(jìn)行位運(yùn)算
                    // h = 2, h = 3 時(shí)過(guò)程同上
                    long m = hash(digest, h);
                    // 將 hash 到 invoker 的映射關(guān)系存儲(chǔ)到 virtualInvokers 中,
                    // virtualInvokers 需要提供高效的查詢操作,因此選用 TreeMap 作為存儲(chǔ)結(jié)構(gòu)
                    virtualInvokers.put(m, invoker);
                }
            }
        }
    }
}

ConsistentHashSelector 的構(gòu)造方法執(zhí)行了一系列的初始化邏輯,比如從配置中獲取虛擬節(jié)點(diǎn)數(shù)以及參與 hash 計(jì)算的參數(shù)下標(biāo),默認(rèn)情況下只使用第一個(gè)參數(shù)進(jìn)行 hash。需要特別說(shuō)明的是,ConsistentHashLoadBalance 的負(fù)載均衡邏輯只受參數(shù)值影響,具有相同參數(shù)值的請(qǐng)求將會(huì)被分配給同一個(gè)服務(wù)提供者。ConsistentHashLoadBalance 不 關(guān)系權(quán)重,因此使用時(shí)需要注意一下。

在獲取虛擬節(jié)點(diǎn)數(shù)和參數(shù)下標(biāo)配置后,接下來(lái)要做的事情是計(jì)算虛擬節(jié)點(diǎn) hash 值,并將虛擬節(jié)點(diǎn)存儲(chǔ)到 TreeMap 中。到此,ConsistentHashSelector 初始化工作就完成了。接下來(lái),我們來(lái)看看 select 方法的邏輯。

public Invoker select(Invocation invocation) {
    // 將參數(shù)轉(zhuǎn)為 key
    String key = toKey(invocation.getArguments());
    // 對(duì)參數(shù) key 進(jìn)行 md5 運(yùn)算
    byte[] digest = md5(key);
    // 取 digest 數(shù)組的前四個(gè)字節(jié)進(jìn)行 hash 運(yùn)算,再將 hash 值傳給 selectForKey 方法,
    // 尋找合適的 Invoker
    return selectForKey(hash(digest, 0));
}


private Invoker selectForKey(long hash) {
    // 到 TreeMap 中查找第一個(gè)節(jié)點(diǎn)值大于或等于當(dāng)前 hash 的 Invoker
    Map.Entry> entry = virtualInvokers.tailMap(hash, true).firstEntry();
    // 如果 hash 大于 Invoker 在圓環(huán)上最大的位置,此時(shí) entry = null,
    // 需要將 TreeMap 的頭節(jié)點(diǎn)賦值給 entry
    if (entry == null) {
        entry = virtualInvokers.firstEntry();
    }


    // 返回 Invoker
    return entry.getValue();
}

如上,選擇的過(guò)程相對(duì)比較簡(jiǎn)單了。首先是對(duì)參數(shù)進(jìn)行 md5 以及 hash 運(yùn)算,得到一個(gè) hash 值。然后再拿這個(gè)值到 TreeMap 中查找目標(biāo) Invoker 即可。

到此關(guān)于 ConsistentHashLoadBalance 就分析完了。

在閱讀ConsistentHashLoadBalance 源碼之前,建議讀者先補(bǔ)充背景知識(shí),不然看懂代碼邏輯會(huì)有很大難度。

05應(yīng)用場(chǎng)景

DNS負(fù)載均衡最早的負(fù)載均衡技術(shù)是通過(guò)DNS來(lái)實(shí)現(xiàn)的,在DNS中為多個(gè)地址配置同一個(gè)名字,因而查詢這個(gè)名字的客戶機(jī)將得到其中一個(gè)地址,從而使得不同的客戶訪問(wèn)不同的服務(wù)器,達(dá)到負(fù)載均衡的目的。DNS負(fù)載均衡是一種簡(jiǎn)單而有效的方法,但是它不能區(qū)分服務(wù)器的差異,也不能反映服務(wù)器的當(dāng)前運(yùn)行狀態(tài)。

代理服務(wù)器負(fù)載均衡使用代理服務(wù)器,可以將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部的服務(wù)器,使用這種加速模式顯然可以提升靜態(tài)網(wǎng)頁(yè)的訪問(wèn)速度。然而,也可以考慮這樣一種技術(shù),使用代理服務(wù)器將請(qǐng)求均勻轉(zhuǎn)發(fā)給多臺(tái)服務(wù)器,從而達(dá)到負(fù)載均衡的目的。

地址轉(zhuǎn)換網(wǎng)關(guān)負(fù)載均衡支持負(fù)載均衡的地址轉(zhuǎn)換網(wǎng)關(guān),可以將一個(gè)外部IP地址映射為多個(gè)內(nèi)部IP地址,對(duì)每次TCP連接請(qǐng)求動(dòng)態(tài)使用其中一個(gè)內(nèi)部地址,達(dá)到負(fù)載均衡的目的。

協(xié)議內(nèi)部支持負(fù)載均衡除了這三種負(fù)載均衡方式之外,有的協(xié)議內(nèi)部支持與負(fù)載均衡相關(guān)的功能,例如HTTP協(xié)議中的重定向能力等,HTTP運(yùn)行于TCP連接的最高層。

NAT負(fù)載均衡NAT(Network Address Translation網(wǎng)絡(luò)地址轉(zhuǎn)換)簡(jiǎn)單地說(shuō)就是將一個(gè)IP地址轉(zhuǎn)換為另一個(gè)IP地址,一般用于未經(jīng)注冊(cè)的內(nèi)部地址與合法的、已獲注冊(cè)的Internet IP地址間進(jìn)行轉(zhuǎn)換。適用于解決Internet IP地址緊張、不想讓網(wǎng)絡(luò)外部知道內(nèi)部網(wǎng)絡(luò)結(jié)構(gòu)等的場(chǎng)合下。

反向代理負(fù)載均衡普通代理方式是代理內(nèi)部網(wǎng)絡(luò)用戶訪問(wèn)internet上服務(wù)器的連接請(qǐng)求,客戶端必須指定代理服務(wù)器,并將本來(lái)要直接發(fā)送到internet上服務(wù)器的連接請(qǐng)求發(fā)送給代理服務(wù)器處理。反向代理(Reverse Proxy)方式是指以代理服務(wù)器來(lái)接受internet上的連接請(qǐng)求,然后將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請(qǐng)求連接的客戶端,此時(shí)代理服務(wù)器對(duì)外就表現(xiàn)為一個(gè)服務(wù)器。反向代理負(fù)載均衡技術(shù)是把將來(lái)自internet上的連接請(qǐng)求以反向代理的方式動(dòng)態(tài)地轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的多臺(tái)服務(wù)器進(jìn)行處理,從而達(dá)到負(fù)載均衡的目的。

混合型負(fù)載均衡在有些大型網(wǎng)絡(luò),由于多個(gè)服務(wù)器群內(nèi)硬件設(shè)備、各自的規(guī)模、提供的服務(wù)等的差異,可以考慮給每個(gè)服務(wù)器群采用最合適的負(fù)載均衡方式,然后又在這多個(gè)服務(wù)器群間再一次負(fù)載均衡或群集起來(lái)以一個(gè)整體向外界提供服務(wù)(即把這多個(gè)服務(wù)器群當(dāng)做一個(gè)新的服務(wù)器群),從而達(dá)到最佳的性能。將這種方式稱之為混合型負(fù)載均衡。此種方式有時(shí)也用于單臺(tái)均衡設(shè)備的性能不能滿足大量連接請(qǐng)求的情況下。


審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4629

    瀏覽量

    93296
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    9295

    瀏覽量

    86001
  • 負(fù)載均衡
    +關(guān)注

    關(guān)注

    0

    文章

    113

    瀏覽量

    12389
  • Dubbo
    +關(guān)注

    關(guān)注

    0

    文章

    20

    瀏覽量

    3191

原文標(biāo)題:Dubbo負(fù)載均衡策略之 一致性哈希

文章出處:【微信號(hào):OSC開(kāi)源社區(qū),微信公眾號(hào):OSC開(kāi)源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    高速串行總線的物理層一致性測(cè)試是什么?由來(lái)呢?

    物理層的一致性測(cè)試作為近 10 多年來(lái)示波器最主要的用途之一直是產(chǎn)業(yè)界最常提到的名詞之一。本文嘗試將物理層一致性測(cè)試的含義,要素與目的及
    發(fā)表于 08-12 07:17

    MIPI一致性測(cè)試

    MIPI一致性測(cè)試測(cè)試項(xiàng)目:> TX測(cè)試;> RX測(cè)試;> S參數(shù)和阻抗測(cè)試;> DigRF,Unipro和LLI的測(cè)試;測(cè)試環(huán)境: MIPI測(cè)試對(duì)示波器帶寬的要求 >
    發(fā)表于 09-26 13:31

    什么是霍爾元件的一致性

    什么是霍爾元件的一致性?霍爾開(kāi)關(guān)元件主要是通過(guò)感應(yīng)磁性來(lái)進(jìn)行開(kāi)關(guān)機(jī),霍爾元件本身又屬于無(wú)觸點(diǎn)開(kāi)關(guān),因此具有感應(yīng)距離?;魻栭_(kāi)關(guān)都有個(gè)觸發(fā)值和釋放值,觸發(fā)值是指霍爾元件表面達(dá)到參數(shù)磁性大小,霍爾元器件
    發(fā)表于 10-12 09:34

    順序一致性和TSO一致性分別是什么?SC和TSO到底哪個(gè)好?

    內(nèi)存一致性之順序一致性(sequential consistency)可以說(shuō),最直觀的內(nèi)存一致性模型是sequentially consistent(SC):內(nèi)存訪問(wèn)執(zhí)行的順序與程序指定的順序相同
    發(fā)表于 07-19 14:54

    一致性規(guī)劃研究

    針對(duì)一致性規(guī)劃的高度求解復(fù)雜度,分析主流一致性規(guī)劃器的求解策略,給出影響一致性規(guī)劃器性能的主要因素:?jiǎn)l(fā)信息的有效,信念狀態(tài)表示方法的緊湊
    發(fā)表于 04-06 08:43 ?12次下載

    CMP中Cache一致性協(xié)議的驗(yàn)證

    CMP是處理器體系結(jié)構(gòu)發(fā)展的個(gè)重要方向,其中Cache一致性問(wèn)題的驗(yàn)證是CMP設(shè)計(jì)中的項(xiàng)重要課題?;贛ESI一致性協(xié)議,本文建立了CMP的Cache
    發(fā)表于 07-20 14:18 ?38次下載

    加速器一致性接口

    Zynq PS上的加速器一致性接口(Accelerator Coherency Port, ACP)是個(gè)兼容AXI3的64位從機(jī)接口,連接到SCU(Snoop Control Unit),為PL
    發(fā)表于 11-17 15:04 ?3747次閱讀

    分布式一致性算法Yac

    )。算法動(dòng)態(tài)生成參與一致性表決的成員子集及Leader節(jié)點(diǎn)并時(shí)分遷移,形成統(tǒng)計(jì)負(fù)載均衡;去除要求全體多數(shù)派成員參與表決的強(qiáng)約束,使算法具備更高的失效容忍性;并通過(guò)日志鏈機(jī)制重新建立算法安全
    發(fā)表于 11-27 17:49 ?0次下載
    分布式<b class='flag-5'>一致性</b>算法Yac

    DSA系統(tǒng)的全局一致性需求分析

    ,分析了DSA系統(tǒng)的全局一致性需求;最后,重點(diǎn)給出了模型域、服務(wù)域和認(rèn)知域內(nèi)的一致性控制策略與建議。本研究可為DSA系統(tǒng)設(shè)計(jì)與開(kāi)發(fā)人員提供技術(shù)與方法指導(dǎo)。
    發(fā)表于 12-06 15:28 ?0次下載
    DSA系統(tǒng)的全局<b class='flag-5'>一致性</b>需求分析

    Cache一致性協(xié)議優(yōu)化研究

    現(xiàn)代晶體管技術(shù)在單芯片上集成多個(gè)處理器已經(jīng)成為現(xiàn)實(shí).近年來(lái),隨著多核處理器集成核數(shù)的不斷增加,高速緩存的一致性問(wèn)題凸顯出來(lái),已成為多核處理器的性能瓶頸之一,亟待解決.介紹了片上多核處理器一致性
    發(fā)表于 12-30 15:04 ?0次下載
    Cache<b class='flag-5'>一致性</b>協(xié)議優(yōu)化研究

    一致性哈希是什么?為什么它是可擴(kuò)展的分布式系統(tǒng)架構(gòu)的個(gè)必要工具

    在本文中,我們將了解一致性哈希是什么、為什么它是可擴(kuò)展的分布式系統(tǒng)架構(gòu)中的個(gè)必要工具。
    的頭像 發(fā)表于 07-17 17:57 ?4424次閱讀

    哈希圖一致性算法已被驗(yàn)證為異步拜占庭容錯(cuò)

    HederaHashgraph在下代公共分類帳中擁有多樣化的治理。它最近宣布哈希圖一致性算法已被驗(yàn)證為異步拜占庭容錯(cuò)。這是通過(guò)使用Coq系統(tǒng)的計(jì)算機(jī)檢查的數(shù)學(xué)證明完成的。
    發(fā)表于 10-23 11:07 ?1876次閱讀

    如何保證緩存一致性

    “ 本文的參考文章是2022年HOT 34上Intel Rob Blakenship關(guān)于CXL緩存一致性篇介紹。”
    的頭像 發(fā)表于 10-19 17:42 ?1217次閱讀
    如何保證緩存<b class='flag-5'>一致性</b>

    DDR一致性測(cè)試的操作步驟

    DDR一致性測(cè)試的操作步驟? DDR(雙數(shù)據(jù)率)一致性測(cè)試是對(duì)DDR內(nèi)存模塊進(jìn)行測(cè)試以確保其性能和可靠。在進(jìn)行DDR一致性測(cè)試時(shí),需要遵循
    的頭像 發(fā)表于 02-01 16:24 ?1704次閱讀

    深入理解數(shù)據(jù)備份的關(guān)鍵原則:應(yīng)用一致性與崩潰一致性的區(qū)別

    深入理解數(shù)據(jù)備份的關(guān)鍵原則:應(yīng)用一致性與崩潰一致性的區(qū)別 在數(shù)字化時(shí)代,數(shù)據(jù)備份成為了企業(yè)信息安全的核心環(huán)節(jié)。但在備份過(guò)程中,兩個(gè)關(guān)鍵概念——應(yīng)用一致性和崩潰一致性,常常被誤解或混淆。
    的頭像 發(fā)表于 03-11 11:29 ?1004次閱讀
    深入理解數(shù)據(jù)備份的關(guān)鍵原則:應(yīng)用<b class='flag-5'>一致性</b>與崩潰<b class='flag-5'>一致性</b>的區(qū)別