負載均衡 Ribbon

一、restTemplate 是 Spring Resources 中一個訪問第三方 API 接口的網絡請求框架,用來消費REST 服務的緩存

二、ribbon 做爲服務消費者的負載均衡器,有兩種使用 方式網絡

1)ribbon和restTemplate 相結合app

2)ribbon和feign相結合,feign已經默認集成了 ribbon負載均衡

三、負載均衡器的核心類LoadBalancerClient框架

LoadBalancerClient 的 choose(」eureka-client'’)方法能夠輪流獲得 eureka-client 的兩個 服務實例的信息。google

@Autowiredrest

private LoadBalancerClient loadBalancer;server

@GetMapping (」/ testRibbon」)對象

public String testRibbon () {接口

Serviceinstance instance = loadBalancer.choose (」eureka client");

return instance . getHost ()+」:」+i nstance . getPor t ();

}

}

四、ribbon獲取服務來源

1)從 Eureka Client獲取獲取服務的實例列表

ribbon會默認從 Eureka Client 的服務註冊列表中獲取服務的信息,並緩存一份。

根據緩存的服務註冊列表信息,能夠經過 LoadBalancerClient 來選擇不一樣的服務實例, 從而實現負載均衡

 

2)從本身維護的列表中獲取服務的實例

若是禁止 ribbon從 Eureka 獲取註冊列表信息,則須要本身去維護一份服 務註冊列表信息

stores :

ribbon:

listOfServers : exarnple . corn, google. corn

ribbon :

eureka :

enabled: false

五、ribbon源碼

1)ServiceInstanceChooser ---->ServiceInstance choose(String serviceId);

2)RibbonLoadBalancerClient----->ServiceInstance choose(String serviceId)---->Server getServer(ILoadBalancer loadBalancer)

3)ILoadBalancer---->Server chooseServer(Object var1)

4)DynamicServerListLoadBalancer---->Server chooseServer(Object var1)

5)IRule ------> Server choose(Object key)

BestAvailableRule: 選擇最小請求數。

ClientConfigEnabledRoundRobinRule:輪詢。

RandornRule: 隨機選擇一個 server。

RoundRobinRule: 輪詢選擇 server。

ReRule: 根據輪詢的方式重試。

WeightedResponseTirneRule: 根據響應時間去分配一個 weight , weight 越低,被選 擇的可能性就越低。

ZoneAvoidanceRule:根據 server 的 zone 區域和可用性來輪詢選

六、 ribbon 的負載均衡主要是經過 LoadBalancerClient 來實現的,而 LoadBalancerClient 具體交給了 ILoadBalancer 來處理, ILoadBalancer 經過配置 !Rule、 !Ping 等,向 EurekaClient 獲取註冊列表的信息,默認每 10 秒向 EurekaClient 發送一次「ping」, 進而檢查是否須要更新 服務的註冊列表信息。最後,在獲得服務註冊列表信息後, ILoadBalancer 根據!Rule 的策略進 行負載均衡。 而 RestTemplate 加上@LoadBalance 註解後,在遠程調度時可以負載均衡, 主要是維護了 一個被@LoadBalance 註解的 RestTemplate 列表,並給該列表中的 RestTemplate 對象添加了攔 截器。在攔截器的方法中,將遠程調度方法交給了 Ribbon 的負載均衡器 LoadBalancerClient 去處理,從而達到了負載均衡的目

相關文章
相關標籤/搜索