偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

實戰(zhàn):這個手寫的網(wǎng)關(guān)已集成2大緩沖處理器+4大注冊中心+8種過濾器+14種負載均衡策略,嘎嘎強!!

開發(fā) 后端
本節(jié),主要實戰(zhàn)的形式通過自定義SPI加載的各種負載均衡策略訪問后端服務(wù),對典型的正常和異常場景都進行了驗證,結(jié)果都符合預(yù)期效果。

沉淀,成長,突破,幫助他人,成就自我。

  • 本節(jié)難度:★★★☆☆
  • 本節(jié)重點:實戰(zhàn)通過自定義SPI加載的各種負載均衡策略訪問后端服務(wù),深入理解高性能Polaris網(wǎng)關(guān)負載均衡策略的核心設(shè)計與實現(xiàn)。重點掌握整體調(diào)用鏈路的設(shè)計思路和設(shè)計方法,并能夠?qū)⑵潇`活應(yīng)用到自身實際項目中。

截止到目前,我們自己手寫的高性能Polaris網(wǎng)關(guān)已經(jīng)實現(xiàn)了最基礎(chǔ)與最核心的功能。

主要包括:需求設(shè)計、總體架構(gòu)設(shè)計、環(huán)境搭建、通用模型設(shè)計與實現(xiàn)、基于自定義SPI設(shè)計與實現(xiàn)通用過濾器、高性能BatchEvent模式與MPMC模式緩沖隊列通用處理器的設(shè)計與實現(xiàn)、HTTP核心處理器的設(shè)計與實現(xiàn)和網(wǎng)關(guān)核心啟動容器的設(shè)計與實現(xiàn),同時,也對注冊中心、負載均衡策略和增強型負載均衡策略進行了設(shè)計與實現(xiàn)。

期間,也設(shè)計和實現(xiàn)了眾多的網(wǎng)關(guān)組件。那如何檢驗我們自己手搓的高性能網(wǎng)關(guān)的各種負載均衡策略是否滿足需求呢?最好的方式就是網(wǎng)關(guān)通過自定義SPI加載各種負載均衡策略訪問后端服務(wù)的接口驗證下網(wǎng)關(guān)的功能是否符合我們的預(yù)期。

一、背景

截止到目前,我們完成了《高性能Polaris網(wǎng)關(guān)》的十二大篇章的設(shè)計與實現(xiàn),也對代碼進行了深度的設(shè)計與封裝實現(xiàn),代碼結(jié)構(gòu)如下圖所示。

圖片圖片

在需求設(shè)計篇章: 詳細設(shè)計了高性能Polaris網(wǎng)關(guān)的需求,對網(wǎng)關(guān)要實現(xiàn)的功能和性能進行了明確的定義和設(shè)計。

在總體架構(gòu)設(shè)計篇章: 詳細設(shè)計了網(wǎng)關(guān)的總體方案目標、架構(gòu)設(shè)計和網(wǎng)關(guān)的數(shù)據(jù)模型。

在環(huán)境搭建篇章: 詳細搭建了網(wǎng)關(guān)的基礎(chǔ)環(huán)境與研發(fā)環(huán)境、搭建了項目總體框架與工程結(jié)構(gòu)并詳細搭建了Maven私服倉庫用來開發(fā)高性能Polaris網(wǎng)關(guān)。

在通用模型設(shè)計篇章: 完成了整個通用模型的設(shè)計,為整個Polaris網(wǎng)關(guān)后續(xù)的設(shè)計和研發(fā)奠定了堅實的基礎(chǔ)。相信小伙伴們對網(wǎng)關(guān)已經(jīng)并不陌生,一個網(wǎng)關(guān)本質(zhì)上最基礎(chǔ)和最核心的功能就是接收客戶端請求,根據(jù)一定的策略將請求轉(zhuǎn)發(fā)至后端服務(wù),隨后接收后端服務(wù)的響應(yīng)結(jié)果,再將結(jié)果響應(yīng)給客戶端。在此基礎(chǔ)上,網(wǎng)關(guān)可以實現(xiàn)各種策略功能,例如:限流、熔斷、降級、重試、負載均衡、流控、灰度、藍綠發(fā)布等等一系列的功能。

在通用過濾器設(shè)計篇章: 對網(wǎng)關(guān)的頂級核心過濾器接口進行了設(shè)計和實現(xiàn),也進一步封裝了請求和響應(yīng)的模型,對網(wǎng)關(guān)過濾器的兩大頂級抽象類和整體過濾器鏈進行了設(shè)計和實現(xiàn)。基于自定義SPI實現(xiàn)了負載均衡過濾器、超時配置過濾器、HTTP過濾器、RPC過濾器、指標分析過濾器、Mock過濾器、灰度過濾器、錯誤處理過濾器。

注意:網(wǎng)關(guān)通過SPI內(nèi)置了各種過濾器的實現(xiàn),如果網(wǎng)關(guān)內(nèi)置的過濾器不滿足需求,大家也可以通過SPI擴展自己特定場景的過濾器。

在通用處理器篇章: 在網(wǎng)關(guān)的處理器設(shè)計中,我們重點設(shè)計和實現(xiàn)了通用處理器接口,基于Netty實現(xiàn)了核心處理器的功能,并且基于BatchEvent和MPMC兩種模式實現(xiàn)了緩沖隊列。在此基礎(chǔ)上,基于自定義SPI擴展實現(xiàn)了BatchEvent模式處理器和MPMC模式處理器。在實現(xiàn)緩沖隊列時,重點參考了JDK的隊列實現(xiàn),并且在JDK隊列實現(xiàn)的基礎(chǔ)上,做了進一步優(yōu)化。所以,各位小伙伴們在學(xué)習(xí)自定義緩沖隊列時,可以結(jié)合JDK的Queue接口及其實現(xiàn)類等深入學(xué)習(xí)和理解。

在HTTP處理器篇章: 對HTTP處理器的核心接口、服務(wù)端核心處理器與連接管理器進行了設(shè)計與實現(xiàn),并且基于Netty對網(wǎng)關(guān)的服務(wù)端和客戶端進行了設(shè)計與實現(xiàn)。其他服務(wù)或者客戶端可以通過HTTP協(xié)議、RPC協(xié)議和WebSocket協(xié)議訪問網(wǎng)關(guān)。

在核心啟動流程篇章: 對網(wǎng)關(guān)的核心啟動容器與核心啟動加載流程進行了設(shè)計與實現(xiàn)。

在牛刀小試篇章: 實戰(zhàn)通過高性能Polaris網(wǎng)關(guān)成功訪問后端服務(wù)。

在注冊中心篇章: 基于自定義SPI實現(xiàn)了Nacos注冊中心、Zookeeper注冊中心,并且為了提升小伙們對網(wǎng)關(guān)項目的參與感,搭建代碼框架交由小伙伴們實現(xiàn)Etcd注冊中心和Consul注冊中心。同時,對網(wǎng)關(guān)整合注冊中心實現(xiàn)服務(wù)注冊與發(fā)現(xiàn)進行了詳細的設(shè)計與實現(xiàn)。

在負載均衡篇章:  基于自定義SPI實現(xiàn)了隨機算法、加權(quán)隨機算法、輪詢算法、加權(quán)輪詢算法、哈希算法、加權(quán)哈希算法、源IP地址哈希算法、加權(quán)源IP地址哈希算法、一致性哈希算法等多種負載均衡策略。

在增強型負載均衡篇章: 基于自定義SPI實現(xiàn)了增強型隨機算法、增強型輪詢算法、增強型哈希算法、增強型源IP地址哈希算法和增強型一致性哈希算法等多種負載均衡策略。

二、本節(jié)重點

整合負載均衡策略實戰(zhàn)訪問后端服務(wù),深入理解高性能Polaris網(wǎng)關(guān)負載均衡策略的核心設(shè)計與實現(xiàn)。重點掌握整體調(diào)用鏈路的設(shè)計思路和設(shè)計方法,并能夠?qū)⑵潇`活應(yīng)用到自身實際項目中。

三、實戰(zhàn)場景

本節(jié),主要驗證通過自定義SPI加載各種負載均衡策略實現(xiàn)訪問后端服務(wù)接口。

  • 基于自定義SPI加載輪詢算法負載均衡策略實現(xiàn)訪問后端服務(wù)接口。
  • 只啟動后端服務(wù),直接訪問后端服務(wù)接口,正確返回hello polaris。
  • 啟動網(wǎng)關(guān)和后端服務(wù),通過網(wǎng)關(guān)訪問后端服務(wù)接口,正確返回hello polaris。
  • 停止后端服務(wù),通過網(wǎng)關(guān)訪問后端服務(wù)接口,返回503:后端服務(wù)暫時不可用,請稍后再試。

四、服務(wù)規(guī)劃

實戰(zhàn)通過高性能Polaris網(wǎng)關(guān)訪問后端服務(wù)的規(guī)劃如下所示。

服務(wù)名

服務(wù)說明

端口

接口

polaris-examples-http

后端服務(wù)

8080

/http_test

polaris-examples-http-gateway

網(wǎng)關(guān)服務(wù)

10000

訪問polaris-examples-http的接口用來測試

五、路由實現(xiàn)

這里,需要修改下負載均衡路由的代碼,在負載均衡路由中通過自定義SPI加載各種負載均衡策略,實現(xiàn)通過負載均衡的方式訪問后端服務(wù)。

源碼詳見:polaris-filter-pre-loadbalancer工程下的io.binghe.polaris.filter.pre.loadbalancer.LoadBalancerFilter。

(1)新增serviceLoadBalancerMap成員變量

serviceLoadBalancerMap主要用來緩存通過自定義SPI加載的負載均衡實例,如下所示。

private final Map<String, ServiceLoadBalancer<ServiceInstance>> serviceLoadBalancerMap = new ConcurrentHashMap<>();

(2)修改executeHttpLoadBalance()方法

executeHttpLoadBalance()方法主要是通過負載均衡的方式訪問后端HTTP接口的方法,修改后的方法如下所示。

private void executeHttpLoadBalance(RequestResponseContext requestResponseContext, String balanceType) {
   HttpPolarisRequest request = requestResponseContext.getRequest();
   String uniqueId = request.getUniqueId();
   Set<ServiceInstance> serviceInstances = ConfigCacheFactory.getInstance().getServiceInstanceByUniqueId(uniqueId, requestResponseContext.isGray());
   requestResponseContext.putAttribute(AttributeKeyFactory.getMatchInstances(), serviceInstances);

   ServiceLoadBalancer<ServiceInstance> serviceLoadBalancer = serviceLoadBalancerMap.get(balanceType);
   if (serviceLoadBalancer == null){
    serviceLoadBalancer = serviceLoadBalancerMap.computeIfAbsent(balanceType, (t) -> ExtensionLoader.getExtension(ServiceLoadBalancer.class, balanceType));
 }
   ServiceInstance serviceInstance = serviceLoadBalancer.select(new ArrayList<>(serviceInstances), request.hashCode(), request.getClientIp());
   String targetAddress = serviceInstance.getAddress().concat(":").concat(String.valueOf(serviceInstance.getPort()));
   requestResponseContext.getMudifyRequest().setRequestHost(targetAddress);
}

可以看到,在executeHttpLoadBalance()方法中已經(jīng)實現(xiàn)了通過自定義SPI加載負載均衡策略,在服務(wù)實例列表中,通過負載均衡策略選擇其中一個服務(wù)實例。

六、測試場景驗證

接下來,對網(wǎng)關(guān)的測試場景進行驗證。

場景一: 基于自定義SPI加載輪詢算法負載均衡策略實現(xiàn)訪問后端服務(wù)接口。

分別啟動后端服務(wù)和網(wǎng)關(guān),在輪詢算法負載均衡策略的實現(xiàn)方法上打上斷點。也就在polaris-loadbalancer-round-robin工程的io.binghe.polaris.loadbalancer.round.robin.RobinServiceLoadBalancer#select方法打上斷點,如下所示。

圖片圖片

通過Apifox訪問http://localhost:10000/http_test,如下所示。

圖片圖片

點擊發(fā)生按鈕,可以看到訪問會正確進入代碼斷點,如下所示。

圖片

可以看到,已經(jīng)正確執(zhí)行到自定義SPI加載的輪詢負載均衡策略。

放過斷點,可以看到,正確返回了hello polaris。

圖片圖片

場景二: 只啟動后端服務(wù),直接訪問后端服務(wù)接口,正確返回hello polaris。

只啟動后端服務(wù)后,通過Apifox訪問http://localhost:8080/http_test,如下所示。

圖片圖片

測試結(jié)果符合預(yù)期,正確返回了hello polaris字符串。

場景三: 啟動網(wǎng)關(guān)和后端服務(wù),通過網(wǎng)關(guān)訪問后端服務(wù)接口,正確返回hello polaris。

啟動網(wǎng)關(guān)和后端服務(wù)后,通過Apifox訪問http://localhost:10000/http_test,如下所示。

圖片圖片

測試結(jié)果符合預(yù)期,正確返回了hello polaris字符串。

場景四: 停止后端服務(wù),通過網(wǎng)關(guān)訪問后端服務(wù)接口,返回503:后端服務(wù)暫時不可用,請稍后再試。

停止后端服務(wù)后,通過Apifox訪問http://localhost:10000/http_test,如下所示。

圖片圖片

測試結(jié)果符合預(yù)期,正確返回了503:后端服務(wù)暫時不可用,請稍后再試。

七、本節(jié)總結(jié)

本節(jié),主要實戰(zhàn)的形式通過自定義SPI加載的各種負載均衡策略訪問后端服務(wù),對典型的正常和異常場景都進行了驗證,結(jié)果都符合預(yù)期效果。

希望這節(jié)內(nèi)容能夠為大家?guī)韺嵸|(zhì)性的收獲,最后,可以在評論區(qū)寫下你學(xué)完本章節(jié)的收獲,祝大家都能學(xué)有所成,我們一起搞定高性能Polaris網(wǎng)關(guān)。


責(zé)任編輯:武曉燕 來源: 冰河技術(shù)
相關(guān)推薦

2023-07-06 10:15:38

布隆過濾器優(yōu)化

2018-11-16 10:39:02

Nginx負載均衡方案

2019-09-12 09:22:58

Nginx負載均衡服務(wù)器

2022-12-05 09:08:12

微服務(wù)灰度發(fā)布

2022-03-14 07:40:14

RibbonSpringNacos

2020-06-19 08:08:28

注冊過濾器方式

2023-02-14 08:32:41

Ribbon負載均衡

2024-12-06 14:34:00

Spring過濾器

2024-10-09 15:54:38

布隆過濾器函數(shù)

2019-11-25 10:02:29

CPU處理器架構(gòu)

2013-01-07 10:36:15

Haswell處理器插槽

2024-04-03 08:08:15

謂詞網(wǎng)關(guān)開發(fā)

2022-05-13 08:23:07

Zuul微服務(wù)Zuul過濾器

2023-09-06 13:58:01

負載均衡算法

2020-09-16 06:16:55

代碼編碼開發(fā)

2021-07-05 15:22:03

Servlet過濾器客戶端

2011-07-14 13:20:49

Servlet過濾器

2011-09-21 17:43:52

2024-01-05 09:04:35

隆過濾器數(shù)據(jù)結(jié)構(gòu)哈希函數(shù)

2010-05-04 14:06:15

Apache負載均衡
點贊
收藏

51CTO技術(shù)棧公眾號