美文网首页Java
Alibaba Sentinel 熔断

Alibaba Sentinel 熔断

作者: TZX_0710 | 来源:发表于2020-09-07 11:36 被阅读0次

何为熔断?

服务熔断的作用类似于我们家用的保险丝,当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,
暂时停止对该服务的调用。
  服务降级是从整个系统的负荷情况出发和考虑的,对某些负荷会比较高的情况,为了预防某些功能(业务场景)出现
负荷过载或者响应慢的情况,在其内部暂时舍弃对一些非核心的接口和数据的请求,而直接返回一个提前准备好的fallback
(退路)错误处理信息。这样,虽然提供的是一个有损的服务,但却保证了整个系统的稳定性和可用性。
SpringCloud中提供Hystirx服务熔断组件 SpringCloudAlibaba当中则采用Sentinel给服务加上限流熔断功能,防止异常情况拖垮应用服务。

熔断配置

Sentinel中的熔断降级有3个级别

  1. RT(平均响应时间)当资源的平均响应时间超过阈值之后,资源进入淮降级状态。接下来如果持续进入5个请求,它们的RT都持续超过这个阈值,那么接下来的时间窗口之内,对这个方法的调用会自动抛出DegradeException 异常。再下一个时间窗口到来时,会接着再放5个请求。
  2. 异常比例 当资源的每秒异常占总数的通过两比值超过阈值之后,资源进行降级状态,即在接下来的时间窗口之内,对这个方法的调用都会自动地抛出DegradeException异常。
  3. 异常数 当资源1分钟的异常数目超过阈值之后会进行熔断。

1.需要使用的server模块添加依赖

        <!--Sentinel-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

配置sentinel的服务端地址依赖

spring:
  application:
    name: server-provider
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.174.135:8848
    sentinel:
      transport:
        #sentinel服务端地址
        dashboard: 192.168.174.135:8849
        #取消延迟加载
      eager: true

在server-provider使用Sentinel进行测试

@RestController
    public class ConsumerController {
        @GetMapping("/hello")
        @SentinelResource(value = "getByCode")
        public String hello() {
            return "hello World";
        }
    }

打开sentinel界面查看


sentinel

可以查看到已经把服务注册到sentinel控制台当中去了,右边进行手动可以设置该接口的阈值,包括降级等。


流控

可以设置参数为2 然后快速请求接口 然后进行测试 查看效果


阈值测试
对于返回的注解我们可以采用自定义返回信息
@SentinelResource(value = "hello",blockHandler = "handlerException")


 @GetMapping("/hello")
        @SentinelResource(value = "hello", blockHandler = "handleException")
        public String hello() {
            return "hello World";
        }
        //自定义异常的返返回值和参数要跟目标方法一样
        public String handleException(BlockException exception) {
            return "达到阈值了,不要再访问了!";
        }
自定义返回参数

持久化

因为sentinel的注册信息都存放在内存当中,所以重启之后会丢失数据。可以使用nacos中心持久化数据

1. 引入配置pom依赖
 <!--引入nacos配置文件-->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>
2. 编写配置文件
spring:
  application:
    name: server-provider
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.174.135:8848
    sentinel:
      transport:
        #sentinel服务端地址
        dashboard: 192.168.174.135:8849
      eager: true
      datasource:
        ds:
          nacos:
            server-addr: 192.168.174.135:8848 #nacos的地址
            data-id: ${spring.application.name}-sentinel#nacos的data-id
            group-id: DEFAULT_GROUP#分组名称
            rule-type: flow
3. 在nacos中建立配置文件
nacos配置中心
nacos新增配置
配置熔断详情配置

resources:资源名称
limitapp:流控针对的调用来源 default不区分
grade:限流阈值的类型 0表示根据并发数量 1表示根据QPS来进行流量控制
count: 限流阈值
strategy:调用关系限流策略
controlBehavior:流量控制效果(直接拒绝、Warm Up、匀速排队)
clusterMode:是否为集群模式

相关文章

网友评论

    本文标题:Alibaba Sentinel 熔断

    本文链接:https://www.haomeiwen.com/subject/aswvsktx.html