熔斷降級
當(dāng)分布式系統(tǒng)中的網(wǎng)關(guān)接收到大量請求并向后端遠(yuǎn)程系統(tǒng)或服務(wù)發(fā)起調(diào)用時,后端服務(wù)可能會產(chǎn)生調(diào)用失?。ㄈ绯瑫r或異常)。這時,如果讓請求繼續(xù)堆積在網(wǎng)關(guān)上,可能會導(dǎo)致整個系統(tǒng)的癱瘓。因此,需要快速失敗并返回請求,這就是所謂的熔斷。
降級是指在系統(tǒng)資源不足或者異常流量過大的情況下,通過限制部分功能或服務(wù)的使用,保證系統(tǒng)核心功能的正常運行
熔斷降級可以看作是一種保護(hù)機(jī)制,當(dāng)后端服務(wù)出現(xiàn)問題時,網(wǎng)關(guān)能夠及時切斷請求,避免問題在系統(tǒng)中擴(kuò)散,同時提供降級服務(wù),以盡可能減少對用戶的影響。
Spring Cloud GateWay實現(xiàn)熔斷降級
在Spring Cloud Gateway中,可以通過配置Hystrix GatewayFilter來實現(xiàn)熔斷降級。Hystrix是一個用于處理分布式系統(tǒng)中延遲和故障的庫,它可以檢測遠(yuǎn)程服務(wù)的故障,并在服務(wù)不可用時自動觸發(fā)熔斷器,以保護(hù)系統(tǒng)不受影響。同時,Hystrix還允許定義降級策略,當(dāng)服務(wù)出現(xiàn)故障時,可以回退到備用邏輯或提供降級功能,以避免系統(tǒng)完全中斷。
Spring Cloud Gateway 集成Hystrix
1、添加Hystrix 依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
2、配置文件配置
server:
port: 8082
spring:
application:
name: gateway
redis:
host: localhost
port: 6379
password: 123456
cloud:
gateway:
routes:
- id: rateLimit_route
uri: http://localhost:8000
order: 0
predicates:
- Path=/test/**
filters:
# 指定使用HystrixGatewayFilterFactory生成filter
- name: Hystrix
args:
# 指定hystrix command的名稱
name: defaultfallback
# 配置降級轉(zhuǎn)發(fā)的接口,注意fallbackUri要以forward開頭
fallbackUri: forward:/defaultfallback
# 設(shè)置hystrix 隔離策略,下面是hystrix 信號量隔離,1.5秒后自動超時
hystrix:
command:
default:
execution:
isolation:
#隔離策略
strategy: SEMAPHORE
thread:
#超時時間,單位為毫秒
timeoutInMilliseconds: 3000
過濾器Hystrix,作用是通過Hystrix進(jìn)行熔斷降級
當(dāng)上游的請求,進(jìn)入了Hystrix熔斷降級機(jī)制時,就會調(diào)用fallbackUri配置的降級地址。需要注意的是,還需要單獨設(shè)置Hystrix的commandKey的超時時間
fallbackUri配置的網(wǎng)關(guān)降級地址接口的代碼如下,大家可以自定義自己的降級邏輯:
@RestController
public class FallbackController {
@GetMapping("/defaultfallback")
public Response defaultfallback() {
Response response = new Response();
response.setCode("100");
response.setMessage("服務(wù)暫時不可用");
return response;
}
}
我們要為fallbackUri編寫一個用于降級的controller方法,并在配置文件中配置
Hystrix資源隔離策略
Hystrix的隔離策略有兩種:分別是線程隔離和信號量隔離。
THREAD(線程隔離):線程隔離是Hystrix的默認(rèn)策略,它會為每個HystrixCommand命令分配一個獨立的線程池,每個命令都會在單獨的線程上執(zhí)行,互不干擾,并發(fā)請求受線程池中線程數(shù)量的限制。
線程池隔離下每個命令在獨立的線程中執(zhí)行,通過限制并發(fā)線程數(shù),可以保護(hù)應(yīng)用程序免受故障服務(wù)的慢速或錯誤響應(yīng)的影響。線程池隔離提供了更好的資源隔離和保護(hù),但也需要更多的資源開銷。
SEMAPHORE(信號量隔離):信號量隔離是一種基于計數(shù)器的隔離策略,使用該方式,HystrixCommand將會在調(diào)用線程上執(zhí)行,通過為每個hystrix命令分配一個獨立的計數(shù)器來控制并發(fā)訪問的數(shù)量。當(dāng)并發(fā)請求達(dá)到一定閾值時,超出的請求會被拒絕,并發(fā)請求受信號量的個數(shù)的限制。
SEMAPHORE模式下所有的命令在同一個線程中執(zhí)行,共享相同的線程池,通過限制并發(fā)訪問數(shù)來保護(hù)應(yīng)用程序。信號量隔離提供了更低的資源消耗,但是當(dāng)依賴服務(wù)發(fā)生故障時,可能會導(dǎo)致整個應(yīng)用程序的阻塞。文章來源:http://www.zghlxwxcb.cn/news/detail-782441.html
大家按照自己的需求選擇合適的隔離策略文章來源地址http://www.zghlxwxcb.cn/news/detail-782441.html
到了這里,關(guān)于Spring Cloud GateWay實現(xiàn)熔斷降級的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!