一帝火、什么是Ribbon
Ribbon是Netflix發(fā)布的開源項目,主要功能是提供客戶端的軟件負載均衡算法,將Netflix的中間層服務連接在一起柬甥。Ribbon客戶端組件提供一系列完善的配置項如連接超時黄绩,重試等羡洁。簡單的說,就是在配置文件中列出Load Balancer(簡稱LB)后面所有的機器爽丹,Ribbon會自動的幫助你基于某種規(guī)則(如簡單輪詢筑煮,隨即連接等)去連接這些機器。我們也很容易使用Ribbon實現(xiàn)自定義的負載均衡算法粤蝎。
二真仲、負載均衡策略
Ribbon的負載均衡規(guī)則是一個叫做IRuIe的接口來定義的,每一個子接口都是一種規(guī)則:
RandomRule:隨機策略
RoundRobinRule:輪詢
ZoneAvoidanceRule:默認策略
三初澎、如何修改負載均衡的策略——IRule
上面看到了所有的負載均衡策略都是通過IRule接口實現(xiàn)的所以秸应,第一種方式可以在啟動類中重新定義一個IRule注入到Bean中--然后在新的類中的指定我們的新策略(這種方式是全局的一旦配置,全局將使用這種方式)
//例如:默認的負載均衡策略為輪詢? 我們想要改為隨機
//在啟動類中重新注入一個新規(guī)則
```
@Bean
public IRule randomRule(){
????????return new RandomRule();
}
```
第二種方式:通過配置文件去配置負載均衡的規(guī)則(可以指定某個服務)
```
#指定某一個服務進行某一種策略? ? #NFLoadBalancerRuleClassName? 類名
#服務名
service1:
????ribbon:
????????NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #隨機策略
```
四碑宴、Ribbon 饑餓加載
懶漢餓漢
當我們使用Ribbon進行負載均衡的時候? 發(fā)現(xiàn)? 第一次的請求往往很費時間? 是第二次或者后面請求時間的十幾二十倍? ? 這是為什么呢软啼?
這是因為 Ribbon默認采用懶加載方式:即第一次訪問的時候才去創(chuàng)建LoadBalanceClient,請求時間很長延柠,之后的請求時間就很短
饑餓加載:饑餓加載會在項目啟動時創(chuàng)建祸挪,降低第一次訪問的耗時? ? 配置饑餓加載——在配置文件中配置
```
ribbon:
????eager-load:
????????enable: true #開啟饑餓加載
????????clients: service #指定對某一個服務使用饑餓加載? #service? 服務名稱
========================================================================
ribbon:
????eager-load:
????????enable: true #開啟饑餓加載
????????clients:
? ? ? ? ? ? ? ? - service1 #指定對某些服務使用饑餓加載? #service? 服務名稱
? ? ? ? ? ? ? ? - service2
? ? ? ? ? ? ? ? - service3
```