Spring Cloud Ribbon負載均衡器(收藏了)

  • 時間:2018-08-11 23:01 作者:學習視頻資源家 來源:學習視頻資源家 閱讀:156
  • 掃一掃,手機訪問
摘要:1.關鍵字 負載均衡2.基本詳情上一次講到遠程調使用的用戶端feign,feign的主要功能就是遠程對象的本地代理商或者者使用于遠程調使用的httpClient,減化遠程調使用的復雜性,讓本地調使用遠程方法好像調使用本地方法一樣簡單方便。但是在集群環境,遠程服務可能有多個可使用節點,那么調使用時就需

1.關鍵字

負載均衡

2.基本詳情

上一次講到遠程調使用的用戶端feign,feign的主要功能就是遠程對象的本地代理商或者者使用于遠程調使用的httpClient,減化遠程調使用的復雜性,讓本地調使用遠程方法好像調使用本地方法一樣簡單方便。但是在集群環境,遠程服務可能有多個可使用節點,那么調使用時就需要負載均衡。ribbon是一個提供用戶端負載均衡算法的策略庫。

負載均衡主要有種方式,一種是服務端負載算法,一種是用戶端負載算法。服務端算法主要是通過反向代理商的方式把用戶端請求分發到可使用的節點,如:nginx。用戶端算法則是先獲取所有可使用節點,再自己選擇一個合適的節點。ribbon提供的負載均衡算法屬于用戶端算法。

3.什么是ribbon?

ribbon是一個建立在http或者tcp之上的本地負載均衡器。feign用ribbon進行負載,因而只需用@FeignClient,就自動引使用了ribbon.

ribbon最核心的概念是:一個被命名的client,也即一個具備唯一名字的用戶端每一個負載均衡都是整體組件的一部分,它們相互協作調使用遠程服務。每一個client都會通過類RibbonClientConfiguration創立一個新的子spring ApplicationContext,這個子ApplicationContext上下文的名子就是client的名字(如:@FeignClient("user-server"),每個ribbon用戶端包含:ILoadBalancer, RestClient, ServerListFilter, ServerList,IRule。

  1. ILoadBalancer:是負載均衡的入口類。
  2. ServerList:存儲遠程服務所有可使用節點
  3. ServerListFilter:使用于過濾非法的遠程節點(如:不可使用等)
  4. IRule:負載算法(策略),使用于從可使用節點選擇一個合適的節點。
  5. RestClient:遠程調使用

4.集成ribbon

假如用feign,則默認已經集成,否則手動集成;用maven的pom.xml文件,配置如下:spring-cloud-starter-ribbon


  1. org.springframework.cloud
  2. spring-cloud-starter-ribbon

5.編碼方式配置ribbon用戶端

可以通過 .ribbon.* 來自己設置配置ribbon用戶端。這此屬性具體可參考類:CommonClientConfigKey,此類中包含了所有可能配置的屬性key.

spring cloud允許用自己設置的配置文件對ribbon進行完全控制,如:@RibbonClient(name = "foo", configuration = FooConfiguration.class)通過注解中的configuration可以自己設置的配置。這種情況下:RibbonClientConfiguration類中的配置和FooConfiguration類中的配置一起影響ribbonClient,基中FooConfiguration中的配置會覆蓋RibbonClientConfiguration中的配置。

注意:FooConfiguration必需用@Configuration進行注解,但是不能被scan到,否則變成全局對旬會被所有client用。它必需放在scan外的包中,或者者是用scan中的exclude排隊掉。這些配置都會在子ApplicationContext中被創立。

ribbon默認用以下bean:

  1. IClientConfig ribbonClientConfig: DefaultClientConfigImpl:配置
  2. IRule ribbonRule: ZoneAvoidanceRule:負載算法(如何從可使用中選一個)
  3. IPing ribbonPing: NoOpPing:ping 檢查遠程服務能否存活
  4. ServerList ribbonServerList: ConfigurationBasedServerList :遠程服務節點列表
  5. ServerListFilter ribbonServerListFilter: ZonePreferenceServerListFilter:過濾不符合要求的遠程節點(如何排除不可使用的節點)
  6. ILoadBalancer ribbonLoadBalancer: ZoneAwareLoadBalancer:負載
  7. ServerListUpdater ribbonServerListUpdater: PollingServerListUpdater:升級遠程服務節點(同步遠程節點信息)

示例:創立一個自己設置的ping,會覆蓋默認的ping bean.

@Configuration

public class FooConfiguration {

@Bean

public IPing ribbonPing(IClientConfig config) {

return new PingUrl();

}

}

6.配置文件配置ribbon用戶端

從1.2.0版本,Spring Cloud Netflix支持用properties配置文件配置Ribbon用戶端。允許在啟動時根據不同環境改變行為。

下面是相關配置,前提是必需加上前前綴:.ribbon. 以下可以類可以通過配置文中指定自己設置類,從而替換默認實現。

  1. NFLoadBalancerClassName: should implement ILoadBalancer:負載均衡器全限定名
  2. NFLoadBalancerRuleClassName: should implement IRule:負載策略(算法)全限定名
  3. NFLoadBalancerPingClassName: should implement IPing:ping全限定名
  4. NIWSServerListClassName: should implement ServerList:遠程服務列表全限定名
  5. NIWSServerListFilterClassName should implement ServerListFilter:過濾遠程服務點節的過濾器全限定名

注意:配置文件中的配置優先級比@RibbonClient(configuration=MyRibbonConfig.class)中configuration指定的代碼配置高,同時也比netflix默認的配置高

優化級如下:

配置文件 > @RibbonClient(configuration=MyRibbonConfig.class)的MyRibbonConfig > 默認配置

示例:

下是為一個叫做“users”的微服務配置IRule,

application.yml


  1. users:
  2. ribbon:
  3. NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule

7.集成eureka

當用eureka和ribbon時,ribbonServerList會被eureka中的DiscoveryEnabledNIWSServerList替換,通過eureka獲取遠程服務節點列表。

IPing會被NIWSDiscoveryPing替換,使用于檢查遠程服務能否可使用。ServerList 會被DomainExtractingServerList 替換。ribbon相關的組件會被替換成eureka對應的組件。

如何替換?

ribbon組件通過RibbonAutoConfiguration自動集成,而eureka 和ribbon則是通過RibbonEurekaAutoConfiguration自動集成。RibbonAutoConfiguration優先加載并創立,但并未創立對應的RibbonClientConfiguration(包含所有ribbon組件的創立)。RibbonEurekaAutoConfiguration在RibbonAutoConfiguration創立后加載并生成相應bean《通過@AutoConfigureAfter(RibbonAutoConfiguration.class)》。RibbonEurekaAutoConfiguration通過注解@RibbonClients(defaultConfiguration = EurekaRibbonClientConfiguration.class)加載 EurekaRibbonClientConfiguration(包含所有eureka使用于替換ribbon組件的bean)。因為EurekaRibbonClientConfiguration比aRibbonClientConfiguration優先創立,這個配置中的eureka ribbon組件就優生成,通過注解 @ConditionalOnMissingBean,即可以阻止原生ribbon核心組件的生成,從而無縫替換。

8.關閉eureka功能

eureka是一個非常方便的,使用于抽像 “發現遠程服務節點”的方法,因而可以不使用在本地硬編碼遠程服務節點的url地址。但是假如你不想用eureka,但是 依然用Ribbon and Feign ,那么你可以通過@RibbonClient指定遠程服務名,而后通過配置文件配置遠程節點的url地址,此時需要關閉eureka(classpath下沒有eureka包或者者ribbon.eureka.enabled: false主動關閉)

示例:如果有一個名叫"stores"的遠程微服務,則以下為本地配置對應的遠程節點url,多個以逗號分隔

application.yml


  1. stores:
  2. ribbon:
  3. listOfServers: example.com,google.com

關閉eureka:

application.yml


  1. ribbon:
  2. eureka:
  3. enabled: false

直接用ribbon api接口:


  1. public class MyClass {
  2. @Autowired
  3. private LoadBalancerClient loadBalancer;
  4. public void doStuff() {
  5. ServiceInstance instance = loadBalancer.choose("stores");
  6. URI storesUri = URI.create(String.format("http://%s:%s", instance.getHost(), instance.getPort()));
  7. // ... do something with the URI
  8. }
  9. }

9.緩存Ribbon配置

每個命名的ribbon client(如:@FeignClient(value = "stores"))都會被創立一個子Application Context。即:一個遠程微服服務對應的所api接口都會在本創立對應的代理商bean,這些bean都存在于一個新的子Application Context。這些Application Context由spring cloud維護。這些Application Context默認是在第一個請求時創立。不過Application Context的創立時機可以通過配置來改變,從而在項目啟動時創立。

指定的遠程服務對應的代理商bean在服務啟動時生成。

application.yml


  1. ribbon:
  2. eager-load:
  3. enabled: true
  4. clients: client1, client2, client3

10.Ribbon提供的主要負載均衡策略詳情

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

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

2:隨機負載均衡 (Random)

隨機選擇狀態為UP的Server

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

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

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

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

請關注小編,后續會推出更多精彩內容

本人從事行業工作8年了,工作之余搜集了少量視頻資料

有JAVA高級架構師、系統高級架構師、大數據、機器(深度)學習/數據挖掘/數據分析/算法/計算機視覺、Android、IOS、Web前臺、JavaScript、WebApp(React Native)、微信小程序開發、C、C++、Python開發運維、Linux運維架構內核、PHP、.Net、數據庫、UID、游戲開發、軟件測試、網絡編程、FFmpeg開發、計算機軟考等教程

我把資料都共享出來,也算是物盡其使用,希望能幫到需要的人,不使用費時在找資料;

資料也在不斷升級中,不管是新手,還是老手,都能找到你需要的資料;

獲取方式:

1、因為人數太多,請評論區留下你們評論

2、評論后私信我:“xx資料”就可領取!如:大數據資料,dubbo資料,云計算資料等等

老規矩,一個轉發+評論,一份資料。名額有限,太多人我送不過來,請諒解!

資料只為有需要的朋友準備,而且整理不易,假如覺得資源不錯,希望大家能積極轉發讓更多人看到,給予小編鼓勵與支持,有動力分享資源。

下期資源更勁爆哦,歡迎關注 + 留言+點贊+轉發+收藏!

  • 全部評論(0)
最新發布的資訊信息
【系統環境|軟件環境】Android | App內存優化 之 內存泄漏 要點概述 以及 處理實戰(2019-12-04 14:27)
【系統環境|軟件環境】MySQL InnoDB 事務(2019-12-04 14:26)
【系統環境|軟件環境】vue-router(單頁面應用控制中心)常見用法(2019-12-04 14:26)
【系統環境|軟件環境】Linux中的Kill命令(2019-12-04 14:26)
【系統環境|軟件環境】Linux 入門時必學60個文件解決命令(2019-12-04 14:26)
【系統環境|軟件環境】更新版ThreeJS 3D粒子波浪動畫(2019-12-04 14:26)
【系統環境|軟件環境】前臺開發WebStorm常用快捷鍵,火速收藏!(2019-12-04 14:25)
【系統環境|軟件環境】微博H5登錄和發微博組件(2019-12-04 14:25)
【系統環境|軟件環境】5分鐘談前臺面試,小伙伴都驚呆了(2019-12-04 14:23)
【系統環境|軟件環境】node中的path模塊(2019-12-04 14:23)
手機二維碼手機訪問領取大禮包
返回頂部
澳洲幸运10精准人工计划