笔记对应demo:https://gitee.com/panlsp/springcloud_alibaba_parent
一、使用 sentinel dashboard
1、下载
下载地址:https://github.com/alibaba/Sentinel/tags
2、启动
启动时修改web端口为9191(默认为8080)
java -jar -D.server.port=9191 sentinel-dashboard-1.8.3.jar
3、访问
账号密码都为:sentinel
二、sentinel 项目
1、导入依赖
<!-- sentinel 依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
二、配置信息
server:
port: 8989
spring:
application:
name: SENTINEL
cloud:
# sentinel配置
sentinel:
# 开启状态(默认)
enabled: true
# 立即初始化
eager: true
transport:
# web 地址
dashboard: localhost:9191
# 通信地址(默认)
port: 8719
3、书写测试的demo(controller)
@RestController
public class DemoController {
@GetMapping("demo")
public String demo(){
return "demo ok !!!";
}
}
4、访问测试
多次访问测试的controller,观看sentinel dashboard 的服务状态
三、规则限制
1、流量控制
流量控制(FlowController)
定义:其原理是监控应用流量的 QPS 或 并发线程数 指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。
**QPS:**每秒请求数
当每秒请求数超过指定阈值之后对当前请求进行限流
**并发线程数:**当服务器中创建的线程数超过指定阈值之后对当前请求进行限流
1.1、流控模式
- 直接模式:直接流控模式是最简单的模式,当指定的接口达到限流条件时开启限流。
- 关联模式:关联流控模式指的是,当指定接口关联的接口达到限流条件时,开启对指定接口开启限流。
- 链路模式:当从某个接口过来的资源达到限流条件时,开启限流。它的功能有点类似于针对来源配置项,区别在于:针对来源是针对上级微服务,而链路流控是针对上级接口,也就是说它的粒度更细。
1.2、流控效果(只适用于QPS限流)
- 快速失败:直接拒绝请求,并抛出相应异常
- Warm Up:(冷启动,预热)
- 排队等待:(始终匀速通过)
2、熔断降级
除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。一个服务常常会调用别的模块,可能是另外的一个远程服务、数据库,或者第三方 API 等。例如,支付的时候,可能需要远程调用银联提供的 API;查询某个商品的价格,可能需要进行数据库查询。然而,这个被依赖服务的稳定性是不能保证的。如果依赖的服务出现了不稳定的情况,请求的响应时间变长,那么调用服务的方法的响应时间也会变长,线程会产生堆积,最终可能耗尽业务自身的线程池,服务本身也变得不可用。
- 慢调用比例 (
SLOW_REQUEST_RATIO
):选择以慢调用比例作为阈值,需要设置允许的慢调用 RT(即最大的响应时间),请求的响应时间大于该值则统计为慢调用。当单位统计时长(statIntervalMs
)内请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断,若大于设置的慢调用 RT 则会再次被熔断。 - 异常比例 (
ERROR_RATIO
):当单位统计时长(statIntervalMs
)内请求数目大于设置的最小请求数目,并且异常的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。异常比率的阈值范围是[0.0, 1.0]
,代表 0% - 100%。 - 异常数 (
ERROR_COUNT
):当单位统计时长内的异常数目超过阈值之后会自动进行熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。
3、热点参数限流
何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如:
- 商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制
- 用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制
热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。
ID 并进行限制
- 用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制
热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。