Sentinel是微服务的核心组件,是构建微服务的基石,下面我就全面来详解Sentinel@mikechen
Sentinel简介
Sentinel 是一款由阿里巴巴开源的轻量级流量控制、和熔断降级组件,旨在解决分布式系统中的流量管理、和服务保护问题。
Sentinel功能
Sentinel 作用:主要用于解决微服务架构中的:流量控制、熔断降级、系统负载保护等问题。
- 流量控制:Sentinel 可以根据预设的流量控制规则,对系统的入口流量进行实时监控和控制,以保证系统的稳定性和可用性。
- 熔断降级:当系统的资源达到预设的阈值时,Sentinel 可以自动触发熔断降级策略,暂时停止对该资源的访问,以避免系统的雪崩效应。
- 系统负载保护:Sentinel 可以根据系统的负载情况,自动调整流量控制和熔断降级策略,以保证系统的稳定性和可靠性。
- 实时监控和告警:Sentinel 提供了实时的流量统计、规则配置、实时监控和告警功能,可以帮助开发者及时发现和处理系统中的异常情况。
Sentinel原理
Sentinel 原理:主要概括为基于“资源”的流量控制、和熔断降级。
1.流量控制
Sentinel 对每个资源的请求量、响应时间、错误率等指标进行实时统计,这些统计数据通过内置的监控模块进行收集。
开发者可以通过 Sentinel Dashboard 、或代码配置预设的流量控制规则,例如:设置某个资源的 QPS(每秒钟请求量)、线程数、并发数等阈值。
2.限流
Sentinel 提供了多种流量控制的策略:
- QPS 控制:当某个资源的实际 QPS 超过了设定的阈值时,Sentinel 将会对该资源的流量进行限制,防止其继续增加,以保护系统的稳定性。
- 线程数控制:Sentinel 还支持对每个资源的线程数进行控制,可以设定一个资源可以同时处理的最大线程数,当线程数超过设定的阈值时,Sentinel 将拒绝新的请求。
- 并发数控制:Sentinel 还可以设定一个资源可以同时处理的最大并发请求数,当并发请求数超过设定的阈值时,Sentinel 将拒绝新的请求,直到并发请求数降下来。
3.熔断降级
Sentinel 还提供了熔断降级功能,可以根据资源的错误率、或异常数进行流量控制。
当资源的错误率或异常数达到预设的阈值时,Sentinel 将自动触发熔断降级策略,暂时停止对该资源的访问,以保护系统的稳定性。
如下图所示:
这种方式适用于需要根据系统的健康状况进行动态调整的场景,可以防止系统因异常情况而导致的雪崩效应。
Sentinel使用示例
创建SpringBoot 应用,加入Sentinel依赖,我们做一个简要的使用示例。
首先,确保你的项目中引入了 Sentinel 的依赖:
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency>
其次,启用 Sentinel 的功能:
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import com.alibaba.csp.sentinel.annotation.aspectj.EnableSentinel; @SpringBootApplication @EnableSentinel public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
接下来,我们可以使用 Sentinel 对该接口进行流量控制:
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import com.alibaba.csp.sentinel.annotation.SentinelResource; @RestController public class HelloController { @GetMapping("/hello") @SentinelResource("hello") public String hello() { return "Hello, Sentinel!"; } }
通过以上步骤,我们就完成了流量控制,当请求量超过 10 时,Sentinel 将会拒绝多余的请求,以保护系统的稳定性。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注作者「mikechen」公众号,获取更多技术干货!

后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》