中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

企業(yè)員工管理信息系統(tǒng)上海企業(yè)優(yōu)化

企業(yè)員工管理信息系統(tǒng),上海企業(yè)優(yōu)化,給公司做網(wǎng)站 優(yōu)幫云,網(wǎng)絡(luò)營銷方案成功案例Sentinel服務(wù)熔斷和流控 簡介 Sentinel ? 隨著微服務(wù)的流行,服務(wù)和服務(wù)之間的穩(wěn)定性變得越來越重要。Sentinel 是面向分布式服務(wù)架構(gòu)的流量控制組件,主要以流量為切入點(diǎn),從限流、流量整形、熔斷降級、系統(tǒng)負(fù)載保護(hù)、熱點(diǎn)防護(hù)等多個(gè)維度來…

Sentinel服務(wù)熔斷和流控

簡介

Sentinel

? 隨著微服務(wù)的流行,服務(wù)和服務(wù)之間的穩(wěn)定性變得越來越重要。Sentinel 是面向分布式服務(wù)架構(gòu)的流量控制組件,主要以流量為切入點(diǎn),從限流、流量整形、熔斷降級、系統(tǒng)負(fù)載保護(hù)、熱點(diǎn)防護(hù)等多個(gè)維度來幫助開發(fā)者保障微服務(wù)的穩(wěn)定性。
源碼地址:https://github.com/alibaba/Sentinel
官方文檔:https://github.com/alibaba/Sentinel/wiki

https://sentinelguard.io/zh-cn/docs/circuit-breaking.html

Spring Cloud Alibaba Sentinel 同時(shí)兼具了熔斷器和流控的功能。
在這里插入圖片描述

Sentinel具有以下特征:

  • 豐富的應(yīng)用場景: Sentinel 承接了阿里巴巴近 10 年的雙十一大促流量的核心場景,例如秒殺(即突發(fā)流量控
    制在系統(tǒng)容量可以承受的范圍)、消息削峰填谷、實(shí)時(shí)熔斷下游不可用應(yīng)用等。

  • 完備的實(shí)時(shí)監(jiān)控: Sentinel 同時(shí)提供實(shí)時(shí)的監(jiān)控功能。您可以在控制臺中看到接入應(yīng)用的單臺機(jī)器秒級數(shù)據(jù),甚至 500 臺以下規(guī)模的集群的匯總運(yùn)行情況。

  • 廣泛的開源生態(tài): Sentinel 提供開箱即用的與其它開源框架/庫的整合模塊,例如與 Spring Cloud、Dubbo、
    gRPC 的整合。您只需要引入相應(yīng)的依賴并進(jìn)行簡單的配置即可快速地接入 Sentinel。

  • 完善的 SPI 擴(kuò)展點(diǎn): Sentinel 提供簡單易用、完善的 SPI 擴(kuò)展點(diǎn)。您可以通過實(shí)現(xiàn)擴(kuò)展點(diǎn),快速的定制邏輯。例如定制規(guī)則管理、適配數(shù)據(jù)源等。

    Spring的spi是通過ClassLoader去META-INF/spring.factories加載class,然后反射實(shí)例化返回。像SpringBoot用這種方式去加載一些自動配置類,即引入xx-starter就能夠自動向spring容器中注入許多配置好的組件。

阿里云提供了 企業(yè)級的 Sentinel 服務(wù),應(yīng)用高可用服務(wù) AHAS

image-20221118153102243

Sentinel和Hystrix對比

https://github.com/alibaba/Sentinel/wiki/Sentinel-%E4%B8%8E-Hystrix-%E7%9A%84%E5%AF%B9%E6%AF%94

SentinelHystrix
隔離策略信號量隔離線程池隔離/信號量隔離
熔斷降級策略基于響應(yīng)時(shí)間或失敗比率基于失敗比率
實(shí)時(shí)指標(biāo)實(shí)現(xiàn)滑動窗口滑動窗口(基于 RxJava)
規(guī)則配置支持多種數(shù)據(jù)源支持多種數(shù)據(jù)源
擴(kuò)展性多個(gè)擴(kuò)展點(diǎn)插件的形式
基于注解的支持支持支持
限流基于 QPS,支持基于調(diào)用關(guān)系的限流有限的支持
流量整形支持慢啟動、勻速器模式不支持
系統(tǒng)負(fù)載保護(hù)支持不支持
控制臺開箱即用,可配置規(guī)則、查看秒級監(jiān)控、機(jī)器發(fā)現(xiàn)等不完善
常見框架的適配Servlet、Spring Cloud、Dubbo、gRPC 等Servlet、Spring Cloud Netflix

熔斷

微服務(wù)架構(gòu)的系統(tǒng)通常會包含多個(gè)微服務(wù),各個(gè)微服務(wù)可能部署在不同的機(jī)器上并通過網(wǎng)絡(luò)進(jìn)行通信,那么就不可避免會遇到 “網(wǎng)絡(luò)請求超時(shí)” 、“微服務(wù)不可用” 等問題,這就會進(jìn)一步引起依賴它的微服務(wù)不可用,這樣不斷引發(fā)服務(wù)故障的現(xiàn)象稱為『雪崩效應(yīng)』,最終的結(jié)果是整個(gè)應(yīng)用系統(tǒng)癱瘓。

為了解決上述問題,編程領(lǐng)域(參考現(xiàn)實(shí)生活)提出了熔斷器
使用熔斷器模式,如果請求出現(xiàn)異常,所有請求都會直接返回,而不會等待或阻塞,這樣可以減少資源的浪費(fèi)。
熔斷器所造成的這種現(xiàn)象也叫『快速失敗(fast fall)』。

流控

限流功能指的是 Sentinel(類似于過濾器、攔截器的效果)在收到請求后,拒絕請求的放行(至 Controller),而是直接返回,從而減少對 Controller,乃至 Service 的觸發(fā)執(zhí)行。

熔斷和限流的區(qū)別在于,熔斷是確確實(shí)實(shí)發(fā)生了錯(cuò)誤,而限流是人為(根據(jù)設(shè)置)強(qiáng)行讓一部分請求被打回。

在這里插入圖片描述

sentinel安裝

sentinel-dashboard 的下載安裝

sentinel-dashboard 是基于 Spring Boot 開發(fā)的控制臺。打包后可以直接運(yùn)行,不需要額外的 Tomcat 等應(yīng)用容器。Sentinel 控制臺不僅能展示服務(wù)流控、熔斷降級相關(guān)的數(shù)據(jù),還可以通過配置的方式動態(tài)的為 Sentinel 客戶端下發(fā)流量控制的指令

我們需要下載并安裝的是 sentinel-dashBoard ,下載地址:https://github.com/alibaba/Sentinel/releases

注意:啟動 sentinel-dashboard 需要 JDK 版本為 1.8 及以上版本。

使用如下命令啟動控制臺:

java -Dserver.port=8840 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.1.jar
  • -Dserver.port=8840

    用于指定 Sentinel 控制臺端口為 8840。默認(rèn)是 8080 。

  • -Dproject.name=sentinel-dashboard

    指定 Sentinel 控制臺程序的名稱。

說明

如果你有多張網(wǎng)卡的話,你還需要指定使用哪張網(wǎng)卡(IP)來接受各個(gè)微服務(wù)上報(bào)的信息:

-Dcsp.sentinel.heartbeat.client.ip=192.168.xxx.xxx

訪問網(wǎng)址:[http://127.0.0.1:8840]

從 1.6.0 起,sentinel-dashboard 引入基本的登錄功能,默認(rèn)用戶名和密碼都是 sentinel 。當(dāng)然也可以通過 JVM 參數(shù)的方式進(jìn)行修改

  • -Dsentinel.dashboard.auth.username=sentinel

    用于指定控制臺的登錄用戶名為 sentinel ;

  • -Dsentinel.dashboard.auth.password=123456

    用于指定控制臺的登錄密碼為 123456;如果省略這兩個(gè)參數(shù),默認(rèn)用戶和密碼均為 sentinel;

  • -Dserver.servlet.session.timeout=7200

    用于指定 Spring Boot 服務(wù)端 session 的過期時(shí)間,如 7200 表示 7200 秒;60m 表示 60 分鐘,默認(rèn)為 30 分鐘;

Sentinel 本身就是一個(gè) Spring Boot 應(yīng)用,所以jar 包內(nèi)部的 application.properties 文件也是可以修改配置的。

Sentinel實(shí)現(xiàn)限流

Spring Cloud Alibaba Sentinel 可以分別用在服務(wù)的 “請求發(fā)起方” 和 “請求被調(diào)方”

  • 請求發(fā)起方使用的是 OpenFeign ,因此這種情況下 Sentinel 是和 OpenFeign 進(jìn)行整合;
  • 請求被調(diào)用使用的是 Spring MVC,因此這種情況下 Sentinel 是和 Spring MVC 進(jìn)行整合

同時(shí)又由于 Sentinel 兼具熔斷和流控兩個(gè)功能,因此這里就有 4 種情況:

  • 在服務(wù)發(fā)起方項(xiàng)目中,整合 OpenFeign 進(jìn)行實(shí)現(xiàn)熔斷功能;
  • 在服務(wù)發(fā)起方項(xiàng)目中,整合 OpenFeign 進(jìn)行實(shí)現(xiàn)限流功能;
  • 在服務(wù)被調(diào)方項(xiàng)目中,整合 Spring MVC 進(jìn)行實(shí)現(xiàn)熔斷功能;
  • 在服務(wù)被調(diào)方項(xiàng)目中,整合 Spring MVC 進(jìn)行實(shí)現(xiàn)限流功能。

這樣以來功能上就出現(xiàn)了重疊冗余,因此在實(shí)際使用中我們是這樣安排的:

  • 在服務(wù)發(fā)起方,Sentinel 整合 OpenFeign 實(shí)現(xiàn)熔斷功能;
  • 在服務(wù)被調(diào)方,Sentinel 整合 Spring MVC 實(shí)現(xiàn)限流功能。

總結(jié):流控針對provider,熔斷降級針對consumer

sentinel實(shí)現(xiàn)限流

回顧前面筆記中的 “關(guān)于 Sentinel 的使用方式” 章節(jié),在這里,我們在服務(wù)的 “被調(diào)方” 使用 Sentinel 整合 Spring MVC 進(jìn)行流量控制。
在這里,Sentinel 借助 Spring MVC 框架的 “攔截器” 機(jī)制整合進(jìn)入 Spring MVC ,“搶先” 在 Controller 執(zhí)行之前進(jìn)行流控(和熔斷)的判斷,從而決定當(dāng)前請求是否被放行至 Controller

sentinel整合mvc

1.引入相關(guān)依賴

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!-- 其實(shí)真正起作用的是被關(guān)聯(lián)引入的 sentinel-spring-webmvc-adapter 包 -->

2.添加配置(連接到 sentinel-dashboard)

spring:cloud:sentinel:transport:dashboard: 127.0.0.1:8080port: 8719feign:sentinel:enabled: true

3.訪問 sentinel-dashboard

只需要完成上述的配置,代碼不需要有任何的調(diào)整,我們就可以通過實(shí)時(shí)監(jiān)控查看服務(wù)內(nèi)的流量 QPS(每秒查詢率) 以及平均響應(yīng)時(shí)長等信息。

只有服務(wù)接口被訪問的情況下,在 sentinel 里面才可以看到監(jiān)控信息。這可能會讓你『等』一段時(shí)間。

image-20220426203243709

相關(guān)概念

  • 上下文( Context )和 context-name

Context 代表調(diào)用鏈路上下文。是一個(gè)根節(jié)點(diǎn),在整個(gè)調(diào)用鏈路的開始處,Sentinel 會創(chuàng)建上下文 Context 對象,并且為它指定一個(gè) name ,相當(dāng)于根資源。在 Sentinel 中,不同的調(diào)用鏈路可能使用同一個(gè)上下文 Context 對象(共一個(gè)根節(jié)點(diǎn))。在這里( 和 Spring MVC 整合 ),我們的調(diào)用鏈路都是在 sentinel_spring_web_context 中:

image-20220426173808330

  • 資源(Resource)和 resource-name

在 Sentinel 中,對于每一份資源,Sentinel 會為賦予一個(gè) name(或者你手動指定),和 Spring MVC 整合時(shí),Sentinel 使用的是 URI 來作為 Controller 方法的資源名( 在這里,Controller 方法就是資源 )

image-20220426175835311

流控規(guī)則

在菜單左側(cè)的 簇點(diǎn)鏈路和流控規(guī)則都可以針對 服務(wù)接口添加流控規(guī)則:

當(dāng)我們的服務(wù)接口資源被訪問的時(shí)候,就會出現(xiàn)在 簇點(diǎn)鏈路 列表中,我們可以針對該服務(wù)接口資源配置流程控制規(guī)則

image-20220426191147532

說明:

  • 資源名:表示我們針對哪個(gè)接口資源進(jìn)行流控規(guī)則配置,如:/test2/{id}

  • 針對來源:表示針對哪一個(gè)服務(wù)訪問當(dāng)前接口資源的時(shí)候進(jìn)行限流,default 表示不區(qū)分訪問來源。如填寫服務(wù)名稱:xxx-service,表示 xxx-service 訪問前接口資源的時(shí)候進(jìn)行限流,其他服務(wù)訪問該接口資源的時(shí)候不限流,一般就是默認(rèn)為default即可。

  • 閾值類型/單機(jī)閾值:QPS,每秒鐘請求數(shù)量。上圖配置表示每秒鐘超過2次請求的時(shí)候進(jìn)行限流;當(dāng)然我們可以設(shè)置線程數(shù),表示開啟 n 個(gè)線程處理資源請求,這個(gè)不是只每秒2個(gè)線程,對服務(wù)端 /test1請求,資源接口的 2 個(gè)線程都被占用的時(shí)候,其他訪問失敗!一般用的都是QPS

  • 是否集群:默認(rèn)情況下我們的限流策略都是針對單個(gè)服務(wù)的,當(dāng)然sentinel 提供了集群限流的功能。

    除非你的微服務(wù)規(guī)模特別大,一般不要使用集群模式。集群模式需要各節(jié)點(diǎn)與 token server 交互才可以,會增加網(wǎng)絡(luò)交互次數(shù),一定程度上會拖慢你的服務(wù)響應(yīng)時(shí)間。

上面的限流規(guī)則用一句話說:對于任何來源的請求,當(dāng)超過每秒 2 次的標(biāo)準(zhǔn)之后就直接限流,訪問失敗拋出 BlockException 異常!

流控規(guī)則高級選項(xiàng)

1.流控模式
  • 直接:當(dāng)前資源達(dá)到限流標(biāo)準(zhǔn)時(shí)就直接限流,默認(rèn)值
  • 關(guān)聯(lián):/important接口的重要程度要高于 /normal接口,如果,/important接口的訪問壓力很大,那么,可以『犧牲』掉 /normal` 接口,全力保證 /important 接口的正常運(yùn)行

例如:我們在resttemplate-a微服務(wù)中,創(chuàng)建兩個(gè)接口

@GetMapping("/query")
public String query(){return "ok:query";
}@GetMapping("/add")
public String add(){return "ok:add";
}

先訪問:http://localhost:9527/add和http://localhost:9527/query

image-20220426204140487

我們對/query接口進(jìn)行限流,這個(gè)配置的意思就是,當(dāng)每秒對/add接口的請求超過2次時(shí),就對/query接口進(jìn)行限流,要注意這樣是優(yōu)先保證/add不限流,犧牲的是/query接口。10s內(nèi)對/add接口超過20次請求,那么就對/query接口限流

測試:

image-20220426204812473

image-20220426204832333

image-20220426205021541

  • 鏈路

鏈路限流和關(guān)聯(lián)限流的思路很像,假設(shè)我們要去請求某個(gè)微服務(wù),該微服務(wù)有2個(gè)接口(/query和/add),而這兩個(gè)接口又調(diào)用了同一個(gè)service層的方法(如:doSomething()方法),那么,我們可以『站在 doSomething的方法』的角度上進(jìn)行設(shè)置:如果是 /query接口在調(diào)用service層的 doSomething方法,那么就進(jìn)行限流,而 /add接口的調(diào)用就不限流,或設(shè)置為更寬松一些的流控

1.配置設(shè)置:通過配置關(guān)閉 sentinel 的 URL 收斂功能

spring:application:name: resttemplate-acloud:nacos:discovery:server-addr: localhost:8848sentinel:transport:dashboard: localhost:8840web-context-unify: false  #默認(rèn)是開啟上下文整合,所有鏈路在根節(jié)點(diǎn)下,鏈路監(jiān)控就是將請求分開統(tǒng)計(jì)

2.代碼設(shè)計(jì)

controller層
@GetMapping("/query")
public String query(){return userService.doSomething();
}
@GetMapping("/add")
public String add(){return userService.doSomething();
}
//service層
@Component
public class UserService {@SentinelResource("doSomething")public String doSomething() {return "hello world";}
}

3.重新運(yùn)行,先在界面發(fā)送請求 http://localhost:9527/query和http://localhost:9527/add,然后sentinel配置

image-20220427143429362

鏈路配置:

image-20220427143517498

4.測試:在jmeter對/add測試時(shí)不限流(如10秒鐘對/add請求80次),但是同時(shí)在瀏覽器對/query測試時(shí),每秒只能是2次請求。

2.流控效果
  • 快速失敗:很簡單的說就是達(dá)到限流標(biāo)準(zhǔn)后,請求就被攔截,直接失敗。(HTTP狀態(tài)碼:429 too many request),默認(rèn)值
  • Warm up:預(yù)熱模式,也有叫冷啟動,主要是為系統(tǒng)啟動時(shí)設(shè)置預(yù)熱時(shí)間,底層有預(yù)熱因子是3,在系統(tǒng)剛啟動時(shí),使用的閾值不再是每秒多少個(gè)請求,而是設(shè)置的閾值除以預(yù)熱因子,在預(yù)熱的時(shí)間內(nèi),逐漸提升閾值,最后達(dá)到設(shè)置的閾值(也就是每秒多少個(gè)請求),好處是預(yù)防系統(tǒng)剛啟動時(shí),突發(fā)大量的請求,服務(wù)容易宕機(jī)。

1.代碼設(shè)計(jì)

@GetMapping("/test/{id}")
public ResponseEntity<String> test1(@PathVariable Integer id){return new ResponseEntity<>("ok", HttpStatus.OK);
}

2.配置設(shè)置

image-20220427145952767

在10秒內(nèi),每秒允許的請求數(shù)會逐漸增加,也就是每秒的閾值逐漸提高

3.測試

image-20220427150337329

  • 排隊(duì)等待:也叫流量整形,它讓請求以均勻的速度通過,單機(jī)閾值為每秒通過數(shù)量,其余的在隊(duì)列排隊(duì)等待一段時(shí)間,(即我們設(shè)置的時(shí)間,單位是毫秒),沒有超過這個(gè)時(shí)間都能被及時(shí)處理,如果超過了這個(gè)等待時(shí)間針對請求的接口沒有線程來處理,則拋出異常

image-20220427152215517

測試:每秒50個(gè)請求

image-20220427152404688

Sentinel 和 SpringMVC 整合原理

Sentinel 和 Spring MVC 的整合利用了 Spring MVC 的攔截器機(jī)制,Sentinel 實(shí)現(xiàn)了一個(gè)名為 SentinelWebInterceptor 的攔截器,其邏輯偽代碼如下

public SentinelWebInterceptor implements HandlerInterceptor {public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler){try {1. 初始化上下文;2. 熔斷、流控邏輯的判斷,判斷當(dāng)前請求是否能繼續(xù)執(zhí)行;return true; // 此時(shí) Controller 方法會被調(diào)用。Controller 方法就是 3 。} catch (BlockException e) {4. 上述第 2 步未能通過,會拋出 BlockException ,表示請求被拒絕return false;}}public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {} public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {if (發(fā)生了異常) {5. 業(yè)務(wù)異常。記錄、統(tǒng)計(jì)異常信息}6. 收尾工作:曾經(jīng)創(chuàng)建的資源該回收的回收,該清除的清除}

自定義限流異常信息返回

Sentinel 返回的默認(rèn)信息是 Blocked by Sentinel (flow limiting),如果你對默認(rèn)響應(yīng)信息不滿意,你可以自定義限流返回信息。

Sentinel 提供了 BlockExceptionHandler 接口。不管什么原因觸發(fā)了 Sentinel 阻斷用戶的正常請求,Sentinel 都將『進(jìn)入』到用戶自定義的 BlockExceptionHandler 接口的實(shí)現(xiàn)類中,執(zhí)行 handle 方法,并傳入當(dāng)前的請求、響應(yīng)對象以及異常對象,并以 handle 方法的執(zhí)行結(jié)果作為返回,回傳給用戶。

@Component
public class MyBlockExceptionHandler implements BlockExceptionHandler {@Overridepublic void handle(HttpServletRequest request, HttpServletResponse response, BlockException ex) throws Exception {String msg = null;if (ex instanceof FlowException) {msg = "該請求限流了,請稍后重試";} else if (ex instanceof DegradeException) {msg = "被熔斷了";} else {msg = "其它原因";// ParamFlowException   "熱點(diǎn)參數(shù)限流";// SystemBlockException "系統(tǒng)規(guī)則(負(fù)載/...不滿足要求)";// AuthorityException   "授權(quán)規(guī)則不通過";}// http 狀態(tài)碼response.setStatus(500);response.setCharacterEncoding("utf-8");response.setHeader("Content-Type", "application/json;charset=utf-8");response.setContentType("application/json;charset=utf-8");new ObjectMapper().writeValue(response.getWriter(), msg);}
}

需要說明的是:不僅僅是因?yàn)橄蘖骱腿蹟噙@一個(gè)原因會導(dǎo)致 BlockExceptionhandlerhandle 方法的執(zhí)行,還有其它的原因也會調(diào)用這個(gè)handler方法,因此,需要對 handle 方法的 BlockException 參數(shù)對象進(jìn)行 instanceof 判斷

sentinel服務(wù)熔斷降級

我們在服務(wù)的 “請求發(fā)起方” 使用 Sentinel 整合 OpenFeign 進(jìn)行熔斷降級

sentinel整合feign

1.添加依賴

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2.添加配置(連接到 sentinel-dashboard)

spring:cloud:sentinel:transport:dashboard: 127.0.0.1:8840
feign:sentinel:enabled: true   ##啟用 Sentinel 與 OpenFeign 整合適配器

3.代碼實(shí)現(xiàn)spring-service-a-feign微服務(wù),調(diào)用spring-service-b微服務(wù)

@FeignClient(value = "spring-service-b",qualifier = "feignclient",fallback = PermFeignClientImpl.class )
public interface PermFeignClient {@GetMapping("/perms/{id}")public Perms getPermsById(@PathVariable("id") Integer id);
}
=========降級代碼==============
@Component
public class PermFeignClientImpl implements PermFeignClient {@Overridepublic Perms getPermsById(Integer id) {Perms perms = new Perms();perms.setName("服務(wù)器忙,請稍后再試");return perms;}
}
===========controller=======================
@RestController
public class PermController {@Autowired @Qualifier("feignclient")private PermFeignClient permFeignClient;@GetMapping("/perm")public Perms getPermsById(Integer id) {Perms perms = permFeignClient.getPermsById(id);return perms;}
}

spring-service-b微服務(wù)

@GetMapping("/perms/{id}")
public Perms getPermsById(@PathVariable("id") Integer id) {if(id==1){try {Thread.sleep(800);   //當(dāng)id為1時(shí),800毫秒才有相應(yīng)}catch (Exception ex){ }}if(id==2){throw new RuntimeException();}return permService.getPermsById(id);
}

4.熔斷規(guī)則

在 sentinel-dashboard 上你可以看到有 降級規(guī)則,它指的就是『設(shè)置當(dāng)滿足什么條件時(shí),對服務(wù)進(jìn)行降級

image-20220427175029755

慢調(diào)用比例

如下配置:在一秒內(nèi),發(fā)5次請求,如果每次請求的響應(yīng)時(shí)間超過500毫秒,這種比例達(dá)到0.5(50%),就進(jìn)行熔斷,熔斷時(shí)長就是10秒。如:1秒內(nèi)有5次請求,其中有3次請求響應(yīng)時(shí)間超過了500毫秒,那么這個(gè)比例就是60%,大于50%,此時(shí)就熔斷,然后降級。

image-20220427175159277

用jmeter測試,程序中當(dāng)id=1時(shí),每次響應(yīng)都是800毫秒。所以每次的請求都大于500毫秒,失敗率100%,這個(gè)時(shí)候去請求id=4的資源也是無法請求的,因?yàn)槿蹟嗔?#xff0c;所以也是直接降級。10s后再次請求id=4的就正常了。

異常數(shù)

如下配置:一秒內(nèi)發(fā)送5次請求,如果有3次失敗(異常),則直接熔斷,然后降級

image-20220427175948916

測試:localhost:9527/perm?id=2,結(jié)果5次都失敗了,此時(shí)熔斷時(shí)長是9秒,在這9秒內(nèi),如果去請求id=4的依然是降級,9s之后試著去發(fā)送id=4的請求,如果通過則進(jìn)入閉合正常狀態(tài)。

異常比例

如下配置:1秒鐘發(fā)送5次請求,如果調(diào)用接口最終失敗的比例超過了20%,則熔斷9s。

image-20220427180730668

#配置
spring:cloud:sentinel:eager: true #取消Sentinel控制臺懶加載

blockhandler fallback,blockhandler 優(yōu)先級高

    }catch (Exception ex){ }
}
if(id==2){throw new RuntimeException();
}
return permService.getPermsById(id);

}

4.熔斷規(guī)則在 sentinel-dashboard 上你可以看到有 降級規(guī)則,它指的就是『**設(shè)置當(dāng)滿足什么條件時(shí),對服務(wù)進(jìn)行降級**』[外鏈圖片轉(zhuǎn)存中...(img-QwfGPW1A-1694490781354)]#### 慢調(diào)用比例如下配置:在一秒內(nèi),發(fā)5次請求,如果每次請求的響應(yīng)時(shí)間超過500毫秒,這種比例達(dá)到0.5(50%),就進(jìn)行熔斷,熔斷時(shí)長就是10秒。如:1秒內(nèi)有5次請求,其中有3次請求響應(yīng)時(shí)間超過了500毫秒,那么這個(gè)比例就是60%,大于50%,此時(shí)就熔斷,然后降級。[外鏈圖片轉(zhuǎn)存中...(img-d74m5bKk-1694490781357)] 用jmeter測試,程序中當(dāng)id=1時(shí),每次響應(yīng)都是800毫秒。所以每次的請求都大于500毫秒,失敗率100%,這個(gè)時(shí)候去請求id=4的資源也是無法請求的,因?yàn)槿蹟嗔?#xff0c;所以也是直接降級。10s后再次請求id=4的就正常了。#### 異常數(shù)如下配置:一秒內(nèi)發(fā)送5次請求,如果有3次失敗(異常),則直接熔斷,然后降級[外鏈圖片轉(zhuǎn)存中...(img-URgCSfH7-1694490781358)] 測試:localhost:9527/perm?id=2,結(jié)果5次都失敗了,此時(shí)熔斷時(shí)長是9秒,在這9秒內(nèi),如果去請求id=4的依然是降級,9s之后試著去發(fā)送id=4的請求,如果通過則進(jìn)入閉合正常狀態(tài)。#### 異常比例如下配置:1秒鐘發(fā)送5次請求,如果調(diào)用接口最終失敗的比例超過了20%,則熔斷9s。[外鏈圖片轉(zhuǎn)存中...(img-bYCdjt00-1694490781358)] ```yaml
#配置
spring:cloud:sentinel:eager: true #取消Sentinel控制臺懶加載
```blockhandler   fallback,blockhandler   優(yōu)先級高
http://www.risenshineclean.com/news/56516.html

相關(guān)文章:

  • 外貿(mào)建網(wǎng)站免費(fèi)模板東莞搜索seo網(wǎng)站關(guān)鍵詞優(yōu)化
  • 電子商務(wù)網(wǎng)站開發(fā)教案nba實(shí)力榜最新排名
  • 杭州網(wǎng)站設(shè)計(jì)渠道百度網(wǎng)盤怎么找片
  • 如何做企業(yè)網(wǎng)站方法seo還有用嗎
  • 做seo要明白網(wǎng)站內(nèi)知識搜索引擎
  • 可以生成靜態(tài)網(wǎng)站源碼汕頭seo推廣
  • 有什么正規(guī)的網(wǎng)站做代加工百度問答庫
  • 東莞市營銷網(wǎng)站建設(shè)單頁關(guān)鍵詞優(yōu)化費(fèi)用
  • 廣東品牌網(wǎng)站建設(shè)平臺深圳關(guān)鍵詞優(yōu)化平臺
  • 關(guān)鍵詞做網(wǎng)站標(biāo)題是什么意思網(wǎng)址導(dǎo)航大全
  • 現(xiàn)在的網(wǎng)站設(shè)計(jì)山東濟(jì)南seo整站優(yōu)化公司
  • 無憂網(wǎng)站源碼國外seo工具
  • 商城網(wǎng)站做推廣有什么好處seo名詞解釋
  • dreamweaver做網(wǎng)站學(xué)習(xí)解析seo站內(nèi)優(yōu)化包括
  • 襄陽教育云平臺網(wǎng)站建設(shè)2022世界足球排行榜
  • 網(wǎng)站關(guān)鍵詞快速排名軟件網(wǎng)絡(luò)運(yùn)營師
  • 怎么做自己的彩票網(wǎng)站現(xiàn)在有哪些網(wǎng)址
  • 網(wǎng)站空間免費(fèi) 優(yōu)幫云站長工具seo綜合查詢怎么關(guān)閉
  • python做網(wǎng)站入門武漢網(wǎng)站制作推廣
  • wordpress篩選插件seo優(yōu)化操作
  • 網(wǎng)站建設(shè)屬開票核定稅種奉化首頁的關(guān)鍵詞優(yōu)化
  • 網(wǎng)站建設(shè)師hao123主頁
  • 網(wǎng)站如何做域名解析廣州競價(jià)托管代運(yùn)營
  • 做婚紗網(wǎng)站策劃方案線上營銷策劃方案
  • 企業(yè)移動網(wǎng)站品牌seo廠家電話
  • 網(wǎng)站建設(shè)三要素寧波seo教學(xué)
  • 中衛(wèi)網(wǎng)站建設(shè)報(bào)價(jià)網(wǎng)址收錄入口
  • 綏化網(wǎng)站建設(shè)站長工具關(guān)鍵詞挖掘
  • 深圳品牌設(shè)計(jì)公司的發(fā)展怎么制作seo搜索優(yōu)化
  • 南昌net網(wǎng)站開發(fā)深圳門戶網(wǎng)站