亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

詳細介紹SpringCloud之Ribbon

2024-07-13 10:16:50
字體:
來源:轉載
供稿:網友

一:Ribbon是什么?

Ribbon是Netflix發布的開源項目,主要功能是提供客戶端的軟件負載均衡算法,將Netflix的中間層服務連接在一起。Ribbon客戶端組件提供一系列完善的配置項如連接超時,重試等。簡單的說,就是在配置文件中列出Load Balancer(簡稱LB)后面所有的機器,Ribbon會自動的幫助你基于某種規則(如簡單輪詢,隨即連接等)去連接這些機器。我們也很容易使用Ribbon實現自定義的負載均衡算法。

二:LB方案分類

目前主流的LB方案可分成兩類:一種是集中式LB, 即在服務的消費方和提供方之間使用獨立的LB設施(可以是硬件,如F5, 也可以是軟件,如nginx), 由該設施負責把訪問請求通過某種策略轉發至服務的提供方;另一種是進程內LB,將LB邏輯集成到消費方,消費方從服務注冊中心獲知有哪些地址可用,然后自己再從這些地址中選擇出一個合適的服務器。Ribbon就屬于后者,它只是一個類庫,集成于消費方進程,消費方通過它來獲取到服務提供方的地址。

三:Ribbon的主要組件與工作流程

Ribbon的核心組件(均為接口類型)有以下幾個:

ServerList

用于獲取地址列表。它既可以是靜態的(提供一組固定的地址),也可以是動態的(從注冊中心中定期查詢地址列表)。

ServerListFilter

僅當使用動態ServerList時使用,用于在原始的服務列表中使用一定策略過慮掉一部分地址。

IRule

選擇一個最終的服務地址作為LB結果。選擇策略有輪詢、根據響應時間加權、斷路器(當Hystrix可用時)等。

Ribbon在工作時首選會通過ServerList來獲取所有可用的服務列表,然后通過ServerListFilter過慮掉一部分地址,最后在剩下的地址中通過IRule選擇出一臺服務器作為最終結果。

四:Ribbon提供的主要負載均衡策略介紹

1:簡單輪詢負載均衡(RoundRobin)

以輪詢的方式依次將請求調度不同的服務器,即每次調度執行i = (i + 1) mod n,并選出第i臺服務器。

2:隨機負載均衡 (Random)

隨機選擇狀態為UP的Server

3:加權響應時間負載均衡 (WeightedResponseTime)

根據相應時間分配一個weight,相應時間越長,weight越小,被選中的可能性越低。

4:區域感知輪詢負載均衡(ZoneAvoidanceRule)

復合判斷server所在區域的性能和server的可用性選擇server

Ribbon自帶負載均衡策略比較

 

策略名 策略聲明 策略描述 實現說明
BestAvailableRule public class BestAvailableRule extends ClientConfigEnabledRoundRobinRule 選擇一個最小的并發請求的server 逐個考察Server,如果Server被tripped了,則忽略,在選擇其中ActiveRequestsCount最小的server
AvailabilityFilteringRule public class AvailabilityFilteringRule extends PredicateBasedRule 過濾掉那些因為一直連接失敗的被標記為circuit tripped的后端server,并過濾掉那些高并發的的后端server(active connections 超過配置的閾值) 使用一個AvailabilityPredicate來包含過濾server的邏輯,其實就就是檢查status里記錄的各個server的運行狀態
WeightedResponseTimeRule public class WeightedResponseTimeRule extends RoundRobinRule 根據相應時間分配一個weight,相應時間越長,weight越小,被選中的可能性越低。 一 個后臺線程定期的從status里面讀取評價響應時間,為每個server計算一個weight。Weight的計算也比較簡單responsetime 減去每個server自己平均的responsetime是server的權重。當剛開始運行,沒有形成statas時,使用roubine策略選擇 server。
RetryRule public class RetryRule extends AbstractLoadBalancerRule 對選定的負載均衡策略機上重試機制。 在一個配置時間段內當選擇server不成功,則一直嘗試使用subRule的方式選擇一個可用的server
RoundRobinRule public class RoundRobinRule extends AbstractLoadBalancerRule roundRobin方式輪詢選擇server 輪詢index,選擇index對應位置的server
RandomRule public class RandomRule extends AbstractLoadBalancerRule 隨機選擇一個server 在index上隨機,選擇index對應位置的server
ZoneAvoidanceRule public class ZoneAvoidanceRule extends PredicateBasedRule 復合判斷server所在區域的性能和server的可用性選擇server 使 用ZoneAvoidancePredicate和AvailabilityPredicate來判斷是否選擇某個server,前一個判斷判定一個 zone的運行性能是否可用,剔除不可用的zone(的所有server),AvailabilityPredicate用于過濾掉連接數過多的 Server。

 

五:Ribbon單獨使用

創建一個maven工程 名稱 ribbon_client

pom內容

    <dependencies>    <dependency>      <groupId>com.netflix.ribbon</groupId>      <artifactId>ribbon-core</artifactId>      <version>2.2.0</version>    </dependency>    <dependency>      <groupId>com.netflix.ribbon</groupId>      <artifactId>ribbon-httpclient</artifactId>      <version>2.2.0</version>    </dependency>  </dependencies>

sample-client.properties配置文件

# Max number of retries  sample-client.ribbon.MaxAutoRetries=1# Max number of next servers to retry (excluding the first server) sample-client.ribbon.MaxAutoRetriesNextServer=1# Whether all operations can be retried for this client sample-client.ribbon.OkToRetryOnAllOperations=true  # Interval to refresh the server list from the source sample-client.ribbon.ServerListRefreshInterval=2000# Connect timeout used by Apache HttpClient sample-client.ribbon.ConnectTimeout=3000# Read timeout used by Apache HttpClient sample-client.ribbon.ReadTimeout=3000# Initial list of servers, can be changed via Archaius dynamic property at runtime sample-client.ribbon.listOfServers=www.sohu.com:80,www.163.com:80,www.sina.com.cn:80sample-client.ribbon.EnablePrimeConnections=true 

RibbonMain代碼

import java.net.URI;import com.netflix.client.ClientFactory;import com.netflix.client.http.HttpRequest;import com.netflix.client.http.HttpResponse;import com.netflix.config.ConfigurationManager;import com.netflix.loadbalancer.ZoneAwareLoadBalancer;import com.netflix.niws.client.http.RestClient;public class RibbonMain {  public static void main( String[] args ) throws Exception {     ConfigurationManager.loadPropertiesFromResources("sample-client.properties");     System.out.println(ConfigurationManager.getConfigInstance().getProperty("sample-client.ribbon.listOfServers"));     RestClient client = (RestClient)ClientFactory.getNamedClient("sample-client");     HttpRequest request = HttpRequest.newBuilder().uri(new URI("/")).build();     for(int i = 0; i < 4; i ++) {       HttpResponse response = client.executeWithLoadBalancer(request);       System.out.println("Status for URI:" + response.getRequestedURI() + " is :" + response.getStatus());     }     ZoneAwareLoadBalancer lb = (ZoneAwareLoadBalancer) client.getLoadBalancer();     System.out.println(lb.getLoadBalancerStats());     ConfigurationManager.getConfigInstance().setProperty("sample-client.ribbon.listOfServers", "ccblog.cn:80,www.linkedin.com:80");     System.out.println("changing servers ...");     Thread.sleep(3000);     for(int i = 0; i < 3; i ++) {       HttpResponse response = client.executeWithLoadBalancer(request);       System.out.println("Status for URI:" + response.getRequestedURI() + " is :" + response.getStatus());     }     System.out.println(lb.getLoadBalancerStats());   } } 

代碼解析

使用 Archaius ConfigurationManager 加載屬性;

使用 ClientFactory 創建客戶端和負載均衡器;

使用 builder 構建 http 請求。注意我們只支持 URI 的 "/" 部分的路徑,一旦服務器被負載均衡器選中,會由客戶端計算出完整的 URI;

調用 API client.executeWithLoadBalancer(),不是 exeucte() API;

動態修正配置中的服務器池;

等待服務器列表刷新(配置文件中定義的刷新間隔是為 3 秒鐘);

打印出負載均衡器記錄的服務器統計信息。

六:Ribbon結合eureka使用

先要啟動eureka_register_service工程(注冊中心)和biz-service-0工程(服務生產者)

創建maven工程 eureka_ribbon_client 該工程啟動和相關配置依賴eureka_register_service和biz-service-0

pom加入

<parent>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-parent</artifactId>  <version>1.4.3.RELEASE</version>  <relativePath/> <!-- lookup parent from repository --></parent><dependencies>  <dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-starter-ribbon</artifactId>  </dependency>  <dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-starter-eureka</artifactId>  </dependency>  <dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-web</artifactId>  </dependency>  <dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-test</artifactId>    <scope>test</scope>  </dependency></dependencies><dependencyManagement>  <dependencies>    <dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-dependencies</artifactId>    <version>Brixton.RELEASE</version>    <type>pom</type>    <scope>import</scope>  </dependency>  </dependencies></dependencyManagement> 

在應用主類中,通過@EnableDiscoveryClient注解來添加發現服務能力。創建RestTemplate實例,并通過@LoadBalanced注解開啟均衡負載能力。

@SpringBootApplication@EnableDiscoveryClientpublic class RibbonApplication {  @Bean  @LoadBalanced  RestTemplate restTemplate() {    return new RestTemplate();  }  public static void main(String[] args) {    SpringApplication.run(RibbonApplication.class, args);  }} 

創建ConsumerController來消費biz-service-0的getuser服務。通過直接RestTemplate來調用服務

@RestControllerpublic class ConsumerController {  @Autowired  RestTemplate restTemplate;  @RequestMapping(value = "/getuserinfo", method = RequestMethod.GET)  public String add() {    return restTemplate.getForEntity("http://biz-service-0/getuser", String.class).getBody();  }} 

application.properties中配置eureka服務注冊中心

spring.application.name=ribbon-consumerserver.port=8003eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/

完成后可以打開http://localhost:8003/getuserinfo 可以看到結果

總結:Ribbon其實就是一個軟負載均衡的客戶端組件,他可以和其他所需請求的客戶端結合使用,和eureka結合只是其中的一個實例。

代碼地址:https://github.com/zhp8341/SpringCloudDemo

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲免费视频一区二区| 欧美国产日本在线| 国产在线久久久| 欧美视频精品一区| 欧美日在线观看| 亚洲天堂色网站| 亚洲伊人成综合成人网| 亚洲国产精品电影在线观看| 欧美裸体xxxx极品少妇| 亚洲欧美激情四射在线日| 色偷偷88888欧美精品久久久| 91经典在线视频| 国产91露脸中文字幕在线| 97视频在线观看播放| 日韩成人中文字幕在线观看| 日韩欧美国产中文字幕| www.欧美三级电影.com| 亚洲精品永久免费精品| 岛国av一区二区在线在线观看| 亚洲自拍偷拍在线| 欧美精品一区在线播放| 精品欧美aⅴ在线网站| 欧美视频在线观看 亚洲欧| 午夜精品久久久久久久99黑人| 国产一区av在线| 亚洲天堂第二页| 久久人人爽人人爽人人片亚洲| 亚洲精品欧美日韩| 色悠久久久久综合先锋影音下载| 久久久女女女女999久久| 亚洲人成免费电影| 亚洲欧美国产制服动漫| 欧美日韩国产中文精品字幕自在自线| 怡红院精品视频| 国产欧美va欧美va香蕉在| 亚洲精品国产精品自产a区红杏吧| 亚洲日本欧美日韩高观看| 欧美视频裸体精品| 精品久久久一区| 日韩欧美精品免费在线| 成人国产精品av| 九九久久久久久久久激情| 日韩高清电影好看的电视剧电影| 国内精品伊人久久| 中文字幕国产亚洲| 2021国产精品视频| 精品国产91乱高清在线观看| 欧美成人一区在线| 亚洲欧美制服第一页| 国产精品自拍小视频| 亚洲福利视频久久| 欧美www视频在线观看| 欧美成人第一页| 国产精品情侣自拍| 中文字幕日韩电影| 国产精品偷伦视频免费观看国产| 91po在线观看91精品国产性色| 久久99精品久久久久久噜噜| 亚洲天堂男人天堂女人天堂| 午夜精品久久久久久久男人的天堂| 国产精品久久久av久久久| 一区二区三区视频在线| 欧美丝袜美女中出在线| 国产午夜精品一区二区三区| 亚洲三级 欧美三级| 久久久精品中文字幕| 亚洲a中文字幕| 国产成人在线亚洲欧美| 国内精品久久久久久久| 精品国产成人在线| 国产精品免费久久久| 国产精品第1页| 亚洲91精品在线| 国产精品十八以下禁看| 亚洲精品国产美女| 精品成人69xx.xyz| 97精品欧美一区二区三区| 国产日韩在线观看av| 日韩在线中文视频| 亚洲精品国产电影| 欧美在线免费看| 最近2019中文字幕大全第二页| 欧美精品成人在线| 欧美日韩中文字幕在线视频| 国产精品久久久久久亚洲影视| 国产视频丨精品|在线观看| 亚洲综合小说区| 欧美疯狂xxxx大交乱88av| 26uuu日韩精品一区二区| 亚洲xxxx做受欧美| 97在线观看免费| 色噜噜久久综合伊人一本| 亚洲欧洲中文天堂| 精品日本高清在线播放| 亚洲一品av免费观看| 日韩免费黄色av| 国产一区二区三区三区在线观看| 中文字幕日韩精品在线观看| 国产日韩精品一区二区| 久久成人18免费网站| 精品国产一区二区在线| 久久成年人视频| 成人精品在线观看| 成人精品久久一区二区三区| 久久久久久久久久久av| 久久久av电影| 久久久久久久亚洲精品| 国产欧美日韩专区发布| 国产脚交av在线一区二区| 姬川优奈aav一区二区| 欧美另类暴力丝袜| 国产精品高潮在线| 久久久久久有精品国产| 亚洲欧美中文字幕在线一区| 欧美多人爱爱视频网站| 精品美女久久久久久免费| 一区二区三区 在线观看视| 九九久久久久久久久激情| 亚洲国产日韩欧美综合久久| 欧美激情va永久在线播放| 国产日韩在线精品av| 中文字幕在线视频日韩| www.日韩系列| 91极品视频在线| 久久久免费精品| 国产精品视频久久久久| 国产精品午夜国产小视频| 亚洲国产日韩精品在线| 国产成人精品av| 色悠悠久久久久| 伊人伊成久久人综合网小说| 57pao国产精品一区| 中文字幕精品av| 国产在线久久久| 欧美日韩性视频在线| 97成人精品区在线播放| 亚洲精品在线不卡| 久久九九国产精品怡红院| 狠狠久久亚洲欧美专区| 91精品91久久久久久| 国内精品模特av私拍在线观看| 亚洲国产精品久久久久秋霞蜜臀| 精品无人国产偷自产在线| 国产一区二中文字幕在线看| 欧美精品久久久久久久久久| 欧美三级xxx| 91干在线观看| 在线电影中文日韩| 久久青草精品视频免费观看| 久久亚洲精品网站| 欧美精品福利在线| 亚洲人成网站999久久久综合| 美女福利视频一区| 欧美亚洲一级片| 欧美在线性爱视频| 91视频88av| 亚洲直播在线一区| 欧美黑人巨大精品一区二区| 国产成人一区二区在线| 欧美午夜美女看片| 日韩av免费一区| 欧美性xxxxx| 精品视频在线播放免| 欧美性生活大片免费观看网址|