spring cloud 之 客戶端負載平衡 Ribbon
一、負載平衡
#負載平衡(Load Balance): 建立在現有網路結構之上,它提供了一種廉價有效透明的方法擴展網路設備和伺服器的頻寬、增加吞吐量、加強網路資料處理能力、提高網路的靈活性和可用性。其意思是分攤到多個作業單元上進行執行,例如Web伺服器、FTP伺服器、企業關鍵應用伺服器和其它關鍵任務伺服器等,從而共同完成工作任務。
1、服務端負載平衡:客戶端請求到負載平衡伺服器,負載平衡伺服器根據自身的演算法將該請求轉給某台真正提供業務的伺服器,該伺服器將回應資料給負載平衡伺服器,負載平衡伺服器最後將資料傳回給客服端。 (nginx)
2、客服端負載平衡:基於客戶端的負載平衡,簡單的說就是在客戶端程式裡面,自己設定一個調度演算法,在向伺服器發起請求的時候,先執行調度演算法計算出向哪台伺服器發起請求,然後再發起請求給伺服器。
基於客戶端負載平衡的特性:
由客戶端內部程式實現,不需要額外的負載平衡器軟硬體投入。
程式內部需要解決業務伺服器不可用的問題,伺服器故障對應用程式的透明度小。
程式內部需要解決業務伺服器壓力過載的問題。
二、Ribbon實作客戶端的負載平衡
我們使用spring boot 來測試。
pom檔:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 "> <modelVersion>4.0.0</modelVersion> <groupId>com.jalja.org</groupId> <artifactId>spring-consumer-server-ribbon</artifactId> <version>0.0.1-SNAPSHOT</version> <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.2.RELEASE</version></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Camden.SR4</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-ribbon</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies></project>
application.yml
stores: ribbon: listOfServers: www.baidu.com,www.jalja.org,www.163.com
Ribbon的負載平衡策略
1、RoundRobinRule(輪詢模式) public class RoundRobinRule extends AbstractLoadBalancerRule roundRobin方式輪詢選擇server 輪詢index,選擇index對應位置的server 此策略也是ribbon的預設策略
SpringCloudRibbonApplication.java
="static"= loadBalancer.choose("stores"= URI.create(String.format("http://%s:%s" "static"
:80
:80
:80
:80
:80
#:80
2、RandomRule(隨機策略)# public class RandomRule extends AbstractLoadBalancerRule# 隨機選擇一個server 在index上隨機,選擇index對應位置的server。
在設定檔application.yml加入
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
stores: ribbon: listOfServers: www.baidu.com,www.jalja.org,www.163.org #随机 NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
在SpringCloudRibbonApplication.java 中加入
@Beanpublic IRule ribbonRule() {return new RandomRule();//这里配置策略,和配置文件对应}
執行6次的結果:
http://www.baidu.com:80http://www.baidu.com:80http://www.baidu.com:80http://www.163.org:80http://www.baidu.com:80http://www.jalja.org:80
3、BestAvailableRule(並發量) public class BestAvailableRule extends ClientConfigEnabledRoundRobinRule 選擇一個最小的並發請求的server 逐一檢視Server,如果Server被tripped了,則忽略,在選擇其中ActiveRequestsCount最小的server
在設定檔application.yml加入
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.BestAvailableRule
#在SpringCloudRibbonApplication.java 中加入
@Beanpublic IRule ribbonRule() {return new BestAvailableRule();//这里配置策略,和配置文件对应}
執行6次的結果:
http://www.baidu.com:80http://www.baidu.com:80http://www.baidu.com:80http://www.baidu.com:80http://www.baidu.com:80http://www.baidu.com:80
4、AvailabilityFilteringRule(伺服器狀態) public class AvailabilityFilteringRule extends PredicateBasedRule 過濾掉那些因為一直連接失敗的被標記為circuit tripped的後端server,並過濾掉那些高掉那些因為一直連接失敗的被標記為circuit tripped的後端server,並過濾掉那些高掉那些因為一直連接失敗的被標記為circuit tripped的後端server,並過濾掉那些高掉那些因為一直連接失敗的被標記為circuit tripped的後端server,並過濾掉那些高掉那些因為一直連線失敗的被標記為circuit tripped的後端server並發的後端server(active connections 超過設定的閾值) 使用一個AvailabilityPredicate來包含過濾server的邏輯,其實就是檢查status裡記錄的各個server的運作狀態
#
5、WeightedResponseTimeRule(根據回應時間) public class WeightedResponseTimeRule extends RoundRobinRule 根據回應時間分配一個weight,對應時間越長,weight性越低。 一個後台線程定期的從status裡面讀取評價回應時間,為每個server計算一個weight。 Weight的計算也比較簡單responsetime 減去每個server自己平均的responsetime是server的權重。當剛開始運行,沒有形成statas時,使用roubine策略選擇server。
6、RetryRule(根據策略+重試) public class RetryRule extends AbstractLoadBalancerRule 對選定的負載平衡策略機上重試機制。 在一個配置時間段內當選擇server不成功,則一直嘗試使用subRule的方式選擇一個可用的server
7、ZoneAvoidanceRule(Zone狀態+服務狀態) public class ZoneAvoidanceRule extends PredicateBasedRule 複合判斷server所在區域的效能和server的可用性選擇server 使用ZoneAvoidancePredicate和AvailabilityPredicate來判斷是否選擇某個server,前一個判斷判定一個zone的運作效能是否可用,剔除不可用的。 ),AvailabilityPredicate用來過濾掉連接數過多的Server。
4、5、6、7這些策略使用方式與上述方式相同這裡不在示範
以上是spring cloud 之 客戶端負載平衡 Ribbon的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題
![VMware Horizon Client無法開啟[已修復]](https://img.php.cn/upload/article/000/887/227/170835607042441.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
VMwareHorizon用戶端可協助您便利地存取虛擬桌面。然而,有時虛擬桌面基礎架構可能會遇到啟動問題。本文將討論當VMwareHorizon客戶端未能成功啟動時,您可以採取的解決方法。為什麼我的VMwareHorizon客戶端無法開啟?在設定VDI時,如果未開啟VMWareHorizon客戶端,可能會發生錯誤。請確認您的IT管理員提供了正確的URL和憑證。如果一切正常,請按照本指南中提到的解決方案解決問題。修復未開啟的VMWareHorizon用戶端如果您的Windows電腦上未開啟VMW
![VMware Horizon客戶端在連線時凍結或停滯[修復]](https://img.php.cn/upload/article/000/887/227/170942987315391.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
在使用VMWareHorizon用戶端連線到VDI時,我們可能會遇到應用程式在驗證過程中凍結或連線阻塞的情況。本文將探討這個問題,並提供解決這種情況的方法。當VMWareHorizon用戶端出現凍結或連線問題時,您可以採取一些措施來解決這個問題。修復VMWareHorizon用戶端在連接時凍結或卡住如果VMWareHorizon客戶端在Windows11/10上凍結或無法連接,請執行下面提到的解決方案:檢查網路連接重新啟動Horizon用戶端檢查Horizon伺服器狀態清除客戶端緩存修復Ho

2023年,AI技術已成為熱門話題,對各行業產生了巨大影響,程式設計領域尤其如此。人們越來越認識到AI技術的重要性,Spring社群也不例外。隨著GenAI(GeneralArtificialIntelligence)技術的不斷進步,簡化具備AI功能的應用程式的創建變得至關重要和迫切。在這個背景下,"SpringAI"應運而生,旨在簡化開發AI功能應用程式的過程,使其變得簡單直觀,避免不必要的複雜性。透過"SpringAI",開發者可以更輕鬆地建立具備AI功能的應用程序,將其變得更加易於使用和操作

Spring+AI作為行業領導者,透過其強大、靈活的API和先進的功能,為各種行業提供了領先性的解決方案。在本專題中,我們將深入探討Spring+AI在各領域的應用範例,每個案例都將展示Spring+AI如何滿足特定需求,實現目標,並將這些LESSONSLEARNED擴展到更廣泛的應用。希望這個專題能對你有所啟發,更深入地理解和利用Spring+AI的無限可能。 Spring框架在軟體開發領域已經有超過20年的歷史,自SpringBoot1.0版本發布以來已有10年。現在,無人會質疑,Spring

spring編程式事務的實作方式:1、使用TransactionTemplate;2、使用TransactionCallback和TransactionCallbackWithoutResult;3、使用Transactional註解;4、使用TransactionTemplate和@Transactional結合使用;5、自訂事務管理器。

保持Web伺服器負載平衡是預防停機的關鍵措施之一。使用負載平衡器是一種可靠的方法,其中HAProxy是一個備受推崇的選擇。使用HAProxy,您可以精確設定負載平衡方式,同時支援SSL直通,進而確保客戶端與伺服器之間的通訊安全。首先探討在HAProxy中實現SSL直通的重要性,隨後詳細討論了實施此功能所需的步驟,並提供了一個範例以便更好理解。什麼是SSL通過?為什麼它很重要?作為負載平衡器,HAProxy接受並指派流向您Web伺服器的負載,在已設定的伺服器上進行分發。負載的分配是針對客戶端設備和

MQTT(MessageQueuingTelemetryTransport)是一種輕量級的訊息傳輸協議,通常用於物聯網設備之間的通訊。 PHP是一種常用的伺服器端程式語言,可以用來開發MQTT客戶端。本文將介紹如何使用PHP開發MQTT客戶端,並包含以下內容:MQTT協定的基本概念PHPMQTT客戶端程式庫的選取和使用實例:使用PHPMQTT客戶端發布和

許多朋友下載檔案會先在網頁上瀏覽,然後轉入客戶端下載。但有時使用者會遇到百度網盤網頁無法啟動客戶端的問題。針對這個問題,小編為大家準備了百度網盤網頁無法啟動客戶端的解決辦法,有需要的小夥伴可以參考一下哦。 解決方法 1、可能百度網盤不是最新版,手動打開百度網盤客戶端,點擊右上角的設定按鈕,再點擊版本升級。 如無更新,則會有以下提示,若有更新,請依照提示進行更新。 2、可能禁用了百度網盤的檢測服務程序 有可能使我們自己手動或使用安全軟體自動禁用了百度網盤的檢測服務程序。 請查看一下
