前言:Sentinel 是阿里巴巴开源的一款面向分布式服务架构的流量防护组件,旨在通过流量控制、熔断降级、系统负载保护等功能保障微服务的稳定性和可靠性。Sentinel 主要用于微服务架构中的流量控制和系统稳定性保障,可以帮助开发者在高并发和复杂的分布式系统中实现高可用性。

主要特性

  1. 流量控制:基于 QPS(每秒查询次数)、并发线程数等维度进行限流,支持针对不同资源进行精细化流控。
  2. 熔断降级:当资源响应时间过长或发生错误比例过高时,触发熔断,暂时阻断对该资源的访问,以保护系统。
  3. 系统负载保护:根据系统的总体负载情况(如 CPU 使用率),动态调整流控策略,避免系统过载。
  4. 热点参数限流:支持针对请求中的热点参数(如商品 ID、用户 ID)进行限流,防止热点数据造成系统压力过大。
  5. 实时监控:提供完善的实时监控和报警功能,可以对流量控制和熔断降级的效果进行动态监控。

核心组件

  1. Sentinel Core:流量控制和熔断降级的核心逻辑,提供 API 供业务代码调用。
  2. Sentinel Dashboard:可视化控制台,用于实时监控、配置和管理 Sentinel 的规则。
  3. Sentinel Adapter:适配不同的框架和库(如 Spring Cloud、Dubbo 等),简化与业务系统的集成。

Sentinel熔断降级

官网:https://sentinelguard.io/zh-cn

这里本地启用sentinel ,进行操作,在sentineljar包目录,打开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

image-20240613193556734

maven引入

1
2
3
4
5
<!--sentinel-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

配置文件

1
2
3
4
5
6
7
8
9
10
spring:
application:
name: cart-service
cloud:
nacos:
server-addr: 192.168.58.101:8848
sentinel:
transport:
dashboard: localhost:8090
http-method-specify: true

在访问服务的时候,控制台会展示访问接口的统计信息,及相关控制按钮,可以达到对具体某个接口进行管理等操作

image-20240613193840383

请求限流

选择具体接口,点击右侧流控按钮,选择需要限制的阈值类型,输入单机阈值,点击新增,后期可以左侧流控规则这块进行修改操作

image-20240613193945752

线程隔离

如果说微服务接口,调用了其他微服务内部接口,需要在OpenFeign使用处,配置文件开启sentinel

1
2
3
4
5
feign:
okhttp:
enabled: true # 开启OKHttp功能
sentinel:
enabled: true

这里选择并发线程数,选择单机阈值5,表示该查询最多可以同时5个线程使用,如果说接口能每秒处理2个请求,5个线程加起来一共是10个请求,超过的请求会被拒绝掉。

普及知识点

线程(Thread)和QPS(Queries Per Second)是两个不同概念:

  1. 线程(Thread)
    • 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一个进程可以包含多个线程,这些线程共享进程的资源。
    • 在软件开发中,线程常用于实现并发执行,可以同时处理多个任务,提高程序的运行效率。
  2. QPS(Queries Per Second)
    • QPS是衡量系统处理能力的一个重要指标,指的是每秒钟能够处理的请求或查询次数。通常用于评估服务器、数据库等系统的性能。
    • 例如,一个网站能够处理的最大QPS表示它能够同时处理的最大访问量。

因此,线程和QPS是不同层次的概念:线程是操作系统和编程语言级别的概念,用于控制程序执行流程和资源共享;而QPS则是系统性能的一个量化指标,用于衡量系统处理能力和性能表现。

image-20240613195651539

服务熔断

在熔断期间内接口会直接走向接口的失败处理方法,等待熔断时长过去后,再次放开,如果还是慢,就会再次被熔断

熔断策略分慢调用比例异常比例异常数,这块对慢调用做出说明

规则说明:

最大RT:超过200毫秒的请求调用就是慢调用

统计时长:1000ms内的最少5次请求,如果慢调用比例不低于0.5,则触发熔断

熔断时长:20s

最后点击新增,规则生效,生效后,可以在左侧熔断规则处,进行修改,删除操作

image-20240613194711890