本章主要内容
本章我们主要讲述如何使用Sentinel的熔断降级能力,包括熔断策略的设置、熔断后处理逻辑、以及在Sentinel控制台中观测熔断效果。
什么是熔断降级
首先我们需要认识到微服务架构的一大特点就是服务被拆分地非常细,所以一个可供前端使用的、完整的接口,调用经常会需要涉及到多个微服务,比如说一个获取订单详情的接口,开放给前端的就是单单一个接口,但是这个接口里面可能调用了订单数据、然后同时还调用了商品的接口、用户的接口,最后把数据聚合后返回给前端。
假设其中有某个接口突然坏掉了,比如说因为各种原因(比如缓存失效,数据库崩溃等)导致响应时间过长,那么所有需要调用到此接口的其他服务将全部“卡死”在这儿了,随之而来的就是整个系统逐渐把所有网络连接挂起,服务器连接数暴增,最后系统崩溃了,通常这种情况叫做雪崩。
而熔断降级就是解决此类问题的,它可以以响应时间、异常比例或次数等多个纬度来定制熔断规则,即达到设定的条件后,马上把该服务熔断,让其他调用者马上知道这个服务暂时不可用,并执行自己的应对措施,从而保证系统的整体稳定可用。因为这样子的整体稳定是一种“降级”的稳定,所以我们一般把它称为熔断降级。
在SpringCloud中使用Sentinel的熔断功能
我们在之前章节中已经熟悉了SpringCloud GateWay中使用Sentinel流控功能,由于目前的版本Sentinel并没有为网关去实现熔断功能,所以在本章中我主要是在每个微服务中去使用熔断。
首先,在工程中添加 由 SpringCloud 集成的 Sentinel
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
完整pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.zjf.csdn</groupId>
<artifactId>combat-provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<description>zjf微服务实战</description>
<name>combat-provider</name>
<url>https://blog.csdn.net/u011177064</url>
<properties>
<!-- Dependency Versions -->
<spring.boot.version>2.1.0.RELEASE</spring.boot.version>
<spring.cloud.version>Greenwich.SR2</spring.cloud.version>
<spring.cloud.alibaba.version>2.1.0.RELEASE</spring.cloud.alibaba.version>
</properties>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</d