Sentinel 入门:概念与 Dashboard 接入

第 06 章讲过超时与重试只能应对偶发抖动;当一个下游服务持续变慢或报错,调用方会不断堆积请求,最终拖垮自己——这就是"雪崩"。Sentinel 是 Alibaba 开源的流量防卫组件,提供流控、熔断降级、热点与系统自适应保护,与 Spring Cloud Alibaba 深度集成,是服务侧容错的首选。本章先建立核心概念并接入 Dashboard。

两个核心概念:资源与规则

Sentinel 把"被保护的对象"抽象为资源(Resource),一个 URL、一个方法、一段代码都可以是资源;规则描述"这个资源在什么条件下被保护",例如 QPS 超过 100 就拒绝。资源 + 规则 = 保护动作。规则可以来自控制台、代码或配置中心,运行时 Sentinel 在调用链路上拦截资源并执行规则,这就是它的基本工作方式。

与流式防护的常见误区

流控防的是"入口流量过大打垮自己";熔断防的是"下游出问题拖垮自己"。前者管自己门前的水,后者管自己与坏邻居的关系,两者配合才是完整防线。早年常用 Hystrix 做熔断,Hystrix 已停止演进;Sentinel 在易用性(控制台、规则热更新)与性能上更贴合 Spring Cloud 生态。

引入依赖

工程引入 SCA 的 Sentinel starter(版本由 spring-cloud-alibaba-dependencies BOM 统一管理,内置 Sentinel 客户端版本以官方版本说明为准):

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

引入后无需额外注解,HTTP 接口会自动成为 Sentinel 资源(以 URL 为粒度)。

启动 Dashboard

Dashboard 是 Sentinel 的控制台(可视化配置与监控),从官方发布页下载 sentinel-dashboard 的 jar(写作时主流为 1.8.8,以官方发布为准),本地启动:

java -Dserver.port=8858 -jar sentinel-dashboard-1.8.8.jar

浏览器访问 http://localhost:8858,默认账号 sentinel/sentinel(以官方文档为准)。控制台是独立进程,与应用无耦合,生产上可多实例共享同一 Dashboard。

客户端接入 Dashboard

在应用配置中声明 Dashboard 地址与客户端自身通信端口:

spring:
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8858   # 控制台地址
        port: 8719                  # 客户端与控制台通信的端口
      eager: true                   # 启动即注册,而非首次访问才注册

控制台与应用之间的通信是双向的:应用向控制台上报监控数据与心跳,控制台通过客户端端口下发规则。8719 端口被占用时 Sentinel 会自动尝试后续端口,但生产上建议固定并放通防火墙。

控制台里看什么

应用接入后,控制台的"机器列表"会出现该实例;"实时监控"展示各资源 QPS 曲线;"簇点链路"按调用链展示资源及当前流量,是定位"哪个接口流量异常"的入口;规则管理(流控、熔断降级、热点)则在后续章节逐个实践。注意:控制台配置的规则默认保存在应用内存中,应用重启即丢失,生产环境需要把规则持久化到配置中心或走推送通道,具体方案以官方文档为准。

小结

Sentinel 的三步入门:引入 starter 让接口自动成为资源、启动 Dashboard 作为控制台、配置 transport 让应用与控制台握手。下一步就是从控制台上第一条流控规则开始,理解 QPS 与并发线程两种阈值的差别。

笔记加载中…