【springcloudalibaba】聊一聊Ribbon那些叫人無法釋懷的規則(zcw-demo)【二十】

前言

本篇博客主要是想描述Ribbon負載的規則、負載規則的替換、還有默認負載輪訓算法原理,通過這些知識點的總結與分享,不單單是爲了針對自己所學知識的總結,最主要的是幫助需要幫助的人,本人知識水平有限,但是上進的拼力無限。


默認自帶的負載規則

IRule:根據特定算法中從服務列表中選取一個要訪問的服務
在這裏插入圖片描述
Ribbon自帶的規則:

  • RoundRobinRule --輪詢
  • RandomRule --隨機
  • RetyRule --先按照RoundRobinRule的策略獲取服務,如果獲取到服務失敗則在指定時間內會進行重試,獲取可用的服務
  • WeightedResponseTimeRule --對RoundRobinRule的擴展,響應速度越快的實例選擇權重越大,越容易被選擇
  • BestAvailableRule–會先過濾掉由於多次訪問故障而處於斷路器跳閘狀態的服務,然後選擇一個併發量最小的服務
  • AvailabilityFilteringRule–先過濾掉故障實例,再選擇併發較小的實例
  • ZoneAvoidanceRule–默認規則,複合判斷server所在區域的性能和server的可用性選擇服務器

Ribbon負載規則替換

  • 修改module
  • 配置
    在配置時有一個細節需要我們知道,在通過官方文檔明確給的說明,自定義配置類不能放在ComponentScan所掃描的當前包下以及子包下,否則我們自定義的這個配置類就會被所有的Ribbon客戶端所共享,達不到特殊化定製的目的了。
    例如:
    意思我們的配置類不能放在如下圖標紅的啓動類的同包及子包下
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 創建上下包規則類
    在這裏插入圖片描述
package com.zcw.myrule;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @ClassName : MySelfRule
 * @Description :
 * @Author : Zhaocunwei
 * @Date: 2020-05-15 11:37
 */
@Configuration
public class MySelfRule {
    @Bean
    public IRule myRule(){
        //定義爲隨機
        return  new RandomRule();
    }
}


  • 修改啓動類
    在這裏插入圖片描述
@RibbonClient(name="CLOUD-PAYMENT-SERVICE",configuration= MySelfRule.class)

測試

在這裏插入圖片描述
在這裏插入圖片描述

總結:默認輪訓算法原理

負載均衡算法;rest接口第幾次請求數%服務器集羣總數量=實際調用服務器位置下標,每次服務器重啓動後rest接口計數從1開始。

來自大佬的話

List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
如:
List[0] instances =127.0.0.1:8002
List[1] instances=127.0.0.1:8001

8001+8002 組合成爲集羣,它們共計2臺計算器,集羣總數爲2,
按照輪訓算法原理:
當總數請求爲1時: 1%2=1 對應下標位置爲1,獲得服務地址爲127.0.0.1:8001
當總數請求爲2時: 2%2=0 對應下標位置爲0,獲得服務地址爲 127.0.0.1:8002
當總數請求爲3時: 3%2=1 對應下標位置爲1 ,獲得服務地址爲 127.0.0.1:8001
當總請求數爲4時: 4%2=0 對應小標位置爲0,獲得服務地址爲 127.0.0.1:8002
如此類推… …

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章