最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中的權重算法(如Dubbo的負載均衡權重)詳解

 更新時間:2023年08月15日 09:00:56   作者:SSS_HuLiang  
這篇文章主要介紹了Java中的權重算法(如Dubbo的負載均衡權重)詳解,負載均衡,其含義就是指將負載進行平衡、分攤到多個操作單元上進行運行,例如FTP服務器、Web服務器、企業(yè)核心應用服務器和其它主要任務服務器等,從而協同完成工作任務,需要的朋友可以參考下

負載均衡

首先了解一下負載均衡。

百度百科:

負載均衡,英文名稱為Load Balance,其含義就是指將負載(工作任務)進行平衡、分攤到多個操作單元上進行運行,例如FTP服務器、Web服務器、企業(yè)核心應用服務器和其它主要任務服務器等,從而協同完成工作任務。

個人理解,負載均衡,顧名思義,就是讓硬件或服務,所受的負載,盡量均衡一點。

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

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

有很多學習資源要存,容量較大,那么就會1T的機械硬盤。

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

Dubbo四種負載均衡

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

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

個人理解的權重算法  

 /**
  * <h3>根據權重獲取對應服務,傳入服務:權重map</h3>
  *
  * @param map 服務:權重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;
        // 計算所有權重,如100+200+300=600
        for (Integer value : map.values()) {
            total += value;
        }
        Random random = new Random();
        // 在權重范圍內隨機,600以內隨機
        int nextInt = random.nextInt(total);
        // 遍歷所有服務提供者provide的ip地址
        for (String ip : map.keySet()) {
            // 取出權重值
            Integer weight = map.get(ip);
            // 權重在范圍內,則返回對應ip
            if (nextInt < weight) {
                return ip;
            }
            // 否則減去權重,繼續(xù)下一次循環(huán),匹配對應的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("無可用服務");
            }
            System.out.println(weight);
        }
    }

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

相關文章

  • spring4.3 實現跨域CORS的方法

    spring4.3 實現跨域CORS的方法

    下面小編就為大家分享一篇spring4.3 實現跨域CORS的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • SpringBoot異常處理器的使用與添加員工功能實現流程介紹

    SpringBoot異常處理器的使用與添加員工功能實現流程介紹

    設計完了登錄與退出功能還只完成了冰山一角,經過測試發(fā)現,我們以url的方式來訪問網站時可以直接跳過登陸頁面進入后臺頁面,這樣顯然是不合理的,下面我們通過異常攔截器+boot來做到訪問限制,以及實現新增員工功能,制作全局異常處理器
    2022-10-10
  • springboot項目事務標簽驗證

    springboot項目事務標簽驗證

    本文主要介紹了springboot項目事務標簽驗證,文中通過示例代碼介紹的非常詳細,詳細的介紹了不加事務標簽和加事物標簽的使用,需要的朋友們下面隨著小編來一起學習學習吧
    2021-07-07
  • 在Java中實現CQRS架構的全過程

    在Java中實現CQRS架構的全過程

    CQRS是Command?Query?Responsibility?Segregation的縮寫,一般稱作命令查詢職責分離,本文給大家介紹在Java中實現CQRS架構的全過程,感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • 在Java中如何決定使用 HashMap 還是 TreeMap

    在Java中如何決定使用 HashMap 還是 TreeMap

    這篇文章主要介紹了在Java中如何決定使用 HashMap 還是 TreeMap,很多朋友對這樣的問題很迷茫,下面小編給大家?guī)硪黄恼聨椭蠹伊私猓枰呐笥芽梢詤⒖枷?/div> 2019-10-10
  • Springboot jar文件如何打包zip在linux環(huán)境運行

    Springboot jar文件如何打包zip在linux環(huán)境運行

    這篇文章主要介紹了Springboot jar文件如何打包zip在linux環(huán)境運行,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Spring數據訪問模板化方法

    Spring數據訪問模板化方法

    今天小編就為大家分享一篇關于Spring數據訪問模板化,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 關于QueryWrapper高級使用示例

    關于QueryWrapper高級使用示例

    本文介紹了QueryWrapper的高級使用方法,包括查詢指定字段、使用MySQL函數處理字段、設置查詢限制等,通過select()可查詢指定字段并處理,last()方法實現limit效果,apply()可在查詢條件中使用函數,這些技巧有助于提升數據庫操作的靈活性和效率
    2024-09-09
  • SpringBoot?+?Disruptor實現特快高并發(fā)處理及使用Disruptor高速實現隊列的過程

    SpringBoot?+?Disruptor實現特快高并發(fā)處理及使用Disruptor高速實現隊列的過程

    Disruptor是一個開源的Java框架,它被設計用于在生產者—消費者(producer-consumer problem,簡稱PCP)問題上獲得盡量高的吞吐量(TPS)和盡量低的延遲,這篇文章主要介紹了SpringBoot?+?Disruptor?實現特快高并發(fā)處理,使用Disruptor高速實現隊列,需要的朋友可以參考下
    2023-11-11
  • Map按單個或多個Value排序當Value相同時按Key排序

    Map按單個或多個Value排序當Value相同時按Key排序

    Map可以先按照value進行排序,然后按照key進行排序。 或者先按照key進行排序,然后按照value進行排序,這樣操作都行,這篇文章主要介紹了Map按單個或多個Value排序,當Value相同時按Key排序,需要的朋友可以參考下
    2023-02-02

最新評論

沭阳县| 洞口县| 中宁县| 蛟河市| 漳州市| 河津市| 西乌| 汶川县| 蛟河市| 南川市| 行唐县| 宁安市| 濮阳县| 连平县| 白山市| 神农架林区| 曲麻莱县| 靖边县| 马公市| 娄底市| 鹰潭市| 岑巩县| 潞城市| 玉龙| 图片| 枣阳市| 突泉县| 云林县| 罗平县| 大同县| 教育| 佛坪县| 高安市| 黄陵县| 宁乡县| 绵阳市| 福安市| 公安县| 广平县| 高密市| 洪泽县|