日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 架構師社區(qū)
[導讀]前一篇文章介紹了SpringCloudGateway的一些基礎知識點,今天陳某就來嘮一嘮網(wǎng)關層面如何做限流?文章目錄如下:網(wǎng)關如何限流?SpringCloudGateway本身自帶的限流實現(xiàn),過濾器是RequestRateLimiterGatewayFilterFactory,不...

Spring?Cloud?Gateway?整合阿里?Sentinel網(wǎng)關限流實戰(zhàn)!

前一篇文章介紹了Spring Cloud Gateway的一些基礎知識點,今天陳某就來嘮一嘮網(wǎng)關層面如何做限流?

文章目錄如下:

Spring?Cloud?Gateway?整合阿里?Sentinel網(wǎng)關限流實戰(zhàn)!

網(wǎng)關如何限流?

Spring Cloud Gateway本身自帶的限流實現(xiàn),過濾器是RequestRateLimiterGatewayFilterFactory,不過這種上不了臺面的就不再介紹了,有興趣的可以實現(xiàn)下。

從1.6.0版本開始,Sentinel提供了SpringCloud Gateway的適配模塊,可以提供兩種資源維度的限流:

  • route維度:即在配置文件中配置的路由條目,資源名為對應的routeId,這種屬于粗粒度的限流,一般是對某個微服務進行限流。
  • 自定義API維度:用戶可以利用Sentinel提供的API來自定義一些API分組,這種屬于細粒度的限流,針對某一類的uri進行匹配限流,可以跨多個微服務。
sentinel官方文檔:https://github.com/alibaba/Sentinel/wiki/網(wǎng)關限流

Spring Cloud Gateway集成Sentinel實現(xiàn)很簡單,這就是阿里的魅力,提供簡單、易操作的工具,讓程序員專注于業(yè)務。

新建項目

新建一個gateway-sentinel9026模塊,添加如下依賴:


????<dependency>
??????<groupId>com.alibaba.cloudgroupId>
??????<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
????dependency>

????
????<dependency>
??????<groupId>org.springframework.cloudgroupId>
??????<artifactId>spring-cloud-starter-gatewayartifactId>
????dependency>

????
????<dependency>
??????<groupId>com.alibaba.cloudgroupId>
??????<artifactId>spring-cloud-alibaba-sentinel-gatewayartifactId>
????dependency>

????
????<dependency>
??????<groupId>com.alibaba.cloudgroupId>
??????<artifactId>spring-cloud-starter-alibaba-sentinelartifactId>
????dependency>
注意:這依然是一個網(wǎng)關服務,不要添加WEB的依賴

配置文件

配置文件中主要指定以下三種配置:

  • nacos的地址
  • sentinel控制臺的地址
  • 網(wǎng)關路由的配置
配置如下:

spring:
??cloud:
????##?整合sentinel,配置sentinel控制臺的地址
????sentinel:
??????transport:
????????##?指定控制臺的地址,默認端口8080
????????dashboard:?localhost:8080
????nacos:
??????##?注冊中心配置
??????discovery:
????????#?nacos的服務地址,nacos-server中IP地址:端口號
????????server-addr:?127.0.0.1:8848
????gateway:
??????##?路由
??????routes:
????????##?id只要唯一即可,名稱任意
????????-?id:?gateway-provider
??????????uri:?lb://gateway-provider
??????????##?配置斷言
??????????predicates:
????????????##?Path?Route?Predicate?Factory斷言,滿足/gateway/provider/**這個請求路徑的都會被路由到http://localhost:9024這個uri中
????????????-?Path=/gateway/provider/**
上述配置中設置了一個路由gateway-provider,只要請求路徑滿足/gateway/provider/**都會被路由到gateway-provider這個服務中。

限流配置

經(jīng)過上述兩個步驟其實已經(jīng)整合好了Sentinel,此時訪問一下接口:http://localhost:9026/gateway/provider/port

然后在sentinel控制臺可以看到已經(jīng)被監(jiān)控了,監(jiān)控的路由是gateway-provider,如下圖:

Spring?Cloud?Gateway?整合阿里?Sentinel網(wǎng)關限流實戰(zhàn)!
此時我們可以為其新增一個route維度的限流,如下圖:

Spring?Cloud?Gateway?整合阿里?Sentinel網(wǎng)關限流實戰(zhàn)!
上圖中對gateway-provider這個路由做出了限流,QPS閾值為1。

此時快速訪問:http://localhost:9026/gateway/provider/port,看到已經(jīng)被限流了,如下圖:

Spring?Cloud?Gateway?整合阿里?Sentinel網(wǎng)關限流實戰(zhàn)!
以上route維度的限流已經(jīng)配置成功,小伙伴可以自己照著上述步驟嘗試一下。

API分組限流也很簡單,首先需要定義一個分組,API管理-> 新增API分組,如下圖:

Spring?Cloud?Gateway?整合阿里?Sentinel網(wǎng)關限流實戰(zhàn)!
匹配模式選擇了精確匹配(還有前綴匹配,正則匹配),因此只有這個uri:http://xxxx/gateway/provider/port會被限流。

第二步需要對這個分組添加流控規(guī)則,流控規(guī)則->新增網(wǎng)關流控,如下圖:

Spring?Cloud?Gateway?整合阿里?Sentinel網(wǎng)關限流實戰(zhàn)!
API名稱那里選擇對應的分組即可,新增之后,限流規(guī)則就生效了。

陳某不再測試了,小伙伴自己動手測試一下吧...............

陳某這里只是簡單的配置一下,至于限流規(guī)則持久化一些內容請看陳某的Sentinel文章,這里就不再過多的介紹了。

如何自定義限流異常信息?

從上面的演示中可以看到默認的異常返回信息是:"Block.........",這種肯定是客戶端不能接受的,因此需要定制自己的異常返回信息。

下面介紹兩種不同的方式定制異常返回信息,開發(fā)中自己選擇其中一種。

直接配置文件中定制

開發(fā)者可以直接在配置文件中直接修改返回信息,配置如下:

spring:
??cloud:
????##?整合sentinel,配置sentinel控制臺的地址
????sentinel:
??????#配置限流之后,響應內容
??????scg:
????????fallback:
??????????##?兩種模式,一種是response返回文字提示信息,
??????????##?一種是redirect,重定向跳轉,需要同時配置redirect(跳轉的uri)
??????????mode:?response
??????????##?響應的狀態(tài)
??????????response-status:?200
??????????##?響應體
??????????response-body:?'{"code": 200,"message":?"請求失敗,稍后重試!"}'
上述配置中mode配置的是response,一旦被限流了,將會返回JSON串。

{
????"code":?200,
????"message":?"請求失敗,稍后重試!"
}
重定向的配置如下:

spring:
??cloud:
????##?整合sentinel,配置sentinel控制臺的地址
????sentinel:
??????#配置限流之后,響應內容
??????scg:
????????fallback:
??????????##?兩種模式,一種是response返回文字提示信息,一種是redirect,重定向跳轉,需要同時配置redirect(跳轉的uri)
??????????mode:?redirect
??????????##?跳轉的URL
??????????redirect:?http://www.baidu.com
一旦被限流,將會直接跳轉到:http://www.baidu.com

編碼定制

這種就不太靈活了,通過硬編碼的方式,完整代碼如下:

@Configuration
public?class?GatewayConfig?{
????/**
?????*?自定義限流處理器
?????*/

????@PostConstruct
????public?void?initBlockHandlers()?{
????????BlockRequestHandler?blockHandler?=?(serverWebExchange,?throwable)?->?{
????????????Map?map?=?new?HashMap();
????????????map.put("code",200);
????????????map.put("message","請求失敗,稍后重試!");
????????????return?ServerResponse.status(HttpStatus.OK)
????????????????????.contentType(MediaType.APPLICATION_JSON_UTF8)
????????????????????.body(BodyInserters.fromObject(map));
????????};
????????GatewayCallbackManager.setBlockHandler(blockHandler);
????}
}
兩種方式介紹完了,根據(jù)業(yè)務需求自己選擇適合的方式,當然陳某更喜歡第一種,理由:約定>配置>編碼。

網(wǎng)關限流了,服務就安全了嗎?

很多人認為只要網(wǎng)關層面做了限流,躲在身后的服務就可以高枕無憂了,你是不是也有這種想法?

很顯然這種想法是錯誤的,復雜的微服務架構一個獨立服務不僅僅被一方調用,往往是多方調用,如下圖:

Spring?Cloud?Gateway?整合阿里?Sentinel網(wǎng)關限流實戰(zhàn)!
商品服務不僅僅被網(wǎng)關層調用,還被內部訂單服務調用,這時候僅僅在網(wǎng)關層限流,那么商品服務還安全嗎?

一旦大量的請求訂單服務,比如大促秒殺,商品服務不做限流會被瞬間擊垮。

因此需要根據(jù)公司業(yè)務場景對自己負責的服務也要進行限流兜底,最常見的方案:網(wǎng)關層集群限流 內部服務的單機限流兜底,這樣才能保證不被流量沖垮。

總結

文章介紹了Spring Cloud Gateway整合Sentinel對網(wǎng)關層進行限流,以及關于限流的一些思考。如有錯誤之處,歡迎留言指正。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據(jù)LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉