Sentinel 知识总结
Sentinel 是阿里巴巴开源的一个轻量级流量控制框架,主要用于保护系统稳定性和流畅性。它提供了多种流量控制策略,包括QPS限流、并发数限流、线程池限流等,并且支持集群限流。此外,Sentinel还提供了熔断降级、系统负载均衡等功能。
一、Sentinel 简介
1.1 什么是 Sentinel?
Sentinel(哨兵)是阿里巴巴开源的一个轻量级流量控制框架,主要用于保护系统稳定性和流畅性。它可以帮助您实现以下目标:
限制系统的QPS,防止系统过载;
提供实时的监控和告警功能;
提供熔断降级功能,防止系统雪崩;
提供系统负载均衡功能。
1.2 Sentinel 的特性
轻量级:Sentinel 的核心库只有200KB左右,对性能的影响非常小;
实时监控:Sentinel 可以实时监控系统的QPS、RT等信息,并提供实时告警功能;
多维度的流量控制:Sentinel 支持基于调用关系、资源、参数等多个维度的流量控制;
集群流量控制:Sentinel 支持集群限流,可以实现多台机器的统一流量控制;
熔断降级:Sentinel 提供了熔断降级功能,可以在服务不可用时自动降级,防止系统雪崩;
系统负载均衡:Sentinel 可以对系统的入口流量进行调度,实现系统的负载均衡。
二、Sentinel 架构解析
2.1 架构总览
Sentinel 的架构设计简洁清晰,主要分为核心库、Dashboard、规则中心等几个部分。
2.2 核心库
核心库是 Sentinel 的主要实现部分,包括流量控制、熔断降级等功能。核心库主要包括以下几个部分:
流量统计:通过滑动窗口算法来统计QPS、RT等指标;
流量控制:根据预先设定的规则和实时统计的指标来决定是否放行请求;
熔断降级:在服务不可用时自动降级,防止系统雪崩;
系统负载均衡:对系统的入口流量进行调度,实现系统的负载均衡。
2.3 Dashboard
Dashboard 是 Sentinel 的控制台,用于管理和监控 Sentinel 的各项功能。Dashboard 主要包括以下几个部分:
实时监控:实时展示系统的QPS、RT等指标;
规则管理:提供规则的增删改查功能,支持在线修改规则并实时生效;
集群管理:提供集群的管理功能,支持多台机器的统一管理。
2.4 规则中心
规则中心是 Sentinel 的规则存储组件,用于存储流量控制、熔断降级等规则。规则中心主要包括以下几个部分:
规则存储:提供规则的存储功能,支持多种存储方式;
规则推送:将规则推送到各个客户端,实现规则的统一管理。
三、Sentinel 快速入门
3.1 环境准备
首先需要安装 Java 环境,然后从 Sentinel 官网下载 Sentinel 的源码或者二进制包。
3.2 启动 Sentinel
解压下载好的 Sentinel 压缩包,进入 sentinel-dashboard/sentinel-dashboard-web 目录,执行 mvn clean package -Dmaven.test.skip=true 命令打包,然后在 target 目录下找到 sentinel-dashboard.jar,执行 java -jar sentinel-dashboard.jar 命令启动 Sentinel。
3.3 使用 Sentinel
在项目中引入 Sentinel 的依赖,然后通过 SphU.entry(resourceName) 方法来定义一个资源,并通过 SphU.entry(resourceName).setHandler(handler) 方法来设置处理函数。在处理函数中,可以通过 context.getCurEntry() 方法来获取当前请求的信息,并根据信息来进行流量控制、熔断降级等操作。
四、Sentinel 核心概念详解
4.1 资源
资源是 Sentinel 进行流量控制的最小单位,通常对应一个服务或一个方法。在 Sentinel 中,资源是通过 resourceName 来唯一标识的。
4.2 流量控制
流量控制是 Sentinel 的核心功能之一,主要用于限制系统的QPS,防止系统过载。在 Sentinel 中,流量控制是通过滑动窗口算法来实现的,可以精确地计算每个资源的QPS,并根据QPS来进行流量控制。
4.2.1流量控制设计理念
- 资源的调用关系:例如资源的调用链路,资源和之源之间的关系
- 运行指标:例如QPS、线程池、系统负载等。
- 控制效果:例如直接限流、冷启动、排队等。
4.2.2流控规则介绍
参数:
- 资源名:其实就是我们请求的资源路径
- 针对来源:这个是此流控规则对应哪些微服务进行流控管理,一般填写调用方的微服务名称,多个用“,”分割
- 阈值类型:一般有2种类型,QPS(每秒最大请求数)和线程数(并发线程数)
- 单机阈值:单机状态下的最大限制值
- 是否集群:根据实际情况选择
- 流控模式:
- 直接:当 api 调用达到限流条件的时,直接限流;
- 关联:当关联的资源请求达到阈值的时候,限流自己;
- 链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,则进行限流)。
- 流控效果:
- 快速失败:直接失败;
- Warm Up:即预热/冷启动方式。当系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。通过冷启动,让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个越热的时间,避免冷系统被压。
- 排队等待:匀速排队,让请求匀速通过,阈值类型必须设置为 QPS,否则无效。
4.2.3流量控制模式
1)直接模式流量控制
2)关联模式流量控制
3)链路模式限流
4)流控效果处理冷启动
5)流控效果排队等待
6)线程池隔离
4.3 熔断降级
4.3.1熔断降级机制
熔断降级是 Sentinel 的另一个核心功能,主要用于防止系统雪崩。在 Sentinel 中,熔断降级是通过熔断器模式来实现的,当某个资源出现异常时,会自动降级,避免影响其他资源。
断路器控制熔断和放行是通过状态机制来完成的:
4.3.2 熔断讲解策略
慢调用
业务的响应时长(RT)大于指定时长的请求认定为慢调用请求,在指定时间内,如果请求数量超过设定的最小数量,慢调用比例大于设定阈值,则触发熔断。
设置慢调用规则
异常比例、异常数
统计指定时间内的调用,如果调用次数超过指定请求数,并且出现一次里达到设定的比例阈值(或超过指定一常数),则触发熔断。
设置异常比例规则
五、Sentinel 高级特性剖析
5.1 集群流量控制
Sentinel 支持集群流量控制,可以实现多台机器的统一流量控制。在 Sentinel 中,集群流量控制是通过规则中心来实现的,可以将规则推送到各个客户端,实现规则的统一管理。
5.2 系统负载均衡
Sentinel 支持系统负载均衡,可以对系统的入口流量进行调度,实现系统的负载均衡。在 Sentinel 中,系统负载均衡是通过负载均衡器来实现的,可以根据系统的负载情况来动态调整流量分配。
六、Sentinel 生态集成
6.1 Spring Cloud Alibaba Sentinel
Spring Cloud Alibaba Sentinel 是 Spring Cloud 体系中的一部分,提供了与 Sentinel 集成的解决方案。通过使用 Spring Cloud Alibaba Sentinel,可以方便地将 Sentinel 作为 Spring Cloud 应用的流量控制和熔断降级组件使用。
以上就是全部内容,如果你有任何问题、意见或建议,都欢迎在评论中分享。让我们继续分享知识,共同成长,一起走向更加美好的未来。感谢你们的阅读,祝愿你们在未来的道路上一帆风顺!