客戶端負載均衡 Ribbon 基礎篇

2021-10-09 06:42:40 字數 3770 閱讀 2900

2.什麼是 ribbon?

3.resttemplate 簡介

4.原生 ribbon 示例

5.resttemplate & ribbon 示例

6.參考

本章主要介紹 ribbon 、resttemplate 的一些相關的基本概念和用法,以及 resttemplate 和 ribbon 如何結合使用,對 ribbon 有乙個基本的印象,下一章我們再對其進行相關的原始碼分析。

負載均衡是一種基礎的網路服務,核心原理是按照指定的負載均衡演算法,將請求分配到後端服務集群上,從而為系統提供並行處理和高可用的能力。

負載均衡一般分為以下兩種:

客戶端負載均衡,客戶端根據自己的請求情況做負載,ribbon 就屬於客戶端自己做負載均衡的框架。

客戶端傳送請求到負債均衡器,負載均衡器根據相關的負載均衡演算法(隨機、輪詢、加權)選擇其中一台伺服器,將請求**到伺服器上。

如上圖所示,和集中式負載均衡的不同是,客戶端負載均衡器需要自己維護服務例項的資訊,然後通過相關的負載均衡演算法(隨機、輪詢、加權)從例項中選取乙個例項,直接進行訪問。

ribbon 是 netflix 公司開源的乙個負載均衡的元件,它屬於上述的第二種方式,將負載均衡邏輯封裝在客戶端中,並且執行在客戶端的程序裡。ribbon 是乙個經過了雲端測試的 ipc 庫,可以很好的控制 http 和 tcp 客戶端的負債均衡行為。

在 spring cloud 體系中,ribbon 作為服務端消費者的負載均衡器,有三種使用方式:

resttemplate 是 spring resources 中乙個訪問第三方 restful api 介面的網路請求框架。resttemplate 的設計原則和 spring 中其他 template (例如 jdbctemplate、jmstemplate)類似,都是為了執行複雜任務提供了乙個具有預設行為的模板方法。

示例

@restcontroller

public

class

resttestcontroller

}

測試瀏覽器輸入

可以看到返回了該網頁的 html 字串。

public

class

ribbonnativeclientdemo

}private

static

void

test

(baseloadbalancer baseloadbalancer)

catch

(exception e)})

.toblocking()

.first()

; system.out.

println

("呼叫結果:"

+ result);}

}

測試結果:

呼叫結果:success

15:41:34.944 [main] debug com.netflix.loadbalancer.loadbalancercontext - default using lb returned server: localhost:8081 for request null

呼叫結果:success

15:41:34.945 [main] debug com.netflix.loadbalancer.loadbalancercontext - default using lb returned server: localhost:8081 for request null

呼叫結果:success

15:41:34.945 [main] debug com.netflix.loadbalancer.loadbalancercontext - default using lb returned server: localhost:8085 for request null

呼叫結果:success

15:41:34.945 [main] debug com.netflix.loadbalancer.loadbalancercontext - default using lb returned server: localhost:8083 for request null

...

可以看到每次返回的伺服器例項資訊是隨機的。

完整的**請參考 github 上的專案,這裡只展示核心的**

我們先配置兩個 resttemplate,注入到 ioc 容器中

@configuration

public

class

resttemplateconfig

@bean

@loadbalanced

@qualifier

("loadbalancedresttemplate"

)public resttemplate loadbalancedresttemplate()

}

對應的 controller 我們同樣寫兩個方法,使用@qualifier分別依賴注入兩個 resttemplate

@restcontroller

public

class

ribboncontroller

("/ribbon/getuser"

)public user getuserribbon()

}

啟動&測試這裡我們需要起兩個服務 user-service 的服務註冊到 eureka 註冊中心上。

usercontroller **如下:

@restcontroller

public

class

usercontroller")

private string port;

("getuser"

)public user getuser()

}

全部啟動完成之後的效果如下:

註冊中心

測試普通介面,瀏覽器輸入,每次重新整理返回的結果都一樣,如下圖所示:

測試負載均衡結果,瀏覽器輸入

第一次重新整理,結果如下圖所示:

第二次重新整理,結果如下圖所示:

多次重新整理,每次的返回結果的 port 埠號都不一樣,表示請求每次呼叫的服務提供者都不一樣,這說明已經完成負債均衡。

ribbon客戶端負載均衡

ribbon會儲存註冊中心應用,然後定時去更新,而不是每次都要先訪問註冊中心,再訪問應用 依賴org.springframework.cloud spring cloud starter netflix ribbon 複製 配置resttemplate bean是乙個方法級別上的註解,主要用在 co...

客戶端負載均衡 Ribbon

1.集群user server c v 改東西 user server pom.xml user server 3001artifactid user server 3001name parent pm.xml user server 3001module eureka client service...

ribbon客戶端負載均衡

參考 ribbon是netflix發布的負載均衡器,它有助於控制http和tcp的客戶端的行為。為ribbon配置服務提供者位址後,ribbon就可基於某種負載均衡演算法,自動地幫助服務消費者去請求。ribbon預設為我們提供了很多負載均衡演算法,例如輪詢 隨機等。當然,我們也可為ribbon實現自...