1.概述
sentinel,springcloud alibaba中对标springcloud Netflix中的hystrix的组件,是一个强大的分布式系统保护工具,通过流量控制、熔断降级和系统负载保护等机制,保障了微服务架构的稳定性和可用性。它是Spring Cloud生态系统中的重要组件之一,被广泛应用于微服务开发和运维中。阿里每年的“双十一”,sentinel就是提供分布式保护机制的核心组件之一。
hystrix的缺点:
没有自带监控平台,需要整合配置dashboard实现监控
没有图形化界面提供配置,只能在代码层编码实现流控、降级、熔断。
sentinel的优点:
单独一个组件,提供图形化界面
提供图形化界面进行流控、降级、熔断配置。
2.下载安装
下载地址:
https://github.com/alibaba/Sentinel/releases
sentinel分为两部分:
核心库,是个JAVA客户端,提供限流、降级、熔断等功能
控制台,基于SpringBoot实现的dashboard,完成监控功能。
两者都集成在一个jar包中,运行jar包即可运行起两块功能。
页面地址:localhost:8080
默认用户名、密码:sentinel sentinel
3.应用托管
在应用一侧引入sentinel的依赖,配置好sentinel的地址以及与sentinel的通信端口,即可将应用托管给sentinel进行监控。
依赖:
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> <version>${version}</version> </dependency>
配置:
spring:
cloud:
sentinel:
transport:
dashboard: 127.0.0.1:8080
port: 8719
懒加载:
sentinel采用懒加载机制,未被访问过的服务不会被监控,只有被访问过的服务才会被纳入监控。
4.流量控制
4.1.流控规则
在sentinel的流控规则中可以进行流控的规则设置。
资源名:URL,要求必须全局唯一。
阈值类型:限制线程数?限制每秒访问数?
单机阈值:每台机器的访问阈值
流控模式、流控效果:设置响应的方式。
4.2.流控模式
4.2.1.直接模式
超过阈值后会直接给出一个处理方式:
此处设置的是“快速失败”,直接给出一个响应。
4.2.2.关联模式
当自己所关联的资源到达阈值以后,限流自己。
即当与A关联的资源B达到阈值以后,限流A。
防止连坐效应造成关联业务宕机。
4.2.3.链路模式
链路模式需要配合簇点链路一起使用,
簇点链路里有一条默认的链路,链路下有当前系统中的所有访问路径。
链路模式即是除了通过资源名的访问会被流控以外,链路中的其他服务调用流控的资源名也会受到所配置的流控规则所限制。
4.3.流控效果
4.3.1.预热
预热(warm up),即预热/冷启动,
即不直接让系统去面对极限流量,而是当流量在达到所设定阈值的一个百分比时,系统拒绝所有流量,用一段时间来热身,热身完毕后再去面对极限流量。
这个阈值的百分比和一个系数相关——冷却因子(cold factor)。冷却因子默认为3,即当瞬间流量达到阈值的1/3的位置时,系统会在后续的一段时间拒绝掉后续的流量(拒接的形式是直接返回一个响应),然后在这段时间里“预热”,预热完毕后再去处理极限流量。
这段“预热时间”可以动态配置,单位:秒。
4.3.2.排队等待
排队等待,让并发过来的请求排队匀速通过,适用于间隔性的突发流量峰值。涌过来的请求积压排队,利用间隔时间来逐渐放行。间隔时间默认500毫秒。
排队等待只处理QPS,每次只放行阈值数量的请求,超时未处理的请求直接返回响应,超时时间单位为毫秒。
5.降级
sentinel将熔断和降级揉在了一起,直接用熔断的方式来实现了降级。
5.1.降级规则
在sentinel的降级规则中可以进行降级的规则设置
5.2.降级策略
5.2.1.RT
RT(新版本改名叫做“慢比列调用”),平均响应时间。
当一秒内有5个以上的请求进来,降级规则被唤醒,当进来的所有请求中有超过30%的请求响应时间超过1000ms,触发服务熔断,打开断路器,熔断时长20秒,此期间内对还想进来的请求快速返回一个响应,20秒以后,向服务发送探测信号,尝试闭合断路器。
5.2.2.异常比例
1秒内超过3个请求进来,唤醒降级规则,进来的请求里有超过30%的请求产生异常,触发熔断,断路器打开,熔断时长10秒,此期间内对还想进来的请求返回一个快速响应,10秒以后重新探测,尝试闭合断路器。
5.2.3.异常数
1分钟内超过3个请求进来,触发降级策略,所有请求中异常数如果超过阈值则触发熔断。