深入浅出Spring Cloud整合Sentinel

为什么要用sentinel

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。
Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助您保障微服务的稳定性。

核心概念

资源
要保护的内容,可以是一个方法或者是一段代码

规则
流量控制、熔断降级等等。

Spring Cloud Alibaba Sentinel

alibaba Sentinel 介绍

sentinel控制台下载步骤

1 打开sentinel下载链接

sentinel下载链接

2 下载jar包

在这里插入图片描述

3 本地启动jar包

在这里插入图片描述
4 启动命令

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
java -Dserver.port=8748 -Dcsp.sentinel.dashboard.server=localhost:8748 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.2.jar

8080冲突则 换成其他任意端口即可 ,我采用的是 8748端口

5 访问本地sentinel dashboard

sentinel dashboard本地地址

6 界面图

在这里插入图片描述
账号密码默认都是 sentinel ,输入后登录。

7 登录后界面如图所示
sentinel控制台

SpringCloud模块操作步骤

1 pom引入依赖

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

2. application.yml配置文件

新增配置内容如下

spring:
  cloud:
    sentinel:
      transport:
        port: 18763
        dashboard: localhost:8748
#开启openfeign支持
feign:
  sentinel:
    enabled: true

spring.cloud.sentinel.transport.port 端口配置会在应用对应的机器上启动一个 Http Server,该 Server 会与 Sentinel 控制台做交互。比如 Sentinel 控制台添加了一个限流规则,会把规则数据 push 给这个 Http Server 接收,Http Server 再将规则注册到 Sentinel 中。

18763 端口如图所示
在这里插入图片描述
实时监控模块
接口的流量情况

新增流控规则
在这里插入图片描述

流控规则
在这里插入图片描述
流控效果图

快速访问设置流控规则的接口发现受限
在这里插入图片描述
Sentinel 控制台文档

更多详情请查看官方文档,链接在下方。

Sentinel 控制台文档

@SentinelResource

注解支持

Sentinel 支持通过 @SentinelResource 注解定义资源并配置 blockHandler 和 fallback 函数来进行限流之后的处理。示例:

@Service
public class OrderService {

    @SentinelResource
    public String randomStr() {
        return "sadasdasd";
    }

    public String randomStr2() {
        return "sadasdasd2";
    }

}

//contoller
@GetMapping("/helloStr")
    public CommonResult helloStr() {
        return CommonResult.success(orderService.randomStr());
    }

    @GetMapping("/helloStr2")
    public CommonResult helloStr2() {
        return CommonResult.success(orderService.randomStr2());
    }

在控制台可以看到可以对randomStr方法进行相应的流控策略。
在这里插入图片描述
将资源randomStr进行流控
在这里插入图片描述

@SentinelResource中blockHandler

定义blockHandler

@Service
public class OrderService {

    @SentinelResource(blockHandler = "randomStrBlock")
    public String randomStr() {
        return "resource";
    }
 
    public String randomStrBlock(BlockException ex) {
        return "Backup str ";
    }
}

当资源被限流时会调用 randomStrBlock 方法

注解支持

效果图

熔断降级

除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。

一个服务常常会调用别的模块,可能是另外的一个远程服务、数据库,或者第三方 API 等。

例如,支付的时候,可能需要远程调用银联提供的 API;查询某个商品的价格,可能需要进行数据库查询。

然而,这个被依赖服务的稳定性是不能保证的。如果依赖的服务出现了不稳定的情况,请求的响应时间变长,那么调用服务的方法的响应时间也会变长,线程会产生堆积,最终可能耗尽业务自身的线程池,服务本身也变得不可用。

在这里插入图片描述

熔断策略

Sentinel 提供以下几种熔断策略:

慢调用比例 (SLOW_REQUEST_RATIO):选择以慢调用比例作为阈值,需要设置允许的慢调用 RT(即最大的响应时间),请求的响应时间大于该值则统计为慢调用。当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断,若大于设置的慢调用 RT 则会再次被熔断。

异常比例 (ERROR_RATIO):当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且异常的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%。

异常数 (ERROR_COUNT):当单位统计时长内的异常数目超过阈值之后会自动进行熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值