4. Spring Cloud Ribbon 實現“負載均衡”的詳細配置說明

Rainbow-Sea發表於2024-11-15

4. Spring Cloud Ribbon 實現“負載均衡”的詳細配置說明

@

目錄
  • 4. Spring Cloud Ribbon 實現“負載均衡”的詳細配置說明
  • 前言
  • 1. Ribbon 介紹
    • 1.1 LB(Load Balance 負載均衡)
  • 2. Ribbon 原理
    • 2.2 Ribbon 機制
  • 3. Spring Cloud Ribbon 實現負載均衡演算法-應用例項
  • 4. 總結:
  • 5. 最後:


前言

  • 對應上一篇學習內容:🌟🌟🌟ChinaRainbowSea-CSDN部落格
  • 對應下一篇學習內容:🌟🌟🌟

1. Ribbon 介紹

Ribbon 是什麼 ?

1.Spring Cloud Ribbon 是基於Netflix Ribbon 實現的一套客戶端,負載均衡的工具
2.Ribbon 主要功能是提供客戶端負載均衡演算法和服務呼叫
3.Ribbon 客戶端元件提供一系列完善的配置項如“連線超時,重試”
4.Ribbon 會基於某種規則(如簡單輪詢,隨機連線等)去連線指定服務
5.程式設計師很容易是由 Ribbon 的負載均衡演算法實現負載均衡
6.一句話: Ribbon: 負載均衡 + RestTemplate 呼叫
Ribbon 的官網地址: https://github.com/Netflix/ribbon

在這裡插入圖片描述

Ribbon 進入維護狀態?

在這裡插入圖片描述

在這裡插入圖片描述

Ribbon 目前進入維護模式, 未來替換方案 是 Spring Cloud LoadBalancer

1.1 LB(Load Balance 負載均衡)

LB 分類

  1. 集中式: LB

即在服務的消費方和提供方之間使用獨立的LB設施(可以是硬體,如F5,也可以是軟體,如 Nginx)
由該設施負責把訪問請求透過某種策略轉發至服務的提供方。

在這裡插入圖片描述

  1. 程序內 LB

將 LB邏輯整合到消費方,消費方服務註冊中心獲知有哪些地址可用,然後再從這些地址中選擇
一個合適的服務地址

Ribbon 就屬於程序內 L B,它只是一個類庫,整合於消費方程序,消費方透過它來獲取到服務提供方的地址。

在這裡插入圖片描述

特別說明:在上一篇的學習內容上:例項-前面 member-consumer 輪詢負載訪問 10000/10002 底層就是 Ribbon 預設的輪詢負載演算法。

2. Ribbon 原理

Ribbon 架構圖&機制

在這裡插入圖片描述

在這裡插入圖片描述

2.2 Ribbon 機制

Ribbon 機制:

  1. 先選擇 EurekaServer,它優先 選擇在同一個區域內負載較少的 Server 服務。
  2. 再根據使用者指定的策略,在從 Server 取到的服務註冊列表中選擇一個地址
  3. Ribbon 提供了多種策略:比如:輪詢,隨機和根據響應時間加權等等

Ribbon 常見負載演算法

在這裡插入圖片描述

3. Spring Cloud Ribbon 實現負載均衡演算法-應用例項

需求分析/圖解

  1. 需求: 將預設的輪詢演算法改成隨機演算法 RandomRule
  2. 瀏覽器輸入 : http://localhost/member/consumer/get/1
  3. 要求 訪問的 10000/10002 埠的服務是隨機的,也就是設定為:RandomRule 隨機負載均衡

其實:所謂的隨機是在少量資料上是隨機的,但是在大量資料的基礎上,隨機的結果基本上和平均 差不多。

  1. 首先:建立 member-service-consumer-80 com/rainbowsea/springcloud/config/RibbonRule.java,隨機負載均衡的演算法的配置類,進行配置隨機負載均衡

在這裡插入圖片描述

package com.rainbowsea.springcloud.config;


import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RibbonRule {

    @Bean // 配置注入自己的負載均衡演算法
    public IRule myRibbonRule() {
        // 這裡老師返回的是 RandomRule,大家也可以指定其他的內容。
        //return new WeightedResponseTimeRule();
        return new RandomRule();  // 隨機演算法

    }
}

注意:同時還需要在對應的Eureka Client 客戶端當中的 RestTemplate Http模板 的位置開啟, 加入 @LoadBalanced 開啟負載均衡

在這裡插入圖片描述

以及同時還需要在對應的Eureka Client 客戶端 的場景啟動器的位置開啟,當中加入@RibbonClient 註解標明:使用的是 Ribbon 下的負載均衡上的哪個演算法。

在這裡插入圖片描述

@RibbonClient(name = "MEMBER_SERVICE_PROVIDER_URL",configuration = RibbonRule.class) // 指定 Ribbon 的負載均衡演算法
package com.rainbowsea.springcloud;


import com.rainbowsea.springcloud.config.RibbonRule;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.ribbon.RibbonClient;

// 如果錯誤: 加入排除 DataSourceAutoConfiguration 自動配置
//@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
//@EnableEurekaClient 表示將專案/模組/程式 標註作為 Eureka Client
@EnableEurekaClient
@SpringBootApplication
@EnableDiscoveryClient // 啟用服務發現
@RibbonClient(name = "MEMBER_SERVICE_PROVIDER_URL",configuration = RibbonRule.class) // 指定 Ribbon 的負載均衡演算法
public class MemberConsumerApplication80 {
    public static void main(String[] args) {
        SpringApplication.run(MemberConsumerApplication80.class, args);
    }
}

測試

  1. 瀏覽器輸入 : http://localhost/member/consumer/get/1
  2. 觀察訪問的 10000/10002 埠的服務是隨機的。

在這裡插入圖片描述

4. 總結:

  1. Spring Cloud Ribbon 是基於Netflix Ribbon 實現的一套客戶端,負載均衡的工具。
  2. LB(Load Balance 負載均衡) 兩種分類:
    1. 集中式: LB
    2. 程序內 LB
  3. Ribbon 原理和機制
  1. 先選擇 EurekaServer,它優先 選擇在同一個區域內負載較少的 Server 服務。
  2. 再根據使用者指定的策略,在從 Server 取到的服務註冊列表中選擇一個地址
  3. Ribbon 提供了多種策略:比如:輪詢,隨機和根據響應時間加權等等
  1. Ribbon 常見的負載均衡演算法。
  2. 配置 Spring Cloud Ribbon 的三點:
  1. 建立配置對應 Ribbon 下的負載均衡的演算法的配置類(注意標註配置類註解@Configuration 和對應的方法處加入'@Bean加入 ioc 容器管理' ),進行配置負載均衡 ,直接 new 對應的 Ribbon 下的 負載均衡演算法即可,比如: RandomRule,RoundRobinRule
  2. 還需要在對應的Eureka Client 客戶端當中的 RestTemplate Http模板 的位置開啟, 加入 @LoadBalanced 開啟負載均衡@LoadBalanced 註解標註負載均衡
  3. 同時還需要在對應的Eureka Client 客戶端 的場景啟動器的類上 位置開啟,當中加入@RibbonClient 註解標明:使用的是 Ribbon 下的負載均衡上的哪個演算法。
@RibbonClient(name = "MEMBER_SERVICE_PROVIDER_URL",configuration = RibbonRule.class) // 指定 Ribbon 的負載均衡演算法

5. 最後:

“在這個最後的篇章中,我要表達我對每一位讀者的感激之情。你們的關注和回覆是我創作的動力源泉,我從你們身上吸取了無盡的靈感與勇氣。我會將你們的鼓勵留在心底,繼續在其他的領域奮鬥。感謝你們,我們總會在某個時刻再次相遇。”

在這裡插入圖片描述

相關文章