柚子快報(bào)激活碼778899分享:微服務(wù)-Ribbon負(fù)載均衡
柚子快報(bào)激活碼778899分享:微服務(wù)-Ribbon負(fù)載均衡
文章目錄
負(fù)載均衡原理流程原理源碼分析負(fù)載均衡流程
負(fù)載均衡策略饑餓加載總結(jié)
負(fù)載均衡原理
流程
原理
@LoadBalanced 標(biāo)記RestTemplate發(fā)起的http請(qǐng)求要被Ribbon進(jìn)行攔截和處理
源碼分析
ctrl+shift+N搜索LoadBalancerInterceptor,進(jìn)入。發(fā)現(xiàn)實(shí)現(xiàn)了ClientHttpRequestInterceptor(客戶端Http請(qǐng)求攔截器)的intercept方法 攔截方法 打一個(gè)斷點(diǎn),啟動(dòng)order-application,瀏覽器發(fā)送請(qǐng)求http://localhost:8080/order/104在該方法中對(duì)http請(qǐng)求進(jìn)行攔截,獲取到了服務(wù)名serviceName = “userservice”,然后進(jìn)入到了RibbonLoadBalancerClient的excute方法中。 進(jìn)入到excute方法,發(fā)現(xiàn)調(diào)用了該類的一個(gè)重載方法excute step into到這個(gè)excute方法 發(fā)現(xiàn)serviceId = “userservice”,通過(guò)serviceId獲取到ILoadBalancer,點(diǎn)開(kāi)ILoadBalancer,發(fā)現(xiàn)里面存儲(chǔ)了兩個(gè)userservice,即成功拉取了2個(gè)userservice。獲取的loadBalancer對(duì)象的名稱為DynamicServerListLoadBalancer,動(dòng)態(tài)服務(wù)列表負(fù)載均衡器。 進(jìn)入到getServer方法,下一步從loadBalancer的2個(gè)userservice中選擇1個(gè) 再進(jìn)入到chooseServer方法里,最終調(diào)用了父類的chooseServer方法 進(jìn)入,最終調(diào)用了rule.choose方法 查看這個(gè)rule,發(fā)現(xiàn)是一個(gè)IRule類型,這是一個(gè)接口,ctrl+h查看實(shí)現(xiàn)該接口的類有哪些 發(fā)現(xiàn)有好幾種規(guī)則,RoundRobin,Random等,正是通過(guò)這幾種規(guī)則從多個(gè)userservice中選擇出一個(gè)合適的userservice。
負(fù)載均衡流程
負(fù)載均衡策略
通過(guò)定義IRule的實(shí)現(xiàn)可以修改負(fù)載均衡的策略
方式一,直接在配置類中定義。針對(duì)所有微服務(wù)而言。
@Bean
public IRule randomRule(){
return new RandomRule();
}
方式二,在application.yml中定義。針對(duì)某個(gè)微服務(wù)。
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 負(fù)載均衡規(guī)則
饑餓加載
Ribbon默認(rèn)采用的是懶加載,即第一次訪問(wèn)Ribbon服務(wù)的時(shí)候才會(huì)加載LoadBalanceClient,請(qǐng)求時(shí)間會(huì)很長(zhǎng); 而饑餓加載在項(xiàng)目啟動(dòng)時(shí)加載
ribbon:
eager-load:
enabled: true # 開(kāi)啟饑餓加載
clients: userservice # 指定對(duì)userservice這個(gè)服務(wù)饑餓加載
懶加載,第一次訪問(wèn)是409ms,后續(xù)10ms 饑餓加載,第一次訪問(wèn)是236ms,后續(xù)10ms
總結(jié)
柚子快報(bào)激活碼778899分享:微服務(wù)-Ribbon負(fù)載均衡
好文鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。