概述
Sentinel
安装Sentinel服务
1.网址
https://github.com/alibaba/Sentinel/releases
2.下载jar包
3.将jar包放入文件夹中,打开cmd,运行
-Dserver.port=8180 -Dcsp.sentinel.dashboard.server=localhost:8180 -Dproject.name=sentinel-dashboard -jar D:/WorkSoftware/Alibaba/SpringCloud/Sentinel/sentinel-dashboard-1.8.0.jar
idea中利用脚本启动
访问Sentinal服务
1.启动Sentinal服务,访问8180端口
2.登录,账户密码均是sentinal
Sentinal限流入门
Sentinel集成
1.Sentinel应用于消费者方,在消费者方添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2.在yml文件中添加配置
spring:
cloud:
sentinel:
transport:
port: 8099 #跟sentinel控制台交流的端口,随意指定一个未使用的端口即可
dashboard: localhost:8180 # 指定sentinel控制台地址。
3.启动服务者和消费者,在浏览器中访问url
localhost:8090/consumer/doRestEcho1
4.查看Sentinal控制台
QPS限流
我们设置一下指定接口的流控(流量控制),QPS(每秒请求次数)单机阈值为1,代表每秒请求不能超出1次,要不然就做限流处理,处理方式直接调用失败。
1.选择要限流的链路,如图所示:
2.设置限流策略
3.反复刷新访问消费端端服务,检测是否有限流信息输出,如图所示
设置限流模式
Sentinel的流控模式代表的流控的方式,默认【直接】,还有关联,链路
| 关联模式
当关联的资源达到阈值,就限流自己。例如设置了关联资源为/ur2时,假如关联资源/url2的qps阀值超过1时,就限流/url1接口(是不是感觉很霸道,关联资源达到阀值,是本资源接口被限流了)。这种关联模式有什么应用场景呢?我们举个例子,订单服务中会有2个重要的接口,一个是读取订单信息接口,一个是写入订单信息接口。在高并发业务场景中,两个接口都会占用资源,如果读取接口访问过大,就会影响写入接口的性能。业务中如果我们希望写入订单比较重要,要优先考虑写入订单接口。那就可以利用关联模式;在关联资源上面设置写入接口,资源名设置读取接口就行了;这样就起到了优先写入,一旦写入请求多,就限制读的请求。
| 链路模式
链路模式只记录指定链路入口的流量。也就是当多个服务对指定资源调用时,假如流量超出了指定阈值,则进行限流。被调用的方法用@SentinelResource进行注解,然后分别用不同业务方法对此业务进行调用,假如A业务设置了链路模式的限流,在B业务中是不受影响的。例如现在设计一个业务对象,代码如下(为了简单,可以直接写在启动类内部):
@Service
public class ConsumerService{
@SentinelResource("doGetResource")
public String doGetResource(){
return "doGetResource";
}
}
接下来我们在/consumer/doRestEcho1对应的方法中对ConsumerService中的doGetResource方法进行调用(应用consumerService对象之前,要先在doRestEcho01方法所在的类中进行consumerService值的注入)。例如:
@GetMapping("/consumer/doRestEcho1")
public String doRestEcho01() throws InterruptedException {
consumerService.doGetResource();
//Thread.sleep(200);
String url="http://localhost:8081/provider/echo/"+server;
//远程过程调用-RPC
return restTemplate.getForObject(url,String.class);//String.class调用服务响应数据类型
}
说明,流控模式为链路模式时,假如是sentinel 1.7.2以后版本,Sentinel Web过滤器默认会聚合所有URL的入口为sentinel_spring_web_context,因此单独对指定链路限流会不生效,需要在application.yml添加如下语句来关闭URL PATH聚合,例如:
sentinel:
web-context-unify: false
修改配置以后,重新sentinel,并设置链路流控规则,然后再频繁对链路/consumer/doRestEcho1进行访问,检测是否会出现500异常。
设计限流效果(了解)
快速失败
流量达到指定阀值,直接返回报异常。(类似路前方坍塌,后面设定路标,让后面的车辆返回)
WarmUp (预热)
WarmUp也叫预热,根据codeFactor(默认3)的值,(阀值/codeFactor)为初始阈值,经过预热时长,才到达设置的QPS的阈值,假如单机阈值为100,系统初始化的阈为 100/3 ,即阈值为33,然后过了10秒,阈值才恢复到100。这个预热的应用场景,如:秒杀系统在开启的瞬间,会有很多流量上来,很有可能把系统打死,预热方式就是把为了保护系统,可慢慢的把流量放进来,慢慢的把阈值增长到设置的阈值。例如:
排队等待
从字面上面就能够猜到,匀速排队,让请求以均匀的速度通过,阈值类型必须设成QPS,否则无效。比如有时候系统在某一个时刻会出现大流量,之后流量就恢复稳定,可以采用这种排队模式,大流量来时可以让流量请求先排队,等恢复了在慢慢进行处理,例如:
小节面试分析
Sentinel是什么?(阿里推出一个流量控制平台,防卫兵)
类似Sentinel的产品你知道有什么?(hystrix-一代微服务产品)
你了解哪些限流算法?(计数器、令牌桶、漏斗算法,滑动窗口算法,…)
Sentinel 默认的限流算法是什么?(滑动窗口算法)
你了解sentinel中的阈值应用类型吗?(两种-QPS,线程数)
Sentinel 限流规则中默认有哪些限流模式?(直连,关联,链路)
Sentinel的限流效果有哪些?(快速失败,预热,排队)
Sentinel 为什么可以对我们的业务进行限流,原理是什么?
我们在访问web应用时,在web应用内部会有一个拦截器,这个拦截器会对请求的url进行拦截,拦截到请求以后,读取sentinel 控制台推送到web应用的流控规则,基于流控规则对流量进行限流操作。
最后
以上就是土豪墨镜为你收集整理的Sentinal对访问的限流SentinelSentinal限流入门设置限流模式设计限流效果(了解)的全部内容,希望文章能够帮你解决Sentinal对访问的限流SentinelSentinal限流入门设置限流模式设计限流效果(了解)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复