熔断 降级 限流 区别
1、Sentinel具有以下特征:
丰富的应用场景:Sentinel承接了阿里巴巴近10年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
完备的实时监控:Sentinel同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至500台以下规模的集群的汇总运行情况。
广泛的开源生态:Sentinel提供开箱即用的与其它开源框架/库的整合模块,例如与SpringCloud、Dubbo、gRPC的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入Sentinel。
完善的SPI扩展点:Sentinel提供简单易用、完善的SPI扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。
2、Hystrix与Sentinel比较
3、Sentinel介绍
Sentinel 分为两个部分:
核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。
重要规则定义 具体参考官方文档
4、SpringBoot整合Sentinel
4-1 添加启动器
<!--sentinel 场景启动器-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
4-2 控制台下载(使用文档)
Sentinel/sentinel-dashboard at master · alibaba/Sentinel · GitHub
本文核心包使用 1.6.3 版本,控制台也下载一样
下载地址找相应版本
Releases · alibaba/Sentinel · GitHub
4-3 启动jar包 访问控制台
java -jar sentinel-dashboard-1.6.3.jar --server.port=8333
账号密码都是 sentinel
4-4 配置控制台信息
这里的 spring.cloud.sentinel.transport.port 端口配置会在应用对应的机器上启动一个 Http Server,该 Server 会与 Sentinel 控制台做交互。比如 Sentinel 控制台添加了一个限流规则,会把规则数据 push 给这个 Http Server 接收,Http Server 再将规则注册到 Sentinel 中。
#连接sentinel 控制台
spring.cloud.sentinel.transport.dashboard=localhost:8333
#sentinel传输端口
spring.cloud.sentinel.transport.port=8719
4-5 整合 Endpoint 支持
在使用 Endpoint 特性之前需要在 Maven 中添加 spring-boot-starter-actuator 依赖,并在配置中允许 Endpoints 的访问。
<!--actuator Endpoint 支持-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
- Spring Boot 2.x 中添加配置 management.endpoints.web.exposure.include=*。暴露的 endpoint 路径为 /actuator/sentinel
- Sentinel Endpoint 里暴露的信息非常有用。包括当前应用的所有规则信息、日志目录、当前实例的 IP,Sentinel Dashboard 地址,Block Page,应用与 Sentinel Dashboard 的心跳频率等等信息。
- 新增流控规则
限制1秒一个 ,超过访问次数后,如下
- 图:sentinel会有默认返回。
- 自定义sentinel的返回
/**
* <简述>自定义阻塞返回方法
* <详细描述>
* @author syf
* @date 2023/4/24 15:26
* @return null
*/
@Configuration
public class GulimallSeckillSentinelConfig {
public GulimallSeckillSentinelConfig() {
WebCallbackManager.setUrlBlockHandler(new UrlBlockHandler() {
@Override
public void blocked(HttpServletRequest request, HttpServletResponse response, BlockException ex) throws IOException {
R error = R.error(BizCodeEnum.TO_MANY_REQUEST.getCode(), BizCodeEnum.TO_MANY_REQUEST.getMsg());
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json");
response.getWriter().write(JSON.toJSONString(error));
}
});
}
}
设置完QPS后,自定义返回如下
4-6 流量控制
地址 : 流量控制 · alibaba/Sentinel Wiki · GitHub
https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6
4-6 -1浏览控制有三种方式 直接、链路、关联
链路是基于调用入口的控制如图 ,只有 /helllo 进来的请求才会限制
4-6-2关联:
限制资源的争抢,A 服务read ,B 服务wirte ,如果限制A服务数量100,b压力大时就会限制A,B压力不大则不会限制A
4-7 流控效果 快速失败 、warm up、 排队等如图
4-7-1 快速失败
不用说,就是直接放弃
4-7-2 warm up 热启动模式
如上图,单机阈值 100 ,预热时常10。 服务会慢慢的将请求增长到 100. 比如前一秒 1个请求,后一秒 3个请求,10秒内达到100请求
4-7-3 排队等待
如上图,单机阈值 100 ,超时常10。进来 150请求,先放100请求,剩下50 排队,超过10s放弃掉