初识Sentinel
雪崩问题:
解决雪崩问题的常见方式有四种:
1.超时处理:设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待
2.舱壁模式:限定每个业务能使用的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离。
但是服务出现故障后还是会分配原来的线程数,就造成浪费
3.熔断降级:由断路器统计业务执行的异常比例,如果超出阈值则会熔断该业务,拦截访问该业务的一切请求。
4.流量控制:限制业务访问的QPS,避免服务因流量的突增而故障。(主要是预防)
服务保护技术对比:
认识Sentinel
Sentinel是阿里巴巴开源的一款微服务流量控制组件。官网地址:https://sentinelguard.io/zh-cn/index.html
sentinel官方提供了UI控制台,方便我们对系统做限流设置。大家可以在GitHub下载。
放到非中文目录下,然后运行:java -jar sentinel-dashboard-1.8.6.jar
然后访问:localhost:8080 即可看到控制台页面,默认的账户和密码都是sentinel
微服务整合sentinel
限制规则
簇点链路
其含义是限制 /order/{orderId}这个资源的单机QPS为1,即每秒只允许1次请求,超出的请求会被拦截并报错。
流控模式
流控模式-关联
哪个需要限流,就在哪个进行高级流控设置
流控模式-链路
流控效果
流控效果-warm up ![](https://i-blog.csdnimg.cn/blog_migrate/3eda7be0e04329d3ee09f638aebe9c77.png)
流控效果-排队等待
热点参数限流
所以我们要在对应的方法上加上@SentinelResourse("hot")注解
在热点规则新增热点规则
这种情况对热度不同商品设置不同限流比较好用
隔离和降级
Feign整合Sentinel
线程隔离
线程池隔离和信号量隔离的优缺点:
线程隔离(舱壁模式)
熔断降级
断路器熔断策略有三种:慢调用、异常比例、异常数
熔断策略-慢调用
熔断策略-异常比例、异常数
授权规则
授权规则可以对调用方的来源做控制,有白名单和黑名单两种方式。
自定义异常结果
规则持久化
规则管理模式
推荐使用push模式
实现push模式
1.引入依赖
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
2.配置nacos地址
在order-service中的application.yml文件配置nacos地址及监听的配置信息:
spring:
cloud:
sentinel:
datasource:
flow:
nacos:
server-addr: localhost:8848 # nacos地址
dataId: orderservice-flow-rules
groupId: SENTINEL_GROUP
rule-type: flow # 还可以是:degrade、authority、param-flow
二、修改sentinel-dashboard源码
SentinelDashboard默认不支持nacos的持久化,需要修改源码。