国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringCloud(三) Ribbon負(fù)載均衡

這篇具有很好參考價(jià)值的文章主要介紹了SpringCloud(三) Ribbon負(fù)載均衡。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

SpringCloud(二) Eureka注冊(cè)中心的使用-CSDN博客

在SpringCloud(二)中學(xué)習(xí)了如何通過Eureka實(shí)現(xiàn)服務(wù)的注冊(cè)和發(fā)送,從而通過RestTemplate實(shí)現(xiàn)不同微服務(wù)之間的調(diào)用,加上@LoadBalance注解之后實(shí)現(xiàn)負(fù)載均衡,那負(fù)載均衡的原理是什么呢?

目錄

一, 負(fù)載均衡

1.1 負(fù)載均衡原理

?1.2 源碼追蹤

1, LoadBalanceInterceptor

2, LoadBalanceClient

3, 負(fù)載均衡策略?

1.3 總結(jié)負(fù)載均衡?

二, 代碼示例

三, 負(fù)載均衡策略

3.1 負(fù)載均衡策略

3.2 自定義負(fù)載均衡策略

四, 負(fù)載均衡


一, 負(fù)載均衡

1.1 負(fù)載均衡原理

SpringCloud底層其實(shí)是利用了一個(gè)名為Ribbon的組件來(lái)實(shí)現(xiàn)負(fù)載均衡功能的.

SpringCloud(三) Ribbon負(fù)載均衡,SpringCloud微服務(wù),spring cloud,ribbon,負(fù)載均衡

此時(shí)就可以將我們發(fā)出的http://userservice/user/1請(qǐng)求變成http://localhost:8081

?1.2 源碼追蹤

為什么我們只輸入了user-service的服務(wù)名稱就可以訪問了呢?

顯然有人幫我們根據(jù)service名稱,獲取到了實(shí)例的ip和端口號(hào),它就是LoadBalanceInterceptor,這個(gè)類會(huì)對(duì)RestTemplate的請(qǐng)求進(jìn)行攔截,然后從Eureka根據(jù)服務(wù)id獲取服務(wù)列表,隨后利用負(fù)載均衡算法得到真是的服務(wù)地址信息,替換服務(wù)id.

1, LoadBalanceInterceptor

SpringCloud(三) Ribbon負(fù)載均衡,SpringCloud微服務(wù),spring cloud,ribbon,負(fù)載均衡

可以看到這里的intercept方法,攔截了用戶大的HttpRequest請(qǐng)求,然后做了以下幾件事:

  • request.getURI():獲取請(qǐng)求uri,本例中就是http://userservice/user/1
  • originalUri.getHost():獲取uri路徑的主機(jī)名,其實(shí)就是服務(wù)id,user-service
  • this.loadBalancer.execute():處理服務(wù)id,和用戶請(qǐng)求

2, LoadBalanceClient

繼續(xù)跟入execute方法:

SpringCloud(三) Ribbon負(fù)載均衡,SpringCloud微服務(wù),spring cloud,ribbon,負(fù)載均衡

  • getLoadBalancer(serviceId):根據(jù)服務(wù)id獲取ILoadBalancer,而ILoadBalancer會(huì)拿著服務(wù)id去eureka中獲取服務(wù)列表并保存起來(lái)
  • getServer(loadBalancer):利用內(nèi)置的負(fù)載均衡算法,從服務(wù)列表中選擇一個(gè)

放行后,再次訪問并跟蹤,發(fā)現(xiàn)獲取的是8081:

SpringCloud(三) Ribbon負(fù)載均衡,SpringCloud微服務(wù),spring cloud,ribbon,負(fù)載均衡

3, 負(fù)載均衡策略?

在剛才的代碼中,可以看到獲取服務(wù)是通過一個(gè)getServer方法來(lái)做負(fù)載均衡:

SpringCloud(三) Ribbon負(fù)載均衡,SpringCloud微服務(wù),spring cloud,ribbon,負(fù)載均衡

繼續(xù)跟入:

SpringCloud(三) Ribbon負(fù)載均衡,SpringCloud微服務(wù),spring cloud,ribbon,負(fù)載均衡?繼續(xù)跟蹤源碼chooseServer方法,發(fā)現(xiàn)這么一段代碼:

SpringCloud(三) Ribbon負(fù)載均衡,SpringCloud微服務(wù),spring cloud,ribbon,負(fù)載均衡

?看看這個(gè)rule是誰(shuí):

SpringCloud(三) Ribbon負(fù)載均衡,SpringCloud微服務(wù),spring cloud,ribbon,負(fù)載均衡

這里的rule默認(rèn)值是一個(gè)RoundRobinRule,看類的介紹(意思是輪詢):

SpringCloud(三) Ribbon負(fù)載均衡,SpringCloud微服務(wù),spring cloud,ribbon,負(fù)載均衡

1.3 總結(jié)負(fù)載均衡?

SpringCloudRibbon的底層采用了一個(gè)攔截器,攔截了RestTemplate發(fā)出的請(qǐng)求,對(duì)地址進(jìn)行了修改,用一幅圖總結(jié)一下:

SpringCloud(三) Ribbon負(fù)載均衡,SpringCloud微服務(wù),spring cloud,ribbon,負(fù)載均衡

基本流程如下:

  • ?攔截我們的RestTemplate請(qǐng)求http://userservice/user/1;
  • RibbonLoadBalancerClient會(huì)從請(qǐng)求url中獲取服務(wù)名稱,也就是userservice;
  • DynamicServerListBalance根據(jù)userservice到eureka拉取服務(wù)列表;
  • eureka返回列表,localhots:8081和localhost:8082;
  • IRule利用內(nèi)置負(fù)載均衡規(guī)則,從列表中選擇一個(gè),例如localhost:8081;
  • RibbonLoadBalanceClient修改請(qǐng)求地址,用localhost:8081代替userservice,得到http://localhost:8081/user/1.

二, 代碼示例

現(xiàn)在我們有兩個(gè)user-service微服務(wù),使用order-service多次調(diào)用user-service查看服務(wù)落在兩個(gè)user-service的頻率

啟動(dòng)服務(wù)并清空兩個(gè)user-service服務(wù)的日志:

SpringCloud(三) Ribbon負(fù)載均衡,SpringCloud微服務(wù),spring cloud,ribbon,負(fù)載均衡

?在瀏覽器多次調(diào)用order-service中的queryOrderByUserId接口:

SpringCloud(三) Ribbon負(fù)載均衡,SpringCloud微服務(wù),spring cloud,ribbon,負(fù)載均衡

分別查看兩個(gè)user-service的日志打印結(jié)果:

user-service1:

SpringCloud(三) Ribbon負(fù)載均衡,SpringCloud微服務(wù),spring cloud,ribbon,負(fù)載均衡

user-service2:

SpringCloud(三) Ribbon負(fù)載均衡,SpringCloud微服務(wù),spring cloud,ribbon,負(fù)載均衡

從日志結(jié)果可以看出,在不改變負(fù)載均衡策略的情況下,默認(rèn)的策略是輪詢的方式.

三, 負(fù)載均衡策略

3.1 負(fù)載均衡策略

負(fù)載均衡的規(guī)則都定義在IRule接口中,而IRule有很多不同的實(shí)現(xiàn)類:

SpringCloud(三) Ribbon負(fù)載均衡,SpringCloud微服務(wù),spring cloud,ribbon,負(fù)載均衡

不同規(guī)則的含義如下:

內(nèi)置負(fù)載均衡規(guī)則類 規(guī)則描述
RoundRobinRule 簡(jiǎn)單輪詢服務(wù)列表來(lái)選擇服務(wù)器。它是Ribbon默認(rèn)的負(fù)載均衡規(guī)則。
AvailabilityFilteringRule 對(duì)以下兩種服務(wù)器進(jìn)行忽略: (1)在默認(rèn)情況下,這臺(tái)服務(wù)器如果3次連接失敗,這臺(tái)服務(wù)器就會(huì)被設(shè)置為“短路”狀態(tài)。短路狀態(tài)將持續(xù)30秒,如果再次連接失敗,短路的持續(xù)時(shí)間就會(huì)幾何級(jí)地增加。 (2)并發(fā)數(shù)過高的服務(wù)器。如果一個(gè)服務(wù)器的并發(fā)連接數(shù)過高,配置了AvailabilityFilteringRule規(guī)則的客戶端也會(huì)將其忽略。并發(fā)連接數(shù)的上限,可以由客戶端的<clientName>.<clientConfigNameSpace>.ActiveConnectionsLimit屬性進(jìn)行配置。
WeightedResponseTimeRule 為每一個(gè)服務(wù)器賦予一個(gè)權(quán)重值。服務(wù)器響應(yīng)時(shí)間越長(zhǎng),這個(gè)服務(wù)器的權(quán)重就越小。這個(gè)規(guī)則會(huì)隨機(jī)選擇服務(wù)器,這個(gè)權(quán)重值會(huì)影響服務(wù)器的選擇。
ZoneAvoidanceRule 以區(qū)域可用的服務(wù)器為基礎(chǔ)進(jìn)行服務(wù)器的選擇。使用Zone對(duì)服務(wù)器進(jìn)行分類,這個(gè)Zone可以理解為一個(gè)機(jī)房、一個(gè)機(jī)架等。而后再對(duì)Zone內(nèi)的多個(gè)服務(wù)做輪詢。
BestAvailableRule 忽略那些短路的服務(wù)器,并選擇并發(fā)數(shù)較低的服務(wù)器。
RandomRule 隨機(jī)選擇一個(gè)可用的服務(wù)器。
RetryRule 重試機(jī)制的選擇邏輯。

默認(rèn)的實(shí)現(xiàn)就是ZoneAvoidanceRule,是一種輪詢方案.

3.2 自定義負(fù)載均衡策略

通過定義IRule實(shí)現(xiàn)可以修改負(fù)載均衡規(guī)則,有兩種方式:

1. 代碼方式:在order-service中的OrderApplication類中,定義一個(gè)新的IRule:

@Bean
public IRule randomRule(){
    return new RandomRule();
}

2. 配置文件方式:在order-service的application.yml文件中,添加新的配置也可以修改規(guī)則:

userservice: # 給某個(gè)微服務(wù)配置負(fù)載均衡規(guī)則,這里是userservice服務(wù)
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 負(fù)載均衡規(guī)則 

一般用默認(rèn)的負(fù)載均衡規(guī)則,不做修改.

四, 負(fù)載均衡

Ribbon默認(rèn)是采用懶加載,即第一次訪問時(shí)才會(huì)去創(chuàng)建LoadBalanceClient,請(qǐng)求時(shí)間會(huì)很長(zhǎng).

而饑餓加載則會(huì)在項(xiàng)目啟動(dòng)時(shí)創(chuàng)建,降低第一次訪問的耗時(shí),通過下面配置開啟饑餓加載:

ribbon:
  eager-load:
    enabled: true
    clients: userservice

未開啟饑餓加載時(shí):

SpringCloud(三) Ribbon負(fù)載均衡,SpringCloud微服務(wù),spring cloud,ribbon,負(fù)載均衡

第一次訪問的時(shí)候耗時(shí)是579ms

開啟饑餓加載時(shí):

先在配置文件里進(jìn)行配置

SpringCloud(三) Ribbon負(fù)載均衡,SpringCloud微服務(wù),spring cloud,ribbon,負(fù)載均衡

?重啟order-service進(jìn)行訪問

SpringCloud(三) Ribbon負(fù)載均衡,SpringCloud微服務(wù),spring cloud,ribbon,負(fù)載均衡

可以看出開啟饑餓加載后第一次訪問的時(shí)間變少了很多,未232ms.

?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-736613.html

到了這里,關(guān)于SpringCloud(三) Ribbon負(fù)載均衡的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Spring Cloud Alibaba全家桶(三)——微服務(wù)負(fù)載均衡器Ribbon與LoadBalancer

    Spring Cloud Alibaba全家桶(三)——微服務(wù)負(fù)載均衡器Ribbon與LoadBalancer

    本文為 微服務(wù)負(fù)載均衡器Ribbon與LoadBalancer 相關(guān)知識(shí),下邊將對(duì) 什么是Ribbon (包括: 客戶端的負(fù)載均衡 、 服務(wù)端的負(fù)載均衡 、 常見負(fù)載均衡算法 ), Nacos使用Ribbon , Ribbon內(nèi)核原理 (包括: Ribbon原理 , Ribbon負(fù)載均衡策略 , 饑餓加載 ), Spring Cloud LoadBalancer (包括:

    2024年02月02日
    瀏覽(31)
  • Spring Cloud Ribbon:負(fù)載均衡

    1. 介紹 Spring Cloud Ribbon 1.1 什么是 Spring Cloud Ribbon Spring Cloud Ribbon是Netflix開源的負(fù)載均衡器,它為分布式服務(wù)提供了客戶端負(fù)載均衡的功能。Ribbon可以根據(jù)一系列的負(fù)載均衡算法和配置策略,將客戶端的請(qǐng)求動(dòng)態(tài)分發(fā)到多個(gè)服務(wù)實(shí)例上,以實(shí)現(xiàn)高可用性和性能優(yōu)化。 1.2 負(fù)載均

    2024年02月19日
    瀏覽(22)
  • 【Spring Cloud 四】Ribbon負(fù)載均衡

    【Spring Cloud 四】Ribbon負(fù)載均衡

    【Spring Cloud一】微服務(wù)基本知識(shí) 【Spring Cloud 三】Eureka服務(wù)注冊(cè)與服務(wù)發(fā)現(xiàn) 目前公司項(xiàng)目使用的注冊(cè)中心主要是Spring Cloud Alibaba的Nacos做的注冊(cè)中心和配置中心。并且Nacos使用了Ribbon作為默認(rèn)的負(fù)載均衡器。但是相當(dāng)于將Ribbon的負(fù)載均衡給透明化了,日常開發(fā)明面上是看不到

    2024年02月14日
    瀏覽(27)
  • Spring Cloud - Ribbon 負(fù)載均衡原理、負(fù)載策略、懶加載

    Spring Cloud - Ribbon 負(fù)載均衡原理、負(fù)載策略、懶加載

    目錄 ?編輯 一、Ribbon 負(fù)載均衡原理 1.1、前言 1.2、負(fù)載均衡的工作流程 二、負(fù)載均衡策略 2.1、策略原理 2.2、負(fù)載均衡自定義方式 三、Ribbon 加載方式 ps:案例是上一章所講的?“根據(jù)訂單id查詢訂單的同時(shí),把訂單所屬的用戶信息一起返回”? 。 上一章我們講到 order-servi

    2024年02月09日
    瀏覽(23)
  • springcloud Ribbon負(fù)載均衡服務(wù)調(diào)用

    springcloud Ribbon負(fù)載均衡服務(wù)調(diào)用

    地址:https://github.com/13thm/study_springcloud/tree/main/days6_Ribbon Spring Cloud Ribbon是基于Netflix Ribbon實(shí)現(xiàn)的一套客戶端 負(fù)載均衡的工具。 簡(jiǎn)單的說(shuō),Ribbon是Netflix發(fā)布的開源項(xiàng)目,主要功能是提供客戶端的軟件負(fù)載均衡算法和服務(wù)調(diào)用。Ribbon客戶端組件提供一系列完善的配置項(xiàng)如連接超時(shí)

    2024年01月20日
    瀏覽(20)
  • Cloud微服務(wù):Ribbon負(fù)載均衡

    Cloud微服務(wù):Ribbon負(fù)載均衡

    個(gè)人簡(jiǎn)介:Java領(lǐng)域新星創(chuàng)作者;阿里云技術(shù)博主、星級(jí)博主、專家博主;正在Java學(xué)習(xí)的路上摸爬滾打,記錄學(xué)習(xí)的過程~ 個(gè)人主頁(yè):.29.的博客 學(xué)習(xí)社區(qū):進(jìn)去逛一逛~ 服務(wù)消費(fèi)者(order-service)根據(jù)服務(wù)名稱發(fā)起請(qǐng)求,請(qǐng)求地址(url):http://userservice/user/1。 請(qǐng)求被 負(fù)載均衡攔

    2024年04月26日
    瀏覽(19)
  • 【微服務(wù) SpringCloud】實(shí)用篇 · Ribbon負(fù)載均衡

    【微服務(wù) SpringCloud】實(shí)用篇 · Ribbon負(fù)載均衡

    微服務(wù)(4) 在前面,我們添加了@LoadBalanced注解,即可實(shí)現(xiàn)負(fù)載均衡功能,這是什么原理、什么策略呢? SpringCloud底層其實(shí)是利用了一個(gè)名為 Ribbon 的組件 ,來(lái)實(shí)現(xiàn)負(fù)載均衡功能的。 那么我們發(fā)出的請(qǐng)求明明是http://userservice/user/1,怎么變成了http://localhost:8081的呢? 為什么我

    2024年02月08日
    瀏覽(29)
  • 【Spring Cloud】Ribbon 中的幾種負(fù)載均衡策略

    【Spring Cloud】Ribbon 中的幾種負(fù)載均衡策略

    負(fù)載均衡通常有兩種實(shí)現(xiàn)手段,一種是服務(wù)端負(fù)載均衡器,另一種是客戶端負(fù)載均衡器,而我們今天的主角 Ribbon 就屬于后者——客戶端負(fù)載均衡器。 服務(wù)端負(fù)載均衡器的問題是,它提供了更強(qiáng)的流量控制權(quán),但無(wú)法滿足不同的消費(fèi)者希望使用不同負(fù)載均衡策略的需求,而使

    2024年02月15日
    瀏覽(27)
  • 【Spring Cloud】Ribbon 實(shí)現(xiàn)負(fù)載均衡的原理,策略以及饑餓加載

    【Spring Cloud】Ribbon 實(shí)現(xiàn)負(fù)載均衡的原理,策略以及饑餓加載

    在前文《深入理解 Eureka 注冊(cè)中心的原理、服務(wù)的注冊(cè)與發(fā)現(xiàn)》中,介紹了如何使用 Eureka 實(shí)現(xiàn)服務(wù)的注冊(cè)與拉取,并且通過添加 @LoadBalanced 注解實(shí)現(xiàn)了負(fù)載均衡。這種自動(dòng)化的背后隱藏著許多疑問: 服務(wù)是在何時(shí)進(jìn)行拉取的? 負(fù)載均衡是如何實(shí)現(xiàn)的? 負(fù)載均衡的原理和策略

    2024年02月07日
    瀏覽(20)
  • Spring Cloud 實(shí)戰(zhàn) | 解密負(fù)載均衡Ribbon底層原理,包含實(shí)戰(zhàn)源碼

    Spring Cloud 實(shí)戰(zhàn) | 解密負(fù)載均衡Ribbon底層原理,包含實(shí)戰(zhàn)源碼

    專欄集錦,大佬們可以收藏以備不時(shí)之需 Spring Cloud實(shí)戰(zhàn)專欄:https://blog.csdn.net/superdangbo/category_9270827.html Python 實(shí)戰(zhàn)專欄:https://blog.csdn.net/superdangbo/category_9271194.html Logback 詳解專欄:https://blog.csdn.net/superdangbo/category_9271502.html tensorflow專欄:https://blog.csdn.net/superdangbo/category_869

    2024年02月08日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包