栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringCloud整合Sentinel

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringCloud整合Sentinel

为什么要用sentinel

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

核心概念

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

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

GitHub Spring Cloud Alibabasentinel wiki

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

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

5 访问本地sentinel dashboard

sentinel dashboard本地地址

6 界面图


账号密码默认都是 sentinel ,输入后登录。

7 登录后界面如图所示

SpringCloud模块操作步骤 1 pom引入依赖

    com.alibaba.cloud
    spring-cloud-starter-alibaba-sentinel

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 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/684340.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号