SpringCloud组件Sentinel熔断降级
前言:Sentinel
是阿里巴巴开源的一款面向分布式服务架构的流量防护组件,旨在通过流量控制、熔断降级、系统负载保护等功能保障微服务的稳定性和可靠性。Sentinel
主要用于微服务架构中的流量控制和系统稳定性保障,可以帮助开发者在高并发和复杂的分布式系统中实现高可用性。
主要特性
- 流量控制:基于 QPS(每秒查询次数)、并发线程数等维度进行限流,支持针对不同资源进行精细化流控。
- 熔断降级:当资源响应时间过长或发生错误比例过高时,触发熔断,暂时阻断对该资源的访问,以保护系统。
- 系统负载保护:根据系统的总体负载情况(如 CPU 使用率),动态调整流控策略,避免系统过载。
- 热点参数限流:支持针对请求中的热点参数(如商品 ID、用户 ID)进行限流,防止热点数据造成系统压力过大。
- 实时监控:提供完善的实时监控和报警功能,可以对流量控制和熔断降级的效果进行动态监控。
核心组件
- Sentinel Core:流量控制和熔断降级的核心逻辑,提供 API 供业务代码调用。
- Sentinel Dashboard:可视化控制台,用于实时监控、配置和管理 Sentinel 的规则。
- Sentinel Adapter:适配不同的框架和库(如 Spring Cloud、Dubbo 等),简化与业务系统的集成。
Sentinel熔断降级
官网:https://sentinelguard.io/zh-cn
这里本地启用sentinel
,进行操作,在sentinel
的jar包目录
,打开cmd
,启动sentinel
1 | java -Dserver.port=8090 -Dcsp.sentinel.dashboard.server=localhost:8090 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar |
访问http://localhost:8090
,打开管理页面
账号 sentinel 密码sentinel
maven引入
1 | <!--sentinel--> |
配置文件
1 | spring: |
在访问服务的时候,控制台会展示访问接口的统计信息,及相关控制按钮,可以达到对具体某个接口进行管理等操作
请求限流
选择具体接口,点击右侧流控
按钮,选择需要限制的阈值类型
,输入单机阈值
,点击新增,后期可以左侧流控规则
这块进行修改操作
线程隔离
如果说微服务接口,调用了其他微服务内部接口,需要在OpenFeign
使用处,配置文件
开启sentinel
1 | feign: |
这里选择并发线程数
,选择单机阈值
5,表示该查询最多可以同时5个线程使用,如果说接口能每秒处理2个请求,5个线程加起来一共是10个请求,超过的请求会被拒绝掉。
普及知识点
线程(Thread)和QPS(Queries Per Second)是两个不同概念:
- 线程(Thread):
- 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一个进程可以包含多个线程,这些线程共享进程的资源。
- 在软件开发中,线程常用于实现并发执行,可以同时处理多个任务,提高程序的运行效率。
- QPS(Queries Per Second):
- QPS是衡量系统处理能力的一个重要指标,指的是每秒钟能够处理的请求或查询次数。通常用于评估服务器、数据库等系统的性能。
- 例如,一个网站能够处理的最大QPS表示它能够同时处理的最大访问量。
因此,线程和QPS是不同层次的概念:线程是操作系统和编程语言级别的概念,用于控制程序执行流程和资源共享;而QPS则是系统性能的一个量化指标,用于衡量系统处理能力和性能表现。
服务熔断
在熔断期间内接口会直接走向接口的失败处理方法,等待熔断时长过去后,再次放开,如果还是慢,就会再次被熔断
熔断策略分慢调用比例
,异常比例
,异常数
,这块对慢调用做出说明
规则说明:
最大RT:超过200毫秒的请求调用就是慢调用
统计时长:1000ms内的最少5次请求,如果慢调用比例不低于0.5,则触发熔断
熔断时长:20s
最后点击新增,规则生效,生效后,可以在左侧熔断规则
处,进行修改,删除操作