Sentinel详解

目录

1.官网及相关介绍:

 2.sentinel的下载和运行

3.Sentinel的流量监控 

 4.sentinel的流控规则

 阈值类型

流控模式 :

关联流控:

5.熔断降级

熔断策略

6.热点参数限流:


1.官网及相关介绍:

GitHub - alibaba/Sentinel: A powerful flow control component enabling reliability, resilience and monitoring for microservices. (面向云原生微服务的高可用流控防护组件)

介绍 · alibaba/Sentinel Wiki · GitHub

流控、服务熔断、服务降级等名词解释:

(1)流控:即流量控制,根据流量、并发线程数、响应时间等指标,把随机到来的流量调整成合适的形状,即流量塑性,保证系统在流量突增情况下的可用性,避免系统被瞬时的流量高峰冲垮,一旦达到阈值则进行拒绝服务、排队等降级操作。

(2)熔断:当下游服务发生一定数量的失败后,打开熔断器,后续请求就快速失败。一段时间过后再判断下游服务是否已恢复正常,从而决定是否重置熔断器。

(3)降级:当访问量剧增、服务出现异常或者非核心服务影响到核心流程时,暂时牺牲掉一些东西,以保障整个系统的平稳运行。

 2.sentinel的下载和运行

下载地址:Releases · alibaba/Sentinel · GitHub

 只需下载jar即可,然后运行,打开cmd,输入java -jar + 文件名字,回车即可运行成功

 

默认端口号为8080,输入http://localhost:8080即可进入sentinel管理界面,账户密码初始都为sentinel

 

3.Sentinel的流量监控 

项目部署可以参考113_Sentinel初始化监控_哔哩哔哩_bilibili

提前做好服务注册工作,并创建cloudalibaba-sentinel-service8401微服务,采用五步法,

  1. 建module
  2. 改pom
  3. yml
  4. 主启动
  5. 业务类
server:
  port: 8401

spring:
  application:
    name: cloudalibaba-sentinel-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #nacos服务中心地地址
    sentinel:
      transport:
        dashboard: localhost:8080 #sentinel dashboard地址
        port: 8719 #默认端口,如果被占用会自动加1
management:
  endpoints:
    web:
      exposure:
        include: '*'

编写测试Controller,发送get请求,查看监控效果

@RestController
public class FlowController {

    @GetMapping("/testA")
    public String testA(){
        return "----testA";
    }

    @GetMapping("/testB")
    public String testB(){
        return "----testB";
    }
}

访问http://localhost:8401/testA

然后刷新sentinel控制台,会发现成功监控到8401微服务

 4.sentinel的流控规则

 进入sentinel控制台,点击流控规则,新增流控规则

 

 阈值类型

我们为testA新增流控规则,选择QPS为1,即每秒钟只允许一次请求,如果多次,则会反馈提示。进入簇点链路,找到/testA,添加流控,设置为1.

 

然后访问testA,当我们一秒一次请求时,正常访问,而如果快速点击,达到了阈值,则会反馈默认的提示 。

对线程数进行流控,将其设置为1,意思是一次只能处理一个线程,如果我们没有为testA添加处理时间,则狂点刷新,仍然不会出现限流,因为每个进程来了之后直接就处理了,没有达到阈值;而当我们为testA添加处理时间后,例如一个请求的处理时间为1s,如果testA访问,需要1s的处理时间,并且这时间内只能为他一个线程进行服务,而如果其他线程进来,则会直接反馈限流效果。

流控模式 :

1.快速失败(默认),当达到流控规则时,新的请求就会被立即拒绝。

2.预热(Warm Up),即预热/冷启动方式。当系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。通过"冷启动",让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免冷系统被压垮。

3.排队等待,阙值必须设置为QPS,会严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法 。

 

关联流控:

有两个资源,资源A和资源B,当与A关联的资源B达到阈值后,就限流A自己。

 

5.熔断降级

一个服务常常会调用别的模块,可能是另外的一个远程服务、数据库,或者第三方 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 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。

 RT: (官网已更新,目前用的仍然是1.7版本的Sentinel)

6.热点参数限流:

何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如:

  • 商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制
  • 用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制

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

例子:

我们为请求添加两个参数,分别是p1和p2,并设置热点参数限流规则。

 

 

当我们访问时,只要带有参数p1(第0个位置),访问达到了阈值,就会触发限流,走blockHandler方法。而如果没有带有参数p1,则不会限流。

参数例外项:当p1是某个特定值时,他的限流条件可以例外设置,如当他例外项设置为5,此时的阈值为200,则遵循这个限流规则,而其他值(如1,2,3)时,仍然走阈值为1的规则。

 

@SentinelResource注解

 

fallback和blockHandler:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值