Sentinel是阿里巴巴开源的一个轻量级流量控制框架,主要用于保护系统稳定性和流畅性。
以下是关于Sentinel的详细介绍:
一、基本概述
- 定义:Sentinel以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。
- 发展历程:Sentinel诞生于2012年,最初主要用于阿里巴巴内部的流量控制。随着时间的推移,它迅速发展并成为了阿里巴巴所有微服务的基本组成部分。2018年,Sentinel演变为一个开源项目,并迅速获得了业界的广泛关注和应用。
二、主要功能
- 流量控制:
- Sentinel提供了多种流量控制策略,包括QPS限流、并发数限流、线程池限流等。
- 它通过滑动窗口算法来统计QPS、RT等指标,并根据预设的规则和实时统计的指标来决定是否放行请求。
- Sentinel支持基于调用关系、资源、参数等多个维度的流量控制,能够灵活应对各种复杂的业务场景。
- 熔断降级:
- 当调用链路中的某个资源出现不稳定时(如调用超时或异常比例升高),Sentinel会自动触发熔断降级机制,对该资源的调用进行限制,避免影响到其他资源并导致级联错误。
- 熔断降级策略可以根据业务的实际情况进行配置和调整,如设置熔断时长、恢复时间等。
- 实时监控与告警:
- Sentinel提供了实时监控功能,可以实时展示系统的QPS、RT等指标,帮助开发者快速了解系统状态。
- 当系统出现异常或指标超出预设阈值时,Sentinel会及时发出告警通知开发者。
- 系统负载保护:
- Sentinel能够根据系统的负载情况动态调整流量分配和流量控制策略,防止系统过载和崩溃。
- 它还提供了自适应的过载保护能力,能够在系统负载较高时自动减少进入系统的流量以保护系统稳定。
三、架构设计
Sentinel的架构设计简洁清晰,主要包括以下几个部分:
- 核心库:包含了流量控制、熔断降级等核心功能的实现。
- Dashboard:用于管理和监控Sentinel的各项功能,包括实时监控、规则管理等。
- 规则中心:用于存储流量控制、熔断降级等规则,并支持将规则推送到各个客户端实现统一管理。
四、应用场景
Sentinel承接了阿里巴巴近10年的双十一大促流量的核心场景,如秒杀、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。这些应用场景充分展示了Sentinel在高并发、高负载场景下的稳定性和可靠性。
五、优势与特点
- 轻量级:Sentinel的核心库只有200KB左右,对性能的影响非常小。
- 多维度流量控制:支持基于调用关系、资源、参数等多个维度的流量控制策略。
- 实时监控与告警:提供实时监控和告警功能帮助开发者快速了解系统状态并处理异常。
- 自适应过载保护:能够根据系统负载情况动态调整流量分配和流量控制策略防止系统过载和崩溃。
- 广泛的开源生态:提供开箱即用的与其它开源框架/库的整合模块如Spring Cloud、Dubbo等方便快速接入。
六、安装与使用
安装Sentinel通常需要先安装Java环境然后从Sentinel官网下载源码或二进制包进行解压和启动。Sentinel支持通过控制台进行规则管理和监控配置方便开发者进行管理和操作。
使用如下命令启动控制台:
java -jar sentinel-dashboard.jar --server.port=18080
然后通过http://localhost:18080访问sentinel控制台,默认用户名和密码都是 sentinel。
接下来在Gateway项目的pom.xml
文件中添加Sentinel和Gateway相关的依赖。这些依赖包括Sentinel的核心包、Gateway的整合包以及可能需要的Sentinel控制台支持包等。
<!-- Sentinel核心包 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!-- Gateway整合Sentinel的依赖 -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-spring-cloud-gateway-adapter</artifactId>
</dependency>
<!-- Gateway依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
然后在gateway项目的application.yml
或application.properties
文件中配置Sentinel的相关参数,如Sentinel控制台的地址、端口号等。
spring:
cloud:
sentinel:
transport:
port: 8719 # Sentinel控制台和当前应用进行数据传递的端口号
dashboard: 127.0.0.1:8080 # Sentinel控制台的地址
到此为止,sentinel与springcloud的集成就结束了,是不是超级简单。集成完毕后最后就Sentinel控制台中配置网关流控规则,一般就是配置QPS阈值(每秒允许网关接收多少个请求),配置完成后sentinel就会对gateway进行对应的流量控制保护了。网关流控规则的类型通常为gw-flow
,它允许你针对特定的路由ID或API分组进行限流。
- 路由ID限流:直接针对Gateway配置中的路由ID进行限流,适用于对整个微服务进行流量控制。
- API分组限流:按照URL的匹配规则(如精准匹配、前缀匹配、正则匹配)将多个接口划分到同一个API分组中,然后对该分组进行限流。这种方式更加灵活,可以针对特定的接口集合进行流量控制。
总的来说,Sentinel作为一款功能强大、灵活易用的流量控制框架已经在阿里巴巴等大型互联网企业得到了广泛应用和验证。它为微服务架构下的系统稳定性和流畅性提供了有力的保障。