Spring-Cloud Alibaba的组件Sentinel的基础使用

Sentinel

Sentinel翻译过来就是哨兵,从字面上理解就是国家如果出现了任何的状况,他会第一时间出现,把危险拦在外面。 阿里巴巴的Sentinel组件就是分布式系统的哨兵,它从流量控制、熔断降级、负载保护等多个方面对系统进行保护。  

Sentinel和Hystrix的对比 

 可以看到Sentinel的功能更加完善,它的最大特点是有一套Web控制台界面,方便监控和配置各种限流规则,而且Hystrix早已停止更新了,显然Sentinel是它的最佳替代者。

Sentinel的安装

1、到Sentinel官网下载jar包,这里使用的版本是1.8.0 Releases · alibaba/Sentinel · GitHub

2、运行Sentinel的前提是安装了Java环境,Windows系统中打开cmd命令行,切换到jar包所在目录,输入:

java -jar sentinel-dashboard-1.8.0.jar

3、可以看到Sentinel的启动日志

 4、在浏览器输入 http://localhost:8080 就可以看到控制台界面,账号密码默认都是sentinel。

5、登录之后为空

 使用Sentinel

1、给服务导入依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

2、配置配置文件

spring.cloud.sentinel.transport.dashboard=127.0.0.1:8080   #sentinel 控制台的地址
spring.cloud.sentinel.transport.port=8719  #sentinel的端口

3、编写测试的控制层

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello(){
        return "hello sentinel!!";
    }
}

4、启动服务,把服务注册到nacos上,再启动sentinel控制台。在浏览器上输入:http://localhost:8001/hello

然后我们会发现Sentinel的控制台,出来东西了,这就表示我们成功启动了Sentinel,并且用它监控了我们服务的接口调用情况。

 流控问题

1、资源名 这个比较好理解,就是api接口的名称了。

2、阈值类型

(1)QPS (Query Per Seconds)每秒的请求数,1秒内对资源的请求次数,超过阈值后就启动限流。

(2)线程数 这个就是对资源访问的线程数,超过阈值就启动限流。

3、单机阈值 这个就是根据上面选择的类型,设置的最大值了。

流控模式

打开流控的高级选项,可以看到流控模式和流控效果两个选项。

直接

默认的流控模式是直接,流控效果是快速失败。如果看过上篇文章就比较好理解,直接就是直接访问上面的资源,快速失败就是效果是访问失败直接出现限流的文字。

 关联

我们再看看关联是什么,微服务的系统资源一般都有关联关系,比如: 订单接口会调用支付接口,如果支付接口出现流量激增的情况,会导致调用订单接口出现问题,这时我们除了直接对支付接口限流外,也可以对订单接口限流。

链路

上下级的层次关系

流控效果 

快速失败

快速失败是默认效果,既当QPS超过任意规则的阈值后,新的请求就会被立即拒绝,拒绝方式为抛出FlowException。

warm up

即预热/冷启动方式。当系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。通过"冷启动",让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免冷系统被压垮。 比如:在春节抢热点地区火车票的时候,如果直接把流量放进来,可能会一下直接把12306的服务器打死,那么我们可以设定一个预热时间,给服务器一个缓冲期,慢慢的把流量放进来,直到达到最大的阈值。

修改一下前面的流控规则,这里阈值是10,预热时间是5秒,前面讲过流量是逐步加到阈值上限的,那么就有一个初始的阈值: 初始阈值 = 阈值上限 / coldFactor, coldFactor 是冷加载因子,默认为3,则初始阈值为 10 / 3 = 3 下面配置的效果就是:一开始限流的阈值是3,然后5秒后上升到10.

排队等待

排队等待方式会严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法。也比较好理解,就是不管流量再多,进来访问资源时都必须排队,一个个的访问。 这种方式主要用于处理间隔性突发的流量,例如消息队列。想象一下这样的场景,在某一秒有大量的请求到来,而接下来的几秒则处于空闲状态,我们希望系统能够在接下来的空闲期间逐渐处理这些请求,而不是在第一秒直接拒绝多余的请求。

@SentinelResource

Sentinel提供了@SentinelResource来处理限流、熔断降级 注解的配置基于AOP实现,需要添加Aspect配置。

限流处理

blockHandler属性指定限流处理的方法名,默认情况下该方法必须定义在当前类中,而且参数和返回值和原方法一致,可以多定义一个BlockException参数代表限流异常。如果不希望处理方法和原方法耦合在一起,可以单独定义处理类,处理方法必须是静态的。然后@SentinelResource加上属性。

熔断降级

通过fallback属性指定降级方法,降级方法必须在同一个类中,返回值和参数和原方法一致,添加一个降级规则,选择异常数,异常数、熔断时长、请求数都设置为1。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值