日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

微服务流控防护场景与应对措施

發(fā)布時間:2025/3/16 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微服务流控防护场景与应对措施 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

微服務成了互聯(lián)網(wǎng)架構的標配模式,對微服務之間的調用的流量治理和管控就尤為重要。哪些場景需要流量防控,針對這些場景又有哪些應對措施。有沒有一個通用的措施來降低風險呢?這篇文章咱就聊聊這個。

一、服務被過載調用

當服務D的某個接口服務被上游服務過載調用時,如果不對服務D加入保護,可能整體將服務D整體拖垮。在這種場景中,我們需要對服務D配置限流,以保護服務D不被整體沖跨。

應對措施: 針對服務提供方D配置流量防護規(guī)則,對進入服務D的流量進行控制,從而對服務D提供保護。觸發(fā)流控時可以有多重策略,例如:快速失敗、預熱模式、排隊等待、預熱模式+排隊等待。

快速失敗: 發(fā)生流控時直接拋出異常。

預熱模式: 發(fā)生流控時,流量緩慢增加的一種模式,效果如下圖所示,流量QPS從200緩慢增加到600。

排隊等待: 請求勻速通過,過多請求需要排隊,此時排隊有超時時間,超過排隊時間拋出流控異常。效果如下圖所示:請求QPS保持1000的勻速通過。

預熱模式+排隊等待: 這種模式是預熱和排隊等待的疊加模式,請求以勻速的方式緩慢增加。如下圖:請求從0緩慢增加到500,勻速通過一段時間后,再增加到1000。

二、服務慢調用或故障

下面的場景A調用B、A調用C、A調用D,當服務B服務不穩(wěn)定時,服務A調用服務B發(fā)生了慢調用或者大量異常錯誤。這種場景,如果不干預,可能影響到A調用C和A調用D的狀況。

應對措施: A調用B配置熔斷降級規(guī)則,當服務B不穩(wěn)定發(fā)生慢調用或者異常時,如果觸發(fā)閾值,將服務B的調用熔斷;從而保護了服務A調用C、服務A調用D的正常情況。

熔斷效果: 熔斷的實現(xiàn)通常通過斷路器實現(xiàn),具體過程為:

  • 當滿足慢調用比例、異常比例、異常數(shù)量閾值后,觸發(fā)熔斷(OPEN),在熔斷時長內拒絕所有請求

  • 當熔斷過了定義的熔斷時長,狀態(tài)由熔斷(OPEN)變?yōu)樘綔y(HALF_OPEN)

  • 接下來的一個請求不發(fā)生慢調用或者異常,熔斷結束由探測狀態(tài)(HALF_OPEN)變?yōu)?#xff08;CLOSED)

  • 接下來的一個請求發(fā)生慢調用或者異常,繼續(xù)熔斷,由探測狀態(tài)(HALF_OPEN)變?yōu)?#xff08;OPEN)

三、服務資源被擠占

分布式鏈路中,如果某一條鏈路產生慢調用,對其他鏈路造成擠壓。除了上面提到配置熔斷降級外,可以通過線程并發(fā)控制來隔離。

下圖中有3條鏈路,其中鏈路1由于服務E的不穩(wěn)定,產生了慢調用。

鏈路1慢調用可能導致如下情況:

  • 鏈路1線程數(shù)增多對服務D資源造成擠壓

  • 對服務D資源的過度擠壓,鏈路2和鏈路3造成不穩(wěn)定

  • 極端情況導致整個服務D不可用,嚴重時引發(fā)雪崩

應對措施: 通過對服務D的MethodA1、MethodA2的線程數(shù)并發(fā)設置規(guī)則,超過閾值時將會觸發(fā)阻斷,不再向下游調用,避免不可用引發(fā)雪崩。

并發(fā)控制效果 下圖中設置了調用方的并發(fā)線程數(shù)為10,通過每分鐘的查詢可以看出,線程數(shù)一直保持在10。


四、數(shù)據(jù)過熱擠占資源

熱點數(shù)據(jù),比如:大促時的熱銷產品、秒殺類產品等。如下圖所示,如果不對熱點商品下單流量進行管控,可能對其他商品造成擠壓;影響整個商品下單體驗。

應對措施: 通過對熱點參數(shù)測速,配置流控規(guī)則,超過閾值時觸發(fā)流控。例如:通過對入?yún)a品ID進行測速,超過設置的閾值時,觸發(fā)流控,避免對其過度擠占資源。

五、通用防護分組措施

上面的現(xiàn)象中,無論是服務不穩(wěn)定、還是被擠占、或者被過載調用。除了通過上述的防護措施外,可以對服務進行等級劃分并分組。

如下圖所示:服務A和服務D為核心服務、服務B和服務C為非核心服務。通過將服務D進行分組,分成了1組和2組。分組1只允許核心服務調用,分組2只允許非核心服務調用。

這樣做的好處:將流量進行物理隔離,避免由于非核心業(yè)務流量對核心業(yè)務流量造成擠壓、保護核心鏈路穩(wěn)定性。

分組措施@1 ?通??梢愿鼡Q注冊中心路徑實現(xiàn),服務A和服務D(分組1)放在同一個注冊中心路徑(例如:soa-group1);服務B、服務C、服務D(分組2)放在另一個不同的注冊中心路徑(例如:soa-group2)。

分組措施@2 通過對分組的服務節(jié)點打標實現(xiàn),例如:服務D(分組1)節(jié)點被打標為group1,服務D(分組2)節(jié)點被打標為group2。在服務消費方訂閱節(jié)點時根據(jù)不同的分組篩選節(jié)點調用。

有道無術,術可成;有術無道,止于術

歡迎大家關注Java之道公眾號

好文章,我在看??

總結

以上是生活随笔為你收集整理的微服务流控防护场景与应对措施的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。