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

【微服務(wù)】Ribbon負(fù)載均衡

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


在上文的案例中我們添加了@LoadBalanced注解,即可實(shí)現(xiàn)負(fù)載均衡功能,這是什么原理呢?

修改ribbon負(fù)載均衡的規(guī)則,# SpringCloud,微服務(wù),ribbon,負(fù)載均衡,云原生
我們這里的@LoadBalanced相當(dāng)于是一個(gè)標(biāo)記,標(biāo)記這個(gè)RestTemplate發(fā)出的請(qǐng)求要被我們的Ribbon攔截和處理。

負(fù)載均衡原理

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

修改ribbon負(fù)載均衡的規(guī)則,# SpringCloud,微服務(wù),ribbon,負(fù)載均衡,云原生

那么我們發(fā)出的請(qǐng)求明明是http://userservice/user/1,怎么變成了http://localhost:8081的呢?

源碼跟蹤

為什么我們只輸入了service名稱就可以訪問了呢?之前還要獲取ip和端口。

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

我們進(jìn)行源碼跟蹤:

LoadBalancerIntercepor

修改ribbon負(fù)載均衡的規(guī)則,# SpringCloud,微服務(wù),ribbon,負(fù)載均衡,云原生

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

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

這里的this.loadBalancerLoadBalancerClient類型,我們繼續(xù)跟入。

LoadBalancerClient

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

修改ribbon負(fù)載均衡的規(guī)則,# SpringCloud,微服務(wù),ribbon,負(fù)載均衡,云原生

代碼是這樣的:

  • getLoadBalancer(serviceId):根據(jù)服務(wù)id獲取ILoadBalancer,而ILoadBalancer會(huì)拿著服務(wù)id去eureka中獲取服務(wù)列表并保存起來。
    • 我們?cè)趌oadBalencer中可以看到拉取的服務(wù)列表;
      修改ribbon負(fù)載均衡的規(guī)則,# SpringCloud,微服務(wù),ribbon,負(fù)載均衡,云原生
  • getServer(loadBalancer):利用內(nèi)置的負(fù)載均衡算法,從服務(wù)列表中選擇一個(gè)。本例中,可以看到獲取了8082端口的服務(wù)

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

修改ribbon負(fù)載均衡的規(guī)則,# SpringCloud,微服務(wù),ribbon,負(fù)載均衡,云原生

果然實(shí)現(xiàn)了負(fù)載均衡。

負(fù)載均衡策略IRule

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

修改ribbon負(fù)載均衡的規(guī)則,# SpringCloud,微服務(wù),ribbon,負(fù)載均衡,云原生

我們繼續(xù)跟入:

修改ribbon負(fù)載均衡的規(guī)則,# SpringCloud,微服務(wù),ribbon,負(fù)載均衡,云原生

繼續(xù)跟蹤源碼chooseServer方法,發(fā)現(xiàn)這么一段代碼:

修改ribbon負(fù)載均衡的規(guī)則,# SpringCloud,微服務(wù),ribbon,負(fù)載均衡,云原生

我們看看這個(gè)rule是誰:

修改ribbon負(fù)載均衡的規(guī)則,# SpringCloud,微服務(wù),ribbon,負(fù)載均衡,云原生

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

修改ribbon負(fù)載均衡的規(guī)則,# SpringCloud,微服務(wù),ribbon,負(fù)載均衡,云原生

這不就是輪詢的意思嘛。

到這里,整個(gè)負(fù)載均衡的流程我們就清楚了。

總結(jié)

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

修改ribbon負(fù)載均衡的規(guī)則,# SpringCloud,微服務(wù),ribbon,負(fù)載均衡,云原生

基本流程如下:

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

負(fù)載均衡策略

策略

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

修改ribbon負(fù)載均衡的規(guī)則,# SpringCloud,微服務(wù),ribbon,負(fù)載均衡,云原生

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

內(nèi)置負(fù)載均衡規(guī)則類 規(guī)則描述
RoundRobinRule 簡單輪詢服務(wù)列表來選擇服務(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ù)的上限,可以由客戶端的..ActiveConnectionsLimit屬性進(jìn)行配置。
WeightedResponseTimeRule 為每一個(gè)服務(wù)器賦予一個(gè)權(quán)重值。服務(wù)器響應(yīng)時(shí)間越長,這個(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,是一種輪詢方案

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

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

  1. 代碼方式:在order-service中的OrderApplication類中,定義一個(gè)新的IRule:
@Bean
public IRule randomRule(){
    return new RandomRule();
}
  1. 配置文件方式:在order-service的application.yml文件中,添加新的配置也可以修改規(guī)則:
userservice: # 給某個(gè)微服務(wù)配置負(fù)載均衡規(guī)則,這里是userservice服務(wù)
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 負(fù)載均衡規(guī)則 

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

饑餓加載

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

而饑餓加載則會(huì)在項(xiàng)目啟動(dòng)時(shí)創(chuàng)建,降低第一次訪問的耗時(shí),通過下面配置開啟饑餓加載:文章來源地址http://www.zghlxwxcb.cn/news/detail-793782.html

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

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

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(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)文章

  • 【SpringCloud】一、微服務(wù)概述、注冊(cè)中心與Ribbon負(fù)載均衡技術(shù)簡介

    微服務(wù)治理 異步通信技術(shù) — mq 緩存技術(shù) — Redis 搜索技術(shù) — ES集群 Devops — Jenkins… 微服務(wù)是一種將各個(gè)模塊拆分開獨(dú)立運(yùn)行以提高系統(tǒng)整體效率的技術(shù),其主要特征為: 單一職責(zé):每個(gè)服務(wù)對(duì)應(yīng)唯一的業(yè)務(wù)能力、做到單一職責(zé)。 面向服務(wù):對(duì)外要暴露微服務(wù)的業(yè)務(wù)接口

    2024年02月09日
    瀏覽(19)
  • 【springcloud 微服務(wù)】Spring Cloud Ribbon 負(fù)載均衡使用策略詳解

    目錄 一、前言 二、什么是Ribbon 2.1 ribbon簡介 2.1.1??ribbon在負(fù)載均衡中的角色

    2024年02月02日
    瀏覽(27)
  • 詳解SpringCloud微服務(wù)技術(shù)棧:強(qiáng)推!源碼跟蹤分析Ribbon負(fù)載均衡原理、Eureka服務(wù)部署

    詳解SpringCloud微服務(wù)技術(shù)棧:強(qiáng)推!源碼跟蹤分析Ribbon負(fù)載均衡原理、Eureka服務(wù)部署

    ?????作者簡介:一位大四、研0學(xué)生,正在努力準(zhǔn)備大四暑假的實(shí)習(xí) ??上期文章:詳解SpringCloud微服務(wù)技術(shù)棧:認(rèn)識(shí)微服務(wù)、服務(wù)拆分與遠(yuǎn)程調(diào)用 ??訂閱專欄:微服務(wù)技術(shù)全家桶 希望文章對(duì)你們有所幫助 服務(wù)提供者:一次業(yè)務(wù)中,被其它微服務(wù)調(diào)用的服務(wù)(提供接口給

    2024年01月18日
    瀏覽(24)
  • 基于SpringCloud的微服務(wù)架構(gòu)學(xué)習(xí)筆記(2)注冊(cè)中心Eureka和負(fù)載均衡Ribbon

    基于SpringCloud的微服務(wù)架構(gòu)學(xué)習(xí)筆記(2)注冊(cè)中心Eureka和負(fù)載均衡Ribbon

    1.7.1 遠(yuǎn)程調(diào)用的問題 地址信息獲取 : 服務(wù)消費(fèi)者 如何獲取 服務(wù)提供者 的 地址信息 (不能每次都寫死): URL:http://localhost:8081/user/\\\"+order.getUserId() 多選一 :如果有多個(gè)服務(wù)提供者,消費(fèi)者如何進(jìn)行選擇 監(jiān)測健康狀態(tài) :消費(fèi)者如何獲知提供者的健康狀態(tài) 1.7.2 eureka原理 地址

    2024年02月13日
    瀏覽(19)
  • SpringCloud學(xué)習(xí)筆記(上):服務(wù)注冊(cè)與發(fā)現(xiàn):Eureka、Zookeeper、Consul+負(fù)載均衡服務(wù)調(diào)用:Ribbon

    SpringCloud學(xué)習(xí)筆記(上):服務(wù)注冊(cè)與發(fā)現(xiàn):Eureka、Zookeeper、Consul+負(fù)載均衡服務(wù)調(diào)用:Ribbon

    SpringCloud=分布式微服務(wù)架構(gòu)的一站式解決方案,是多種微服務(wù)架構(gòu)落地技術(shù)的集合體,俗稱微服務(wù)全家桶。 springboot版本選擇: git源碼地址:https://github.com/spring-projects/spring-boot/releases/ SpringBoot2.0新特性:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Release springcloud版本選

    2024年02月08日
    瀏覽(23)
  • 【SpringCloud】Ribbon負(fù)載均衡

    【SpringCloud】Ribbon負(fù)載均衡

    ??浩澤學(xué)編程 :個(gè)人主頁 ??? 推薦專欄 :《深入淺出SpringBoot》《java對(duì)AI的調(diào)用開發(fā)》 ??????????????《RabbitMQ》《Spring》《SpringMVC》《項(xiàng)目實(shí)戰(zhàn)》 ??學(xué)無止境,不驕不躁,知行合一 在Eureka注冊(cè)中心中我們?cè)谔砑油闌LoadBalanced注解,即可實(shí)現(xiàn)負(fù)載均衡功能,現(xiàn)在一起

    2024年04月17日
    瀏覽(17)
  • SpringCloud入門——微服務(wù)調(diào)用的方式 & RestTemplate的使用 & 使用nacos的服務(wù)名初步(Ribbon負(fù)載均衡)

    SpringCloud入門——微服務(wù)調(diào)用的方式 & RestTemplate的使用 & 使用nacos的服務(wù)名初步(Ribbon負(fù)載均衡)

    1.微服務(wù)調(diào)用的幾種方式,異步消息傳遞,http調(diào)用,服務(wù)網(wǎng)關(guān)調(diào)用,服務(wù)發(fā)現(xiàn)調(diào)用nacos; 2.spring提供的restTemplate,發(fā)送HTTP請(qǐng)求的客戶端工具類; 3.nacos使用服務(wù)名報(bào)錯(cuò),需要加Ribbon負(fù)載均衡; RPC (Remote Procedure Call)遠(yuǎn)程過程調(diào)用協(xié)議,一種通過網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)上請(qǐng)求服務(wù),

    2024年02月10日
    瀏覽(19)
  • SpringCloud(3) Ribbon負(fù)載均衡,負(fù)載均衡策略,自定義負(fù)載均衡

    SpringCloud(3) Ribbon負(fù)載均衡,負(fù)載均衡策略,自定義負(fù)載均衡

    假設(shè)我們有一臺(tái) order-service 訂單服務(wù),兩臺(tái) user-service 用戶服務(wù),當(dāng)訂單服務(wù)需要調(diào)用用戶服務(wù)獲取用戶信息的時(shí)候,應(yīng)該怎么分配調(diào)用哪臺(tái)服務(wù)呢? 這時(shí)候就需要用到 Ribbon 組件了。 首先,我們發(fā)起遠(yuǎn)程調(diào)用的時(shí)候,指定的是需要調(diào)用的服務(wù)名稱,然后我們會(huì)調(diào)用 Ribbon 組

    2024年02月11日
    瀏覽(24)
  • SpringCloud(三) Ribbon負(fù)載均衡

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

    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, LoadBa

    2024年02月06日
    瀏覽(19)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包