欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的權(quán)重算法(如Dubbo的負(fù)載均衡權(quán)重)詳解

 更新時(shí)間:2023年08月15日 09:00:56   作者:SSS_HuLiang  
這篇文章主要介紹了Java中的權(quán)重算法(如Dubbo的負(fù)載均衡權(quán)重)詳解,負(fù)載均衡,其含義就是指將負(fù)載進(jìn)行平衡、分?jǐn)偟蕉鄠€(gè)操作單元上進(jìn)行運(yùn)行,例如FTP服務(wù)器、Web服務(wù)器、企業(yè)核心應(yīng)用服務(wù)器和其它主要任務(wù)服務(wù)器等,從而協(xié)同完成工作任務(wù),需要的朋友可以參考下

負(fù)載均衡

首先了解一下負(fù)載均衡。

百度百科:

負(fù)載均衡,英文名稱為L(zhǎng)oad Balance,其含義就是指將負(fù)載(工作任務(wù))進(jìn)行平衡、分?jǐn)偟蕉鄠€(gè)操作單元上進(jìn)行運(yùn)行,例如FTP服務(wù)器、Web服務(wù)器、企業(yè)核心應(yīng)用服務(wù)器和其它主要任務(wù)服務(wù)器等,從而協(xié)同完成工作任務(wù)。

個(gè)人理解,負(fù)載均衡,顧名思義,就是讓硬件或服務(wù),所受的負(fù)載,盡量均衡一點(diǎn)。

物盡其用,如250G固態(tài)硬盤和1T機(jī)械硬盤。

作為系統(tǒng)盤,則選擇用250G的固態(tài),讀取和寫入的速度塊。

有很多學(xué)習(xí)資源要存,容量較大,那么就會(huì)1T的機(jī)械硬盤。

擇優(yōu)選擇,打疫苗時(shí),A,B,C三個(gè)醫(yī)院,A醫(yī)院爆滿,C醫(yī)院人數(shù)較少,那么就去C醫(yī)院。

Dubbo四種負(fù)載均衡

  1. 隨機(jī)權(quán)重(Random LoadBalance)
    • dubbo默認(rèn) A:權(quán)重40  占比2/5 B:權(quán)重20  占比1/5 C:權(quán)重40  占比2/5 則每次請(qǐng)求,都是隨機(jī)訪問(wèn)的,可能A,可能B,可能C。數(shù)據(jù)量大的情況下,就會(huì)形成權(quán)重的比例。
  2. 輪詢(RoundRobin LoadBalance)
    • 輪循,按公約后的權(quán)重設(shè)置輪循比率。(可以根據(jù)權(quán)重輪詢,如2/5,1/5,2/5。5個(gè)請(qǐng)求,則 A-B-C-A-C)無(wú)權(quán)重則A-B-C-A-B-C.... 存在慢的提供者累積請(qǐng)求的問(wèn)題,比如:第二臺(tái)機(jī)器很慢,但沒(méi)掛,當(dāng)請(qǐng)求調(diào)到第二臺(tái)時(shí)就卡在那,久而久之,所有請(qǐng)求都卡在調(diào)到第二臺(tái)上。
  3. 最少活躍調(diào)用數(shù)(LeastActive LoadBalance)
    • 最少活躍調(diào)用數(shù),相同活躍數(shù)的隨機(jī),活躍數(shù)指調(diào)用前后計(jì)數(shù)差。 使慢的提供者收到更少請(qǐng)求,因?yàn)樵铰奶峁┱叩恼{(diào)用前后計(jì)數(shù)差會(huì)越大。 A:200ms B:200ms C:300ms 先看一下上次調(diào)用時(shí)間,請(qǐng)求優(yōu)先調(diào)用A和B,隨機(jī)選擇。統(tǒng)計(jì)上一次的調(diào)用時(shí)間
  4. 一致性hash(ConsistentHash LoadBalance)
    • 一致性 Hash,相同參數(shù)的請(qǐng)求總是發(fā)到同一提供者。 當(dāng)某一臺(tái)提供者掛時(shí),原本發(fā)往該提供者的請(qǐng)求,基于虛擬節(jié)點(diǎn),平攤到其它提供者,不會(huì)引起劇烈變動(dòng)。 算法參見(jiàn)://en.wikipedia.org/wiki/Consistent_hashing 缺省只對(duì)第一個(gè)參數(shù) Hash,如果要修改,請(qǐng)配置 <dubbo:parameter key="hash.arguments" value="0,1" /> 缺省用 160 份虛擬節(jié)點(diǎn),如果要修改,請(qǐng)配置 <dubbo:parameter key="hash.nodes" value="320" />

方法名,和第一個(gè)參數(shù)名,getUser?id=1,調(diào)用服務(wù)A,則下次同方法同參數(shù),會(huì)繼續(xù)調(diào)用服務(wù)A,除非服務(wù)A掛掉,那么就會(huì)根據(jù)虛擬節(jié)點(diǎn),平攤給其他服務(wù)提供者。算法處理。

個(gè)人理解的權(quán)重算法  

 /**
  * <h3>根據(jù)權(quán)重獲取對(duì)應(yīng)服務(wù),傳入服務(wù):權(quán)重map</h3>
  *
  * @param map 服務(wù):權(quán)重map
  * @return java.lang.String
  * @author Hubers 
  * @date 2021/6/15 16:16
  **/
 public static String getServerByWeight(Map<String, Integer> map) {
        if (map.isEmpty()){
            return null;
        }
        Integer total = 0;
        // 計(jì)算所有權(quán)重,如100+200+300=600
        for (Integer value : map.values()) {
            total += value;
        }
        Random random = new Random();
        // 在權(quán)重范圍內(nèi)隨機(jī),600以內(nèi)隨機(jī)
        int nextInt = random.nextInt(total);
        // 遍歷所有服務(wù)提供者provide的ip地址
        for (String ip : map.keySet()) {
            // 取出權(quán)重值
            Integer weight = map.get(ip);
            // 權(quán)重在范圍內(nèi),則返回對(duì)應(yīng)ip
            if (nextInt < weight) {
                return ip;
            }
            // 否則減去權(quán)重,繼續(xù)下一次循環(huán),匹配對(duì)應(yīng)的ip
            nextInt -= weight;
        }
        return null;
    }
public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("192.168.1.1", 10);
        map.put("192.168.1.2", 10);
        map.put("192.168.1.3", 10);
        map.put("192.168.1.4", 10);
        for (int i = 0; i < 10; i++) {
            String weight = getServerByWeight(map);
            if (Objects.isNull(weight)) {
                throw new RuntimeException("無(wú)可用服務(wù)");
            }
            System.out.println(weight);
        }
    }

到此這篇關(guān)于Java中的權(quán)重算法(如Dubbo的負(fù)載均衡權(quán)重)詳解的文章就介紹到這了,更多相關(guān)Java權(quán)重算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mybatis-Plus邏輯刪除的用法詳解

    Mybatis-Plus邏輯刪除的用法詳解

    這篇文章主要為大家詳細(xì)介紹了Mybatis-Plus 邏輯刪除的用法,文中有詳細(xì)的代碼示例,對(duì)我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-07-07
  • Java中joda日期格式化工具的使用示例

    Java中joda日期格式化工具的使用示例

    這篇文章主要介紹了Java中joda日期格式化工具的使用示例,幫助大家更好的利用Java處理時(shí)間,感興趣的朋友可以了解下
    2021-01-01
  • 使用IntelliJ IDEA2020.2.2 x64 新建java項(xiàng)目并且輸出Hello World

    使用IntelliJ IDEA2020.2.2 x64 新建java項(xiàng)目并且輸出Hello World

    這篇文章主要介紹了使用IntelliJ IDEA2020.2.2 x64 新建java項(xiàng)目并且輸出Hello World,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Java中數(shù)組array和列表list相互轉(zhuǎn)換

    Java中數(shù)組array和列表list相互轉(zhuǎn)換

    這篇文章主要介紹了Java中數(shù)組array和列表list相互轉(zhuǎn)換,在Java中,可以將數(shù)組(array)和列表(list)相互轉(zhuǎn)換,但需要注意一些細(xì)節(jié)和限制,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • java網(wǎng)絡(luò)編程基礎(chǔ)知識(shí)介紹

    java網(wǎng)絡(luò)編程基礎(chǔ)知識(shí)介紹

    這篇文章主要介紹了java網(wǎng)絡(luò)編程基礎(chǔ)知識(shí)介紹,涉及OSI分層模型和TCP/IP分層模型的對(duì)應(yīng)關(guān)系、IP地址、端口號(hào)、tcp、udp等相關(guān)內(nèi)容,還是比較不錯(cuò)的,這里分享給大家,供需要的朋友參考。
    2017-11-11
  • SWT(JFace) 圖片瀏覽器 實(shí)現(xiàn)代碼

    SWT(JFace) 圖片瀏覽器 實(shí)現(xiàn)代碼

    SWT(JFace)小制作:圖片瀏覽器
    2009-06-06
  • Java中的序列化機(jī)制詳細(xì)解讀

    Java中的序列化機(jī)制詳細(xì)解讀

    這篇文章主要介紹了Java中的序列化機(jī)制詳細(xì)解讀,序列化:將對(duì)象的狀態(tài)信息轉(zhuǎn)換為可以存儲(chǔ)或傳輸?shù)臄?shù)據(jù)形式(比如二進(jìn)制)的過(guò)程,反序列化:與序列化相對(duì),把序列化轉(zhuǎn)換成的可以存儲(chǔ)或傳輸?shù)臄?shù)據(jù)形式轉(zhuǎn)化為對(duì)象的狀態(tài)信息的過(guò)程,需要的朋友可以參考下
    2023-11-11
  • MyBatis的SUM映射問(wèn)題及解決

    MyBatis的SUM映射問(wèn)題及解決

    這篇文章主要介紹了MyBatis的SUM映射問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 優(yōu)化Java虛擬機(jī)總結(jié)(jvm調(diào)優(yōu))

    優(yōu)化Java虛擬機(jī)總結(jié)(jvm調(diào)優(yōu))

    這篇文章主要介紹了優(yōu)化Java虛擬機(jī)總結(jié)(jvm調(diào)優(yōu)),具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • SpringBoot+MDC實(shí)現(xiàn)鏈路調(diào)用日志的方法

    SpringBoot+MDC實(shí)現(xiàn)鏈路調(diào)用日志的方法

    MDC是 log4j 、logback及l(fā)og4j2 提供的一種方便在多線程條件下記錄日志的功能,這篇文章主要介紹了SpringBoot+MDC實(shí)現(xiàn)鏈路調(diào)用日志,需要的朋友可以參考下
    2022-12-12

最新評(píng)論