瓜田老梁:FA1# 微服务流控防护场景与应对措施
瓜田老梁
讀完需要
4
分鐘速讀僅需 2 分鐘
老梁,GitChat&CSDN 專欄《RocketMQ 實(shí)戰(zhàn)與進(jìn)階》聯(lián)合作者、參與了《RocketMQ 技術(shù)內(nèi)幕》審稿工作。
微服務(wù)成了互聯(lián)網(wǎng)架構(gòu)的標(biāo)配模式,對微服務(wù)之間的調(diào)用的流量治理和管控就尤為重要。哪些場景需要流量防控,針對這些場景又有哪些應(yīng)對措施。有沒有一個(gè)通用的措施來降低風(fēng)險(xiǎn)呢?這篇文章咱就聊聊這個(gè)。
1
? ?
服務(wù)被過載調(diào)用
應(yīng)對措施:針對服務(wù)提供方 D 配置流量防護(hù)規(guī)則,對進(jìn)入服務(wù) D 的流量進(jìn)行控制,從而對服務(wù) D 提供保護(hù)。觸發(fā)流控時(shí)可以有多重策略,例如:快速失敗、預(yù)熱模式、排隊(duì)等待、預(yù)熱模式+排隊(duì)等待。
快速失敗:發(fā)生流控時(shí)直接拋出異常。
預(yù)熱模式:發(fā)生流控時(shí),流量緩慢增加的一種模式,效果如下圖所示,流量 QPS 從 200 緩慢增加到 600。
排隊(duì)等待:請求勻速通過,過多請求需要排隊(duì),此時(shí)排隊(duì)有超時(shí)時(shí)間,超過排隊(duì)時(shí)間拋出流控異常。效果如下圖所示:請求 QPS 保持 1000 的勻速通過。
預(yù)熱模式+排隊(duì)等待:這種模式是預(yù)熱和排隊(duì)等待的疊加模式,請求以勻速的方式緩慢增加。如下圖:請求從 0 緩慢增加到 500,勻速通過一段時(shí)間后,再增加到 1000。
2
? ?
服務(wù)慢調(diào)用或故障
下面的場景 A 調(diào)用 B、A 調(diào)用 C、A 調(diào)用 D,當(dāng)服務(wù) B 服務(wù)不穩(wěn)定時(shí),服務(wù) A 調(diào)用服務(wù) B 發(fā)生了慢調(diào)用或者大量異常錯(cuò)誤。這種場景,如果不干預(yù),可能影響到 A 調(diào)用 C 和 A 調(diào)用 D 的狀況。
應(yīng)對措施:A 調(diào)用 B 配置熔斷降級規(guī)則,當(dāng)服務(wù) B 不穩(wěn)定發(fā)生慢調(diào)用或者異常時(shí),如果觸發(fā)閾值,將服務(wù) B 的調(diào)用熔斷;從而保護(hù)了服務(wù) A 調(diào)用 C、服務(wù) A 調(diào)用 D 的正常情況。
熔斷效果: 熔斷的實(shí)現(xiàn)通常通過斷路器實(shí)現(xiàn),具體過程為:
當(dāng)滿足慢調(diào)用比例、異常比例、異常數(shù)量閾值后,觸發(fā)熔斷(OPEN),在熔斷時(shí)長內(nèi)拒絕所有請求
當(dāng)熔斷過了定義的熔斷時(shí)長,狀態(tài)由熔斷(OPEN)變?yōu)樘綔y(HALF_OPEN)
接下來的一個(gè)請求不發(fā)生慢調(diào)用或者異常,熔斷結(jié)束由探測狀態(tài)(HALF_OPEN)變?yōu)?#xff08;CLOSED)
接下來的一個(gè)請求發(fā)生慢調(diào)用或者異常,繼續(xù)熔斷,由探測狀態(tài)(HALF_OPEN)變?yōu)?#xff08;OPEN)
3
? ?
服務(wù)資源被擠占
分布式鏈路中,如果某一條鏈路產(chǎn)生慢調(diào)用,對其他鏈路造成擠壓。除了上面提到配置熔斷降級外,可以通過線程并發(fā)控制來隔離。下圖中有 3 條鏈路,其中鏈路 1 由于服務(wù) E 的不穩(wěn)定,產(chǎn)生了慢調(diào)用。
| 鏈路1 | 服務(wù)A-->服務(wù)D#Method1-->服務(wù)E |
| 鏈路2 | 服務(wù)B-->服務(wù)D#Method2-->服務(wù)F |
| 鏈路3 | 服務(wù)C-->服務(wù)D#Method2-->服務(wù)G |
鏈路 1 慢調(diào)用可能導(dǎo)致如下情況:
鏈路 1 線程數(shù)增多對服務(wù) D 資源造成擠壓
對服務(wù) D 資源的過度擠壓,鏈路 2 和鏈路 3 造成不穩(wěn)定
極端情況導(dǎo)致整個(gè)服務(wù) D 不可用,嚴(yán)重時(shí)引發(fā)雪崩
應(yīng)對措施:通過對服務(wù) D 的 MethodA1、MethodA2 的線程數(shù)并發(fā)設(shè)置規(guī)則,超過閾值時(shí)將會觸發(fā)阻斷,不再向下游調(diào)用,避免不可用引發(fā)雪崩。
并發(fā)控制效果 :下圖中設(shè)置了調(diào)用方的并發(fā)線程數(shù)為 10,通過每分鐘的查詢可以看出,線程數(shù)一直保持在 10。
4
? ?
數(shù)據(jù)過熱擠占資源
熱點(diǎn)數(shù)據(jù),比如:大促時(shí)的熱銷產(chǎn)品、秒殺類產(chǎn)品等。如下圖所示,如果不對熱點(diǎn)商品下單流量進(jìn)行管控,可能對其他商品造成擠壓;影響整個(gè)商品下單體驗(yàn)。
應(yīng)對措施:通過對熱點(diǎn)參數(shù)測速,配置流控規(guī)則,超過閾值時(shí)觸發(fā)流控。例如:通過對入?yún)a(chǎn)品 ID 進(jìn)行測速,超過設(shè)置的閾值時(shí),觸發(fā)流控,避免對其過度擠占資源。
5
? ?
通用防護(hù)分組措施
上面的現(xiàn)象中,無論是服務(wù)不穩(wěn)定、還是被擠占、或者被過載調(diào)用。除了通過上述的防護(hù)措施外,可以對服務(wù)進(jìn)行等級劃分并分組。
如下圖所示:服務(wù) A 和服務(wù) D 為核心服務(wù)、服務(wù) B 和服務(wù) C 為非核心服務(wù)。通過將服務(wù) D 進(jìn)行分組,分成了 1 組和 2 組。分組 1 只允許核心服務(wù)調(diào)用,分組 2 只允許非核心服務(wù)調(diào)用。
這樣做的好處:將流量進(jìn)行物理隔離,避免由于非核心業(yè)務(wù)流量對核心業(yè)務(wù)流量造成擠壓、保護(hù)核心鏈路穩(wěn)定性。
分組措施@1 通常可以更換注冊中心路徑實(shí)現(xiàn),服務(wù) A 和服務(wù) D(分組 1)放在同一個(gè)注冊中心路徑(例如:soa-group1);服務(wù) B、服務(wù) C、服務(wù) D(分組 2)放在另一個(gè)不同的注冊中心路徑(例如:soa-group2)。
分組措施@2 通過對分組的服務(wù)節(jié)點(diǎn)打標(biāo)實(shí)現(xiàn),例如:服務(wù) D(分組 1)節(jié)點(diǎn)被打標(biāo)為 group1,服務(wù) D(分組 2)節(jié)點(diǎn)被打標(biāo)為 group2。在服務(wù)消費(fèi)方訂閱節(jié)點(diǎn)時(shí)根據(jù)不同的分組篩選節(jié)點(diǎn)調(diào)用。
EOF
往期推薦
深入分布式緩存之EVCache探秘開局篇(文末贈書)
螞蟻金服資深技術(shù)專家經(jīng)國:云原生時(shí)代微服務(wù)的高可用架構(gòu)設(shè)計(jì)
一文看懂高可用:異地多活
阿里高級技術(shù)專家至簡: Service Mesh 在超大規(guī)模場景下的落地挑戰(zhàn)
歐創(chuàng)新:深度解析DDD中臺和微服務(wù)設(shè)計(jì)
神一樣的CAP理論在微服務(wù)中是如何應(yīng)用的?
程序人家:你的老板逼你上微服務(wù)了嗎??
緩存,確實(shí)很香,卻也很受傷!
微博技術(shù)專家陳波:百億級訪問量的應(yīng)用如何做緩存架構(gòu)設(shè)計(jì)
天弘基金首席架構(gòu)師李鑫:微服務(wù)接口限流的算法及架構(gòu)實(shí)現(xiàn)
已火 2 年,Service Mesh究竟給微服務(wù)帶來了什么?
波波老師: 解決微服務(wù)的數(shù)據(jù)一致性分發(fā)問題?
為什么我不推薦你盲目追求微服務(wù)?遲早要吃虧!
DevOps是微服務(wù)的秘方
阿里高級技術(shù)專家邱小俠:微服務(wù)架構(gòu)的理論基礎(chǔ) - 康威定律
導(dǎo)致微服務(wù)失敗的 11 個(gè)原因
停!你不需要微服務(wù)
緩存穿透、緩存擊穿和緩存雪崩實(shí)踐(附源碼)
可能是全網(wǎng)最通俗易懂的微服務(wù)架構(gòu)改造解讀
想要加入中生代架構(gòu)群的小伙伴,請?zhí)砑尤汉匣锶?strong>大白的微信
申請備注(姓名+公司+技術(shù)方向)才能通過哦!
? ?END ? ?? #架構(gòu)師必備#點(diǎn)分享點(diǎn)點(diǎn)贊點(diǎn)在看總結(jié)
以上是生活随笔為你收集整理的瓜田老梁:FA1# 微服务流控防护场景与应对措施的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NYOJ 143 第几是谁?
- 下一篇: NYOJ 767 因子和