Ribbon的負載均衡策略及使用方法


Ribbon的負載均衡策略有:

策略類   命名 描述
RandomRule 隨機策略 隨機選擇server
RoundRobinRule 輪詢策略 輪詢選擇, 輪詢index,選擇index對應位置的Server;
RetryRule 重試策略 對選定的負載均衡策略機上重試機制,在一個配置時間段內當選擇Server不成功,則一直嘗試使用subRule的方式選擇一個可用的server;
BestAvailableRule 最低並發策略 逐個考察server,如果server斷路器打開,則忽略,再選擇其中並發鏈接最低的server
AvailabilityFilteringRule 可用過濾策略 過濾掉一直失敗並被標記為circuit tripped的server,過濾掉那些高並發鏈接的server(active connections超過配置的閾值)或者使用一個AvailabilityPredicate來包含過濾server的邏輯,其實就就是檢查status里記錄的各個Server的運行狀態;
ResponseTimeWeightedRule 響應時間加權重策略 根據server的響應時間分配權重,響應時間越長,權重越低,被選擇到的概率也就越低。響應時間越短,權重越高,被選中的概率越高,這個策略很貼切,綜合了各種因素,比如:網絡,磁盤,io等,都直接影響響應時間
ZoneAvoidanceRule 區域權重策略 綜合判斷server所在區域的性能,和server的可用性,輪詢選擇server並且判斷一個AWS Zone的運行性能是否可用,剔除不可用的Zone中的所有server

可以使用代碼配置屬性配置的方式為某一個微服務提供輪詢策略,比如A服務使用隨即策略,B服務使用輪詢策略。。

代碼配置:

代碼示例

  • 創建一個空類,並在其上添加@Configuration 注解和@RibbonClient 注解。

/**
 * 使用RibbonClient,為特定的目標服務 user 自定義配置。
 * 使用@RibbonClient的configuration屬性,指定Ribbon的配置類。
 */
@Configuration
@RibbonClient(name = "user", configuration = RibbonConfiguration.class)
public class TestConfiguration {
}

 

由代碼可知,使用@RibbonClient 注解的configuration屬性,即可自定義指定名稱Ribbon客戶端的配置。

  • 創建Ribbon的配置類。
/**
 * 該類為Ribbon的配置類
 * 注意:該類不能放在主應用程序上下文@ComponentScan所掃描的包中,否則配置將會被所有Ribbon Client共享。*/
@Configuration
public class RibbonConfiguration {
  @Bean
  public IRule ribbonRule() {
    // 負載均衡規則,改為隨機
    return new RandomRule();
  }
}

注意:該類不能放在主應用程序上下文@ComponentScan所掃描的包中,否則配置將會被所有Ribbon Client共享。

如果放到掃描包里面,那也可以自定義注解,標記不自動掃描類:

public @interface IgnoreScan {
}

然后配置策略,使用不自動掃描注解:

@Configuration
@IgnoreScan //這是自定義的注解
public class CustomLoadBalanceConfig {
    @Bean
    public IRule ribbonRule(){
        return new RandomRule();
    }
}

最后在啟動類,定義組件掃碼 和 設置服務的負載均衡策略:

@RibbonClient(name = "user", configuration = CustomLoadBalanceConfig.class)//這里指定了使用上面的configuration,name是服務id
@ComponentScan(excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,value =IgnoreScan.class)})

 

屬性配置

代碼示例:

user:#這個是微服務的id
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #隨機策略

屬性配置的優先級高於代碼配置。

 

除了上面的針對某一個微服務的細粒度的配置,還可以全局配置,Ribbon只支持使用代碼實現全局配置。

全局配置:

//首先定義一個空類,使用@RibbonClients
@RibbonClients(defaultConfiguration = DefaultRibbonConfig.class) public class RibbonClientDefaultConfigurationTestsConfig { }

//然后定義一個config類,指定使用的負載均衡策略 @Configuration public
class DefaultRibbonConfig { @Bean public IRule ribbonRule() { return new RandomRule(); } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM