独立于项目外的 服务流量控制台,可以用于熔断 防止服务崩溃无响应,服务重启,流量限制等
sentinel给我们带来的服务
解决了什么场景问题
下载地址 :sentinel下载地址 文档地址 :sentinel文档地址
Sentinel 组件由两部分组成
安装环境我们只需要有 java 8 以上就可以了
下载完成之后,直接运行java -jar 启动查看即可
java -jar sentinel-dashboard-1.7.0.jar
我们只需要访问 默认的启动端口就可以看到 sentinel的控制台了 账号和密码均为 :sentinel
我们主要以介绍sentinel实战,对于演示工程,选核心部分展示 核心依赖
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cspgroupId>
<artifactId>sentinel-datasource-nacosartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-sentinelartifactId>
dependency>
演示项目配置
server:
port: 8401
spring:
application:
name: cloudalibaba-sentinel-service
cloud:
nacos:
discovery:
server-addr: localhost:8848
sentinel:
transport:
dashboard: localhost:8080
port: 8719 #默认8719,假如被占用了会自动从8719开始依次+1扫描。直至找到未被占用的端口
management:
endpoints:
web:
exposure:
include: '*'
编写一个controller 来演示
@RestController
public class FlowLimitController
{
@GetMapping("/testA")
public String testA() {
return "------testA";
}
@GetMapping("/testB")
public String testB() {
return "------testB";
}
}
之后启动nacos和 sentinel 这个时候你访问sentinel 会发现什么也没有 为什么? 应为 sentinel是懒加载的,我们访问其中一个方法,就会在sentinel中看到我们项目
我们可以看到面板
快速失败,配置如下:
之后我们快速访问 testa 就会发现 Blocked by Sentinel (flow limiting) 触发了 sentinel的默认提示
当关联的资源达到阈值时,就限流自己
只要我们访问b 超过了 qps a就会把自己限流
**Warm Up ( RuleConstant.CONTROL_BEHAVIOR_UARM_uP)**方式,即预热/冷启动方式。当系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。通过"冷启动”,让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免冷系统被压垮。详细文档可以参考流量控制-Warm Up文档,具体的例子可以参见 WarmUpFlowDemo。
公式:阈值除以coldFactor(默认值为3),经过预热时长后才会达到阈值 默认coldFactor为3,即请求QPS从threshold/3开始,经预热时长逐渐升至设定的QPS阈值。
适合应用场景 大量数据情况 : 如秒杀
这里设置好之后,我们去访问,会发现,当到了阈值之后,慢慢的还是可以访问,直到10
匀速排队 匀速排队( RuleConstant.CONTROL_BEHAVIOR_RATE_LTIMITER)方式会严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法。详细文档可以参考流星控制–匀速器模式,具体的例子可以参见PaceFlowDemo。
匀速排队,阈值必须设置为QPS 在一定时间内,逐渐处理进入到的请求,而不是第一时间拒绝请求
Sentinel这个控制台,十分到强大,给我们带来了很多很多可以使用的服务规则,我们这里主要介绍了流控,这只是Sentinel的冰山一角,
Sentinel 可以看到,还有很多模块可以根据不同的场景和需求是了解, 天道酬勤,我们一起进步吧