原文鏈接:Java Chassis 3技術(shù)解密:負(fù)載均衡選擇器-云社區(qū)-華為云
Java Chassis 3技術(shù)解密:負(fù)載均衡選擇器
負(fù)載均衡用于管理微服務(wù)實(shí)例之間的訪問策略。它負(fù)責(zé)在每次請(qǐng)求中高效選擇目標(biāo)實(shí)例,并保持請(qǐng)求在多個(gè)目標(biāo)實(shí)例中均衡。目標(biāo)實(shí)例選擇過程可以使用下面的示例圖簡單展示:
AZ親和是常見的選擇器之一。它根據(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 使用了樹型結(jié)構(gòu)的職責(zé)鏈,它的工作過程如下:
- 將實(shí)例預(yù)分組。
- 通過樹型結(jié)構(gòu)索引,快速找到目標(biāo)實(shí)例集合。
- 當(dāng)某個(gè)樹節(jié)點(diǎn)為空的場景,可以返回上層選擇器,重新查找。
能夠快速檢索到實(shí)例的場景:
出現(xiàn)實(shí)例為空的的場景:
相對(duì)于線性的職責(zé)鏈模式,樹型職責(zé)鏈模式存在兩方面明顯的優(yōu)勢(shì):
- 計(jì)算復(fù)雜度從 O(N) 降低為 O(1)。 當(dāng)實(shí)例規(guī)模很大,比如超過1000的時(shí)候,該算法能夠極大的降低CPU使用率,減少垃圾回收的數(shù)量。
- 能夠解決上層選擇器的結(jié)果在下層選擇器的結(jié)果為空的問題。比如在AZ親和場景,如果本AZ的實(shí)例不滿足后續(xù)選擇器的條件,那么使用非本AZ的實(shí)例,能夠確保本次訪問的正確性,降低錯(cuò)誤率,也能夠更好的滿足請(qǐng)求均衡的要求。
客戶故事:在某個(gè)客戶的實(shí)際場景中,如果實(shí)例數(shù)超過1000,負(fù)載均衡的CPU消耗占到整個(gè)請(qǐng)求處理時(shí)間的20%以上,隨著應(yīng)用規(guī)模的變大,負(fù)載均衡處理算法的性能優(yōu)化變得更加重要了。文章來源:http://www.zghlxwxcb.cn/news/detail-792209.html
更多華為云技術(shù)干貨請(qǐng)關(guān)注:華為云PaaS服務(wù)小智的博客_云社區(qū)-華為云?文章來源地址http://www.zghlxwxcb.cn/news/detail-792209.html
到了這里,關(guān)于Java Chassis 3技術(shù)解密:負(fù)載均衡選擇器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!