Java?Chassis3負(fù)載均衡選擇器技術(shù)解密
Java Chassis 3技術(shù)解密:負(fù)載均衡選擇器
負(fù)載均衡用于管理微服務(wù)實(shí)例之間的訪問(wèn)策略。它負(fù)責(zé)在每次請(qǐng)求中高效選擇目標(biāo)實(shí)例,并保持請(qǐng)求在多個(gè)目標(biāo)實(shí)例中均衡。目標(biāo)實(shí)例選擇過(guò)程可以使用下面的示例圖簡(jiǎn)單展示:
AZ親和是常見(jiàn)的選擇器之一。它根據(jù)本實(shí)例的AZ信息和目標(biāo)實(shí)例的AZ信息,確定合適的目標(biāo)實(shí)例子集,實(shí)例子集與本實(shí)例具有相同的AZ信息。
負(fù)載均衡選擇器是一個(gè)典型的職責(zé)鏈模式。
Ribbon 的職責(zé)鏈
public interface ServerListFilter<T extends Server> { List<T> getFilteredListOfServers(List<T> servers); }
Spring Cloud Commons 的職責(zé)鏈
public abstract class DelegatingServiceInstanceListSupplier implements ServiceInstanceListSupplier, InitializingBean, DisposableBean { protected final ServiceInstanceListSupplier delegate; public DelegatingServiceInstanceListSupplier(ServiceInstanceListSupplier delegate) { this.delegate = delegate; } public ServiceInstanceListSupplier getDelegate() { return this.delegate; } }
Java Chassis 的職責(zé)鏈
public interface DiscoveryFilter extends Ordered { DiscoveryTreeNode discovery(DiscoveryContext context, DiscoveryTreeNode parent); }
Java Chassis 使用了樹(shù)型結(jié)構(gòu)的職責(zé)鏈,它的工作過(guò)程如下:
- 將實(shí)例預(yù)分組。
- 通過(guò)樹(shù)型結(jié)構(gòu)索引,快速找到目標(biāo)實(shí)例集合。
- 當(dāng)某個(gè)樹(shù)節(jié)點(diǎn)為空的場(chǎng)景,可以返回上層選擇器,重新查找。
能夠快速檢索到實(shí)例的場(chǎng)景:
出現(xiàn)實(shí)例為空的的場(chǎng)景:
樹(shù)型職責(zé)鏈模式優(yōu)勢(shì)
相對(duì)于線性的職責(zé)鏈模式,樹(shù)型職責(zé)鏈模式存在兩方面明顯的優(yōu)勢(shì):
- 計(jì)算復(fù)雜度從 O(N) 降低為 O(1)。 當(dāng)實(shí)例規(guī)模很大,比如超過(guò)1000的時(shí)候,該算法能夠極大的降低CPU使用率,減少垃圾回收的數(shù)量。
- 能夠解決上層選擇器的結(jié)果在下層選擇器的結(jié)果為空的問(wèn)題。比如在AZ親和場(chǎng)景,如果本AZ的實(shí)例不滿足后續(xù)選擇器的條件,那么使用非本AZ的實(shí)例,能夠確保本次訪問(wèn)的正確性,降低錯(cuò)誤率,也能夠更好的滿足請(qǐng)求均衡的要求。
客戶故事:在某個(gè)客戶的實(shí)際場(chǎng)景中,如果實(shí)例數(shù)超過(guò)1000,負(fù)載均衡的CPU消耗占到整個(gè)請(qǐng)求處理時(shí)間的20%以上,隨著應(yīng)用規(guī)模的變大,負(fù)載均衡處理算法的性能優(yōu)化變得更加重要了。
以上就是Java Chassis3負(fù)載均衡選擇器技術(shù)解密的詳細(xì)內(nèi)容,更多關(guān)于Java Chassis3負(fù)載均衡選擇器的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Spring Boot命令行啟動(dòng)添加參數(shù)的三種方式
在命令行中,常見(jiàn)的參數(shù)可以分為三類:選項(xiàng)參數(shù)、非選項(xiàng)參數(shù)和系統(tǒng)參數(shù),本文就來(lái)介紹一下Spring Boot命令行三種參數(shù)形式,感興趣的可以了解一下2023-09-09Java 處理圖片與base64 編碼的相互轉(zhuǎn)換的示例
本篇文章主要介紹了Java 處理圖片與base64 編碼的相互轉(zhuǎn)換的示例,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08基于Netty實(shí)現(xiàn)WebSocket的常用處理器及區(qū)別解析
文章介紹了Netty中的ChannelInboundHandlerAdapter和SimpleChannelInboundHandler處理器,以及WebSocket的幾種常見(jiàn)幀類型,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-02-02MyBatis學(xué)習(xí)教程(三)-MyBatis配置優(yōu)化
這篇文章主要介紹了MyBatis學(xué)習(xí)教程(三)-MyBatis配置優(yōu)化的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-05-05一文學(xué)會(huì)處理SpringBoot統(tǒng)一返回格式
這篇文章主要介紹了一文學(xué)會(huì)處理SpringBoot統(tǒng)一返回格式,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08maven實(shí)現(xiàn)jar包導(dǎo)入+導(dǎo)出方式
這篇文章主要介紹了maven實(shí)現(xiàn)jar包導(dǎo)入+導(dǎo)出方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07原生Java操作mysql數(shù)據(jù)庫(kù)過(guò)程解析
這篇文章主要介紹了原生Java操作mysql數(shù)據(jù)庫(kù)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11