SpringCloud學習-更新中

源碼倉庫:github-CNXMBuyu-springclouddemo

Eureka

用法看源碼

服務註冊中心的一些基本操作如下圖:

  • EurekaClient:包含服務提供者和服務調用者
  • EurekaServer:Eureka服務器
    在這裏插入圖片描述

register - 服務註冊

EurekaClient向EurekaServer提供自身的元數據。

renew - 服務續約

EurekaClient在默認情況下,每隔30秒會發送一次心跳來進行服務續約。通過服務續約來告知服務器,該EurekaClient是可用的。

正常情況下,如果EurekaServer在90秒內沒有收到EurekaClient的心跳,則會將EurekaClient實例從註冊列表中移除。

fetchRegistry - 獲取服務註冊列表信息

EurekaClient從EurekaServer獲取服務註冊表信息,並將其緩存在本地。EurekaClient會使用服務註冊列表信息查找其他服務的信息,從而進行遠程調用。

默認30秒更新一次

cancel - 服務下線

EurekaClient在程序關閉時可以向EurekaServer發送下線請求。

DiscoveryManager.getInstance().shutdownComponent();

構建EurekaServer集羣

Ribbon

用法看源碼

在測試負載均衡時,需要把配置eureka.instance.preferIpAddress=true加上,不然會調用超時(或者配置hosts文件也可以)。

簡介

將負載均衡邏輯以代碼的形式封裝到服務消費者的客戶端上,服務消費者客戶端維護了一份服務提供者的信息列表,有了信息列表,通過負載均衡策略將請求分攤給多個服務提供者,從而達到負載均衡的目的。

Ribbon作爲服務消費者的負載均衡器,有兩種使用方式。一種是和RestTemplate相結合,另一種是和Feign相結合。

LoadBalancerClient介紹

負載均衡器LoadBalancerClient是從EurekaClient獲取服務註冊列表信息的,並將服務註冊列表信息緩存一份。根據負載均衡策略選擇一個服務實例的信息,從而進行負載均衡。

可以通過配置ribbon.eureka.enable=false,來禁止調用EurekaClient獲取註冊列表,通過配置stores.ribbon.listOfServers=a.com,b.com

IRule

  • BestAvailableRule:選擇最小請求數
  • ClientConfigEnabledRoundRobinRule:輪詢
  • RandomRule:隨機選擇一個server
  • RoundRobinRule:輪詢選擇server
  • RetryRule:根據輪詢的方式重試
  • WeightedResponseTimeRule:根據響應時間分配一個weight,weight越低,被選擇的可能性就越低
  • ZoneAvoidanceRule:根據server的zone區域和可用性來輪詢選擇
// 改變負載均衡的策略
@Bean
public IRule rule(){
    return new RandomRule();
}

IPing

  • PingUrl:真實地去ping某個url,判斷其是否可用
  • PingConstant:固定返回某個服務是否可用,默認返回true,即可用
  • NoOpPing:不去ping,直接返回true,即可用
  • DummyPing:直接返回true,並實現了initWithNiwsConfig方法
  • NIWSDisconveryPing:根據DiscoveryEnabledServer的InstanceInfo的InstancesStatus去判斷,如果爲InstanceStatus.UP,則可用,否則不可用。

負載均衡原理

  1. 通過EurekaClient獲取服務註冊列表
  2. 通過IPing,默認每10秒發送一次ping,來更新服務的註冊列表信息
  3. 根據負載均衡策略來實現負載均衡

Feign

用法看源碼

Hystrix

工作機制

  1. 當某個API服務在一定時間內失敗的次數大於設定的閾值,則打開熔斷器;打開熔斷器的服務會執行快速失敗的邏輯(即fallback指定的方法)
  2. 處於打開的熔斷器,過一段時間會處於半打開模式狀態。(一部分執行正常邏輯,一部分執行失敗邏輯)
  3. 自我修復能力。當執行正常邏輯的請求都成功了,則關閉熔斷器,否則繼續打開熔斷器。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章