做非法网站的有没有,微信推送怎么做购物网站,开源cms建站系统,wordpress可不可以做论坛一、Sentinel 是什么#xff1f;它能做什么#xff1f;
在深入之前#xff0c;我们先简单了解一下 Sentinel 的核心能力#xff1a;
流量控制#xff08;Flow Control#xff09;#xff1a;就像交通信号灯控制车流量一样#xff0c;Sentinel 可以限制对某个资源它能做什么
在深入之前我们先简单了解一下 Sentinel 的核心能力
流量控制Flow Control就像交通信号灯控制车流量一样Sentinel 可以限制对某个资源比如一个 API 接口的访问频率防止它被过多的请求压垮。常见的规则有 QPS每秒查询率限制、并发线程数限制等。熔断降级Circuit Breaking Degradation当依赖的服务比如下游服务出现故障或响应缓慢时Sentinel 可以暂时“断开”对这个服务的调用熔断或者直接禁止调用某些非核心功能降级避免故障蔓延保证核心业务可用。系统自适应保护System ProtectionSentinel 能根据系统的整体状态如 CPU 使用率、吞吐量等自动调整流量在系统即将达到瓶颈时进行保护防止系统崩溃。
二、安装 Sentinel Dashboard
Sentinel 的核心组件包括 Sentinel Core运行在业务代码中和 Sentinel Dashboard可视化控制台。我们先来安装 Dashboard它是我们配置和管理规则的可视化界面。
2.1 下载 Sentinel Dashboard
访问 Sentinel 的 GitHub Release 页面https://github.com/alibaba/Sentinel/releases
选择一个稳定版本比如我们博客示例用的 1.8.8下载对应的 zip 压缩包。
2.2 解压并启动
解压将下载的 zip 文件解压到你希望存放的目录例如 D:\man\sentinel-dashboard。启动进入解压后的目录你会看到一个 sentinel-dashboard-1.8.8.jar 文件。打开命令行CMD 或 PowerShell进入该目录执行以下命令启动 Dashboard java -Dserver.port8040 -jar sentinel-dashboard-1.8.8.jar* -Dserver.port8040指定 Dashboard 运行的端口号为 8040你可以根据需要修改。
* -jar sentinel-dashboard-1.8.8.jar指定要运行的 JAR 包。你会看到类似以下的日志输出表示启动成功INFO: Sentinel log output type is: fileINFO: Sentinel log charset is: utf-8INFO: Sentinel log base directory is: C:\Users\aixl\logs\cspINFO: Sentinel log level is: INFO:: Spring Boot :: (v2.5.12)...2.3 访问 Dashboard
打开浏览器访问 http://localhost:8040。默认情况下用户名和密码都是空。你可以看到 Sentinel 的登录界面如果没设密码直接进入。
三、集成 Sentinel 到你的 Spring Boot 项目
接下来我们创建一个简单的 Spring Boot 项目并集成 Sentinel让它能被 Dashboard 管理和监控。
3.1 创建 Spring Boot 项目
你可以使用 Spring Initializrhttps://start.spring.io/或者你熟悉的 IDE如 IntelliJ IDEA创建一个基础的 Spring Boot 项目。记得添加 spring-boot-starter-web 依赖以便我们能创建一个简单的 Web 服务。
3.2 添加 Sentinel 依赖
在项目的 pom.xml 文件中添加 Sentinel 的依赖
代码生成完成
XML代码
然后执行 mvn clean install 或 mvn clean package 重新构建项目。
3.3 配置 Sentinel Dashboard 地址
在 application.properties 或 application.yml 文件中配置 Sentinel Dashboard 的地址让我们的项目知道去哪里注册和上报数据
properties
# application.properties
spring.cloud.alibaba.sentinel.dashboard.server-addrlocalhost:8040或者 YAML 格式
# application.yml
spring:cloud:alibaba:sentinel:dashboard: localhost:80403.4 定义一个简单的资源
在 Spring Boot 项目中创建一个简单的 Controller并使用 SentinelResource 注解标记需要被 Sentinel 管理的资源。
import com.alibaba.csp.sentinel.annotation.SentinelResource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;RestController
public class HelloController {// 定义资源名 helloWorldGetMapping(/hello)SentinelResource(value helloWorld)public String hello(RequestParam(value name, defaultValue Stranger) String name) {return Hello, name !;}// 定义一个可能失败或耗时的资源GetMapping(/maybeFail)SentinelResource(value maybeFail, blockHandler handleException)public String maybeFail() {// 模拟一个可能失败的操作double random Math.random();if (random 0.3) {throw new RuntimeException(Oops, something went wrong!);}// 模拟耗时操作try {Thread.sleep((long) (Math.random() * 1000));} catch (InterruptedException e) {Thread.currentThread().interrupt();}return Operation succeeded!;}// 定义 blockHandler 方法当资源被限流或降级时调用public String handleException() {return Oops! Service is busy or unavailable, please try again later.;}
}SentinelResource(value 资源名)value 参数定义了资源的唯一标识符。Sentinel 会根据这个名称来统计调用次数、配置规则等。blockHandler handleException指定当该资源触发了限流或降级规则时应该调用哪个方法来处理。这个方法需要与原方法有相同的参数列表并返回相同类型的结果。
3.5 启动你的 Spring Boot 应用
现在启动你的 Spring Boot 应用。如果一切正常你应该能在 Sentinel Dashboard 的“簇点链路”Clustered Chain页面看到你定义的 helloWorld 和 maybeFail 这两个资源。
四、体验 Sentinel 的核心功能
4.1 流量控制Flow Control
访问资源在浏览器中多次快速访问 http://localhost:8080/hello?nameUser假设你的 Spring Boot 应用了运行在 8080 端口。配置规则回到 Sentinel Dashboard进入“流控规则”页面点击“添加”。 资源名选择 helloWorld。阈值类型选择“QPS”每秒查询数。阈值设置一个较低的值比如 1表示每秒只允许 1 次请求。控制模式选择“直接”。点击“保存”。 测试效果再次快速多次访问 /hello 接口。你会发现当你访问速度超过 1 QPS 时后续的请求会收到 Sentinel 的默认降级响应或者如果你配置了 blockHandler会返回你定义的友好提示。在 Dashboard 的“簇点链路”或“簇点链路详情”页面你可以看到实时的 QPS 统计和被限流的次数。
4.2 熔断降级Circuit Breaking Degradation
访问资源访问 http://localhost:8080/maybeFail多次尝试你会看到有时成功有时失败或耗时较长。配置降级规则进入 Sentinel Dashboard 的“降级规则”页面点击“添加”。 资源名选择 maybeFail。降级策略选择“异常比例”或“RT平均响应时间”。 如果选择“异常比例”设置一个阈值比如 50%统计窗口时长如 1s表示如果在 1 秒内该资源的异常比例超过 50%则触发降级。如果选择“RT”设置一个 RT 阈值如 500ms统计窗口时长如 1s表示如果在 1 秒内该资源的平均响应时间超过 500ms则触发降级。 最小请求设置一个最小请求数如 5表示只有当请求数达到这个值时才进行统计避免误判。点击“保存”。 测试效果持续访问 /maybeFail 接口。当触发了你设置的降级条件后Sentinel 会进入降级状态熔断一段时间内默认 10 秒不再调用这个资源而是直接返回你定义的 blockHandler 方法的结果“Oops! Service is busy or unavailable…”。过了熔断时长后会进入半开状态尝试少量请求如果成功则恢复。
五、总结
通过这篇简单的教程我们安装了 Sentinel Dashboard并将其集成到了一个 Spring Boot 项目中。我们体验了 Sentinel 的两个核心功能流量控制和熔断降级。
这只是 Sentinel 强大功能的冰山一角。Sentinel 还支持热点参数限流、系统规则、授权规则等更多高级特性并且可以很好地与 Nacos、Consul 等注册中心结合实现动态规则配置。
掌握 Sentinel对于构建高可用、稳定可靠的微服务系统至关重要。希望这篇入门教程能帮助你迈出第一步后续可以继续探索 Sentinel 的更多玩法比如结合 Nacos 实现动态规则管理或者深入理解其内部原理。