天天看點

Spring Cloud 快速上手之 Ribbon 負載均衡

Spring Cloud 快速上手之 Ribbon 負載均衡

簡介

Spring Cloud Ribbon是基于HTTP和TCP的用戶端負載工具,它是基于Netflix Ribbon實作的。通過Spring Cloud的封裝,可以輕松地将面向服務的REST 模闆請求,自動轉換成用戶端負載均衡服務調用。提供雲端負載均衡,有多種負載均衡政策可供選擇,可配合服務發現和斷路器使用。

準備工作

Ribbon

基本配置

負載均衡

源碼分析

負載均衡政策

單獨使用

饑餓加載

REFERENCES

擷取更多

手機使用者請<code>橫屏</code>擷取最佳閱讀體驗,<code>REFERENCES</code>中是本文參考的連結,如需要連結和更多資源,可以掃碼加入『知識星球』(文末)擷取長期知識分享服務。
開發環境

Greenwich.SR5

Spring Boot 2.1.5

MySQL 5.7

JDK 1.8

依賴管理

需要注意的是,在<code>spring-cloud-starter-netflix-eureka-client</code>預設內建了<code>spring-cloud-starter-netflix-ribbon</code>,是以可以不引入。

RestTemlate 配置
RestController
UserServiceImpl
接口測試

<code>http://localhost:8012/instance/ms-consumer-user-v2-ribbon</code>

<code>http://localhost:8012/user/16</code>

配置服務提供者多執行個體

兩個執行個體的啟動參數分别為<code>--spring.profiles.active=ribbon1</code>和

<code>--spring.profiles.active=ribbon2</code>

Spring Cloud 快速上手之 Ribbon 負載均衡

<code>http://localhost:8012/instance/ms-provider-user-v2</code>

關注<code>"instanceId": "192.168.0.100:ms-provider-user-v2:8013",</code>

和 <code>"instanceId": "192.168.0.100:ms-provider-user-v2:8014",</code>

可以發現實作了負載均衡,兩次請求被均勻的配置設定到2個<code>ms-provider-user-v2</code>服務執行個體上。

LoadBalancerInterceptor

<code>LoadBalancerInterceptor</code>是注解<code>@LoadBalanced</code>的關聯實作類。

在<code>LoadBalancerAutoConfiguration</code>中,會對<code>RestTemplate</code>進行增強處理:

而在 Spring 容器注入單例 Bean 的時候,會在<code>DefaultListableBeanFactory</code>中調用如下一段代碼:

改變負載均衡政策,配置形式,或者注解形式都可以(IRule)

配置檔案

代碼配置

通過傳回的結果測試,可以驗證是随機的,而非預設的輪詢選擇機制。

依賴配置

删除<code>spring-cloud-starter-netflix-eureka-client</code>,并引入配置:

配置
測試

結果輪詢傳回的端口為 8013 或 8014。

預設情況下Ribbon是懶加載的。當服務起動好之後,第一次請求是非常慢的,第二次之後就快很多。其解決方式:開啟饑餓加載。

Spring Cloud 會為每個名稱的 Ribbon Client 維護一個子應用程式的上下文,預設是懶加載的,配置饑餓加載後,可以在啟動時就加載對應子應用程式的上下文,進而提高首次請求的通路速度。

Spring Cloud 中文索引

Spring Cloud Alibaba之負載均衡元件 - Ribbon詳解(三)

掃碼關注<code>架構探險之道</code>,回複"源碼",擷取本文相關源碼
Spring Cloud 快速上手之 Ribbon 負載均衡
掃碼加入知識星球,擷取更多珍貴筆記、視訊、電子書的等資源。
Spring Cloud 快速上手之 Ribbon 負載均衡