- 工信部備案號 滇ICP備05000110號-1
- 滇公安備案 滇53010302000111
- 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證 B1.B2-20181647、滇B1.B2-20190004
- 云南互聯(lián)網(wǎng)協(xié)會(huì )理事單位
- 安全聯(lián)盟認證網(wǎng)站身份V標記
- 域名注冊服務(wù)機構許可:滇D3-20230001
- 代理域名注冊服務(wù)機構:新網(wǎng)數碼
一、服務(wù)降級的目的
為什么服務(wù)降級?
當對業(yè)務(wù)的請求超過(guò)業(yè)務(wù)系統預設的上限閾值時(shí),為了保證基本和重要的業(yè)務(wù)模塊正常運行,
1.拒絕部分請求
2.不重要的業(yè)務(wù)模塊暫停服務(wù)或延遲提供服務(wù)。
二、服務(wù)降級的實(shí)現手段
服務(wù)降級的手段有兩大類(lèi):
第一類(lèi)是關(guān)閉部分非核心服務(wù)。例如雙12當天,京東暫時(shí)關(guān)閉退貨服務(wù)。
第二類(lèi)是拒絕部分請求。這里面又分成三個(gè)手段
(1)根據RPC隊列方式,把舊的請求丟棄。我們還是想想雙12買(mǎi)東西。在業(yè)務(wù)邏輯層pendding的舊的請求,或許客戶(hù)端已經(jīng)取消了,因此要舍棄請求,一定先舍棄最久的。但這種方式有個(gè)問(wèn)題,舊的請求可能是核心請求,新的可能是非核心請求的。
(2)根據請求報文CMD的優(yōu)先級。在CMD列表的請求保留,不在列表中的CMD舍棄。
實(shí)際應用中,需要前兩種相結合,即(1)決定什么時(shí)候開(kāi)啟、關(guān)閉丟棄 (2)決定丟棄誰(shuí)
(3)隨機拒絕方式:這種不靠譜,實(shí)際環(huán)境沒(méi)人用。
三、服務(wù)降級的設計
我們將服務(wù)降級設置在什么位置?網(wǎng)關(guān)還是全鏈路?
1.在網(wǎng)關(guān)層做服務(wù)降級:
這樣做不靠譜的地方是,因為一個(gè)網(wǎng)關(guān)后面可能有多個(gè)業(yè)務(wù)邏輯層。
2.全鏈路降級。也就是使用上上個(gè)圖中兩種方法結合的方式。讓網(wǎng)關(guān)、業(yè)務(wù)邏輯層、數據訪(fǎng)問(wèn)層都有降級的機制。每一層能處理多少請求自己說(shuō)了算。
和方案1比,方案2更靠譜。
那么,有一個(gè)小疑問(wèn),在方案2中,DB層是否需要做降級?
在上圖的模型中,讀同步寫(xiě)異步。讀的時(shí)候,DAO層已經(jīng)做了限流,就不用在DB層限流。在寫(xiě)請求時(shí),會(huì )先寫(xiě)到MQ,所以只要是MQ沒(méi)有超限,DB就不會(huì )出現問(wèn)題。
四、熔斷的實(shí)現
熔斷的實(shí)現有兩種方式:組件級、平臺級:
1.組件級解決方案
Neflix的Hystrix熔斷組件是個(gè)jar包。Hystrix的熔斷機制是API顆粒度的。如下圖所示:
前面說(shuō)過(guò),Hystrix是組件級的熔斷,好處是使用的時(shí)候,直接引入Jar包就可以。壞處是,任何要做熔斷的微服務(wù),它的上上游都需要引入jar,而且Hystrix限制哪個(gè)API,是需要硬編碼的。
2.平臺級解決方案
如果上下游調用是RPC。我們能否把熔斷的功能寫(xiě)入到RPC Client。這樣上游引入RPC Client客戶(hù)端就可以,而不需要引入單獨的jar包。此外,哪些API需要熔斷,最好寫(xiě)在配置中心。
如下圖所示,我們在dashboard寫(xiě)入要限制API的名稱(chēng)以及參數,然后通過(guò)服務(wù)管理平臺將配置規則推送給網(wǎng)關(guān)。網(wǎng)關(guān)上的RPC Client(RPC Over TCP)可以解析這些配置,并其下游的業(yè)務(wù)邏輯層對應的API進(jìn)行熔斷。
服務(wù)管理平臺的本質(zhì)如下圖所示,即服務(wù)數據平臺是控制面板。
服務(wù)治理平臺實(shí)現熔斷的邏輯圖,圖示比較清楚,不再贅述:
在構建服務(wù)治理平臺時(shí),可以參照現在市面上新型的熔斷器框架,例如Resilience4j,會(huì )有服務(wù)器模式和嵌入模式。前者會(huì )有一個(gè)獨立的 Resilience4j server,后者還是引入jar包。前者性能會(huì )好不少。
售前咨詢(xún)
售后咨詢(xún)
備案咨詢(xún)
二維碼
TOP