Ribbon實現負載均衡

weixin_33895657發表於2019-01-24

首先,我們需要思考一個問題,如果同一個服務提供者在註冊中心註冊多個服務,那麼使用者怎麼選擇服務呢?所以,需要客戶端來實現服務的負載均衡,而在SpringCloud中,推薦使用Ribbon來實現負載均衡。

Ribbon簡介

Ribbon時Netflix釋出的負載均衡器,它有助於控制HTTP和TCP客戶端的行為。為Ribbon配置服務提供者地址列表後,Ribbon就可基於某種負載均衡演算法,自動地幫助服務消費者去請求。Ribbon預設為我們提供了很多的負載均衡演算法,例如輪詢、隨機等。我們也可以自定負載均衡演算法。

有了Ribbon之後,我們的工程架構:


11345146-a39931e4912fd73f.png

使用Ribbon

首先為order模組(Ribbon主要是幫助服務消費者)增加Ribbon依賴

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>

但是eureka依賴中已經包含了,所以可省略。

然後為RestTemplate設定@LoadBalanced註解。之後,改造Item Service的實現:
之前的實現:


11345146-ae32248f2dfe04ec.png

現在的實現:


11345146-981218f8db379c2f.png

到此,已經全部完成了負載均衡。當然,Ribbon還有很多其他的策略,如圖所示,可以根據這些類深入類的內部進行探究。


11345146-ae57f30c6d8b07e2.png

一般的策略是預設策略,當然也有其他策略:


11345146-c53f225004b390f5.png

相關文章