Sentinel最全详解(图文全面总结)

Sentinel最全详解(图文全面总结)

Sentinel是微服务的核心组件,是构建微服务的基石,下面我就全面来详解Sentinel@mikechen

Sentinel简介

Sentinel 是一款由阿里巴巴开源的轻量级流量控制、和熔断降级组件,旨在解决分布式系统中的流量管理、和服务保护问题。

Sentinel最全详解(图文全面总结)

 

Sentinel功能

Sentinel 作用:主要用于解决微服务架构中的:流量控制、熔断降级、系统负载保护等问题。

Sentinel最全详解(图文全面总结)

  1. 流量控制:Sentinel 可以根据预设的流量控制规则,对系统的入口流量进行实时监控和控制,以保证系统的稳定性和可用性。
  2. 熔断降级:当系统的资源达到预设的阈值时,Sentinel 可以自动触发熔断降级策略,暂时停止对该资源的访问,以避免系统的雪崩效应。
  3. 系统负载保护:Sentinel 可以根据系统的负载情况,自动调整流量控制和熔断降级策略,以保证系统的稳定性和可靠性。
  4. 实时监控和告警:Sentinel 提供了实时的流量统计、规则配置、实时监控和告警功能,可以帮助开发者及时发现和处理系统中的异常情况。

 

Sentinel原理

Sentinel 原理:主要概括为基于“资源”的流量控制、和熔断降级。

1.流量控制

Sentinel 对每个资源的请求量、响应时间、错误率等指标进行实时统计,这些统计数据通过内置的监控模块进行收集。

开发者可以通过 Sentinel Dashboard 、或代码配置预设的流量控制规则,例如:设置某个资源的 QPS(每秒钟请求量)、线程数、并发数等阈值。

Sentinel最全详解(图文全面总结)

 

2.限流

Sentinel 提供了多种流量控制的策略:

Sentinel最全详解(图文全面总结)

  • QPS 控制:当某个资源的实际 QPS 超过了设定的阈值时,Sentinel 将会对该资源的流量进行限制,防止其继续增加,以保护系统的稳定性。
  • 线程数控制:Sentinel 还支持对每个资源的线程数进行控制,可以设定一个资源可以同时处理的最大线程数,当线程数超过设定的阈值时,Sentinel 将拒绝新的请求。
  • 并发数控制:Sentinel 还可以设定一个资源可以同时处理的最大并发请求数,当并发请求数超过设定的阈值时,Sentinel 将拒绝新的请求,直到并发请求数降下来。

 

3.熔断降级

Sentinel 还提供了熔断降级功能,可以根据资源的错误率、或异常数进行流量控制。

当资源的错误率或异常数达到预设的阈值时,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面试题总结

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧