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>

<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>,回複"源碼",擷取本文相關源碼
掃碼加入知識星球,擷取更多珍貴筆記、視訊、電子書的等資源。