負載均衡的面對多個相同的服務的時候,我們選擇一定的策略去選擇一個服務進行
負載均衡流程
?Ribbon結構組成
?負載均衡策略
- RoundRobinRule:簡單的輪詢服務列表來選擇服務器
- AvailabilityFilteringRule
對兩種情況服務器進行忽略:
1.在默認情況下,這臺服務器如果3次連接失敗,這臺服務器就會被設置為“短路狀態”,短路狀態將持續30秒,如果再次連接失敗,短路持續時間將會幾何級的增加
2.并發數過高的服務器,如果一個服務器的并發連接數過高,配置了AvailabilityFilteringRule規則的客戶端也會將其忽略。并發連接數的上限,可以由客戶端的
<clientName><clientConfigNameSpace>.ActiveConnectionsLimit屬性進行配置。
- WeightedResponseTimeRule:為每一個服務器賦予一個權重值,服務器響應時間越長,這個服務器的權重就越小,權重值越大,被訪問的概率也就越大
- ZoneAvoidanceRule(默認的策略):以區域可用的服務器為基礎進行服務器的選擇,使用Zone對服務器進行分類,這個Zone可以理解為一個機房、一個機架等,而后對Zone內的多個服務做輪詢
- BestAvailableRule:忽略那些短路的服務器,并選擇并發數較低的服務器
- RandomRule:隨機選擇一個可用的服務器
- RetryRule:重試機制的選擇邏輯
修改負載均衡規則
1.代碼方式:在A服務的啟動類中定義一個新的IRule
@Beanpublic IRule randomRule() {return new RandomRule();}
2.配置文件方式:在A服務中的application.yml文件中,添加新的配置也可以進行修改
userservice:ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 負載均衡規則
饑餓加載:
? ? ? ?Ribbon默認是采用的是懶加載,即第一次訪問時才會創建LoadBalanceClient,請求時間較長,而饑餓加載則會在項目啟動時創建,降低第一次訪問的耗時,我們可以通過下面配置開啟饑餓加載
ribbon:eager-load:enabled: true # 開啟饑餓加載clients: # 指定饑餓加載的服務名稱-***,-***
總結:
1.Ribbon負載均衡規則
- 規則接口是IRule
- 默認實現的是ZoneAvoidanceRule,根據zone選擇服務列表,然后輪詢
2.負載均衡自定義方式
- 代碼方式:配置靈活,但是修改時需要重新打包發布
- 配置方式:直觀、方便,無需重新打包發布,但是無法做到全局配置
3.饑餓加載
- 開啟饑餓加載
- 指定饑餓加載的微服務名稱