Sentinel最全笔记,详细使用步骤教程清单

一、Sentinel的基本功能

1、流量控制

        流量控制在网络传输中是一个常用的概念,它用于调整网络包的发送数据。然而,从系统稳定性角度考虑,在处理请求的速度上,也有非常多的讲究。任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统的处理能力对流量进行控制。Sentinel 作为一个调配器,可以根据需要把随机的请求调整成合适的形状,如下图所示:

 流量控制有以下几个角度:

  • 资源的调用关系,例如资源的调用链路,资源和资源之间的关系;
  • 运行指标,例如 QPS、线程池、系统负载等;
  • 控制的效果,例如直接限流、冷启动、排队等。

2、熔断降级

        除了流量控制以外,及时对调用链路中的不稳定因素进行熔断也是 Sentinel 的使命之一。由于调用关系的复杂性,如果调用链路中的某个资源出现了不稳定,可能会导致请求发生堆积,进而导致级联错误。

Sentinel 和 Hystrix 的原则是一致的: 当检测到调用链路中某个资源出现不稳定的表现,例如请求响应时间长或异常比例升高的时候,则对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联故障。

 二、Sentinel的基本使用

直接使用

引入坐标

<!--sentinel-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>

对于要进行控制的资料做Sentinel的标记

@SentinelResource 用于定义资源,并提供可选的异常处理和 fallback 配置项。 @SentinelResource 注解包含以下属性:

 代码示例:

/****
     * 司机信息
     */
@SentinelResource(value = "info",blockHandler = "blockExHandler")
@RequestMapping(value = "/info/{id}")
public Driver info(@PathVariable(value = "id")String id) throws BlockException {
    log.info("当前服务占用的端口为:{}",port);
    Driver driver = driverService.findById(id);
    if (driver==null) {
        //throw new RuntimeException("司机id="+id+"不存在");
        throw new SystemBlockException("info", "司机id="+id+"不存在",null); // 抛出BlockException
    }
    return driver;
}

/**
     * info资源出现BlockException后的降级处理
     */
public Driver blockExHandler(String id,BlockException e) {
    Driver driver = new Driver();
    driver.setId(id);
    driver.setName("系统繁忙,稍后再试");
    return driver;
}

集成OpenFeign

创建FallBack的处理类,需要实现对应的Feign接口

@Component
public class DriverFeignFallback implements DriverFeign {

    /**
     * status()降级处理方法
     */
    @Override
    public Driver status(String id, Integer status) {
        Driver driver = new Driver();
        driver.setId(id);
        driver.setStatus(status);
        driver.setName("系统比较繁忙,请您稍后再试!");
        return driver;
    }
}

在DriverFeign接口上添加fallback属性指定降级处理的类,代码如下:

@FeignClient(name = "hailtaxi-driver",fallback = DriverFeignFallback.class)
public interface DriverFeign {

    @PutMapping(value = "/driver/status/{id}/{status}")
    Driver status(@PathVariable(value = "id")String id, @PathVariable(value = "status")Integer status);
}

此刻就已经成功集成OpenFeign

但是有个问题,fallback拿不到报错信息,于是就有了fallbackFactory

创建fallbackFactory,这样可以拿到throwable中的报错信息了

@Component
public class DriverFeignFallbackFactory implements FallbackFactory<DriverFeign> {
    @Override
    public DriverFeign create(Throwable throwable) {
        return new DriverFeign() {
            /**
             * status()降级处理方法
             */
            @Override
            public Driver status(String id, Integer status) {
                Driver driver = new Driver();
                driver.setId(id);
                driver.setStatus(status);
                driver.setName("系统比较繁忙,请您稍后再试!");
                return driver;
            }
        };
    }
}

在DriverFeign接口上添加fallbackFactory属性指定讲解处理的类,代码如下:

@FeignClient(name = "hailtaxi-driver",fallback = DriverFeignFallbackFactory.class)
public interface DriverFeign {

    @PutMapping(value = "/driver/status/{id}/{status}")
    Driver status(@PathVariable(value = "id")String id, @PathVariable(value = "status")Integer status);
}

集成Gateway

TODO(在赶稿了)

三、Sentinel的规则

1、流量控制规则

流量控制基本概念:流量过大,超过阈值,就走fallback的函数了

 我们可以在【流控规则】页面中新增,点击【流控规则】进入页面新增页面,如下图:

 资源名:要和@SentinelResource中的value保持一致

2、熔断降级规则

熔断降级基本概念:监控一些请求的异常情况(是否报错)或完成调用的时间,当在单位时间内达到阈值即触发降级

 我们可以选择降级规则>新增降级规则,如下图:

 降级规则的熔断策略有3种,分别是慢调用比例、异常比例、异常数,和程序中是一样的。

3、系统保护规则

        Sentinel 系统自适应限流从整体维度对应用入口流量进行控制,结合应用的 Load、CPU 使用率、总体平均 RT、入口 QPS 和并发线程数等几个维度的监控指标,通过自适应的流控策略,让系统的入口流量和系统的负载达到一个平衡,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。

这是对系统的整体指标做监控,超过一些阈值就对所有请求限流降级

4、访问控制规则

        很多时候,我们需要根据调用方来限制资源是否通过,这时候可以使用 Sentinel 的访问控制(黑白名单)的功能。黑白名单根据资源的请求来源(origin)限制资源是否通过,若配置白名单则只有请求来源位于白名单内时才可通过;若配置黑名单则请求来源位于黑名单时不通过,其余的请求通过。

5、热点规则

热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。

比如某个参数,city=“北京”,当监控到这个参数被访问的次数高于阈值,则对这个资源进行控制

要使用热点参数限流功能,需要引入以下依赖

<!--热点参数限流-->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-parameter-flow-control</artifactId>
    <version>1.8.1</version>
</dependency>

Sentinel是一个分布式系统的高可用性监控和自动化平台。它提供了实时监控、告警、自动化决策、统计和可视化等功能,以帮助用户快速定位和解决系统问题。 Sentinel的核心功能包括: 1. 流量控制和熔断:提供实时的流量控制和熔断机制,防止系统因为异常流量而崩溃。 2. 负载均衡和容错:提供负载均衡和容错机制,让系统能够更好地应对高并发和故障。 3. 实时监控和告警:提供实时的监控和告警功能,让用户能够及时发现系统问题并进行处理。 4. 自动化决策和处理:提供自动化的决策和处理功能,可以自动化地处理一些常见的问题,从而减少人工干预的时间和成本。 Sentinel的架构: Sentinel的架构分为三层:应用层、控制层和数据层。 1. 应用层:负责收集和处理应用程序的数据,包括请求和响应数据、日志和异常信息等。 2. 控制层:负责对应用程序进行监控和管理,包括流量控制、熔断、负载均衡、容错和告警等。 3. 数据层:负责存储和管理应用程序的数据,包括配置信息、监控数据和告警日志等。 Sentinel的工作流程: 1. 收集数据:Sentinel会收集应用程序的请求和响应数据、日志和异常信息等。 2. 统计分析:Sentinel会对收集到的数据进行统计和分析,得出系统的性能指标和问题。 3. 流量控制:如果系统的流量过大,Sentinel会根据配置的规则对流量进行控制,以保证系统的稳定性和可用性。 4. 熔断:如果系统出现了异常,Sentinel会根据配置的规则对服务进行熔断,以避免系统崩溃。 5. 负载均衡和容错:如果系统出现了故障,Sentinel会根据配置的规则进行负载均衡和容错处理,以保证系统的可靠性和可用性。 6. 告警:如果系统出现了问题,Sentinel会根据配置的规则进行告警处理,通知管理员及时处理问题。 Sentinel的优点: 1. 高可用性:Sentinel可以提供高可用性的监控和管理功能,保证系统的稳定性和可用性。 2. 实时性:Sentinel可以实时地监控系统的性能和问题,能够及时发现和处理问题。 3. 灵活性:Sentinel提供了丰富的配置选项,可以根据实际需求进行定制和调整。 4. 易扩展:Sentinel支持分布式部署和扩展,能够满足不同场景下的监控和管理需求。 5. 开源:Sentinel是一个开源的项目,能够充分利用社区的力量和资源,不断提升和完善自身的功能和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值