当然可以!以下是一份面向学生(建议为计算机相关专业本科生或研究生)的《Sentinel 入门与实战》教学教案,适合在1-2课时(90-180分钟)内完成讲解与实践。
课程名称:微服务高可用保护 —— Alibaba Sentinel 入门
授课对象:计算机科学与技术、软件工程等相关专业本科生/研究生
课时安排:2课时(90分钟)
授课形式:理论讲解 + 演示 + 动手实验
前置知识:Java 基础、Spring Boot、微服务概念(如 Spring Cloud)
/hello
接口)。情景导入:
想象一下:双十一零点,你的电商系统突然涌入百万用户,某个商品详情接口因数据库压力过大响应变慢,导致整个系统线程耗尽,最终所有功能都不可用 —— 这就是“雪崩效应”。
提问:
- 如何防止一个接口出问题影响整个系统?
- 如何限制流量,避免系统被压垮?
引出主题:
今天我们要学习一个“系统守护者”——**Sentinel**,它能帮我们实现**限流、降级、熔断、系统保护**等功能。
概念 | 说明 |
---|---|
资源(Resource) | 被保护的对象,如一个接口、一段代码、一个服务。 |
规则(Rule) | 对资源施加的控制策略,如每秒最多放行10个请求。 |
限流(Flow Control) | 控制进入系统的流量,防止突发流量压垮系统。 |
降级(Degradation) | 当资源不稳定时(如响应慢、异常多),暂时“降级”处理(返回默认值)。 |
熔断(Circuit Breaking) | 类似保险丝,当错误率过高时,直接拒绝请求一段时间。 |
🎯 类比:把系统比作高速公路,Sentinel 就是交通管理员:
- 限流 = 限速或限车流
- 降级 = 关闭部分车道,优先保障主干道
- 熔断 = 封路维修
# 下载 sentinel-dashboard-1.8.6.jar
java -jar sentinel-dashboard-1.8.6.jar --server.port=8080
访问:http://localhost:8080
,账号密码默认均为 sentinel
。
添加依赖(pom.xml
):
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2022.0.0.0</version>
</dependency>
配置 application.yml
:
server:
port: 8081
spring:
application:
name: sentinel-demo
cloud:
sentinel:
transport:
dashboard: localhost:8080 # 连接控制台
port: 8719 # 与控制台通信端口
创建一个测试接口:
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello from Sentinel!";
}
}
http://localhost:8081/hello
几次。/hello
资源。在 Dashboard 中:
1. 找到 /hello
资源,点击“流控”。
2. 设置:
- QPS 阈值:1
- 流控模式:直接
- 流控效果:快速失败
3. 点击“新增”。
测试:
- 快速刷新浏览器(>1次/秒),观察是否返回 Blocked by Sentinel (flow limiting)
。
✅ 成功!你已经实现了最简单的限流保护。
/hello
添加降级规则。修改代码模拟慢请求:
@GetMapping("/hello")
public String hello() throws InterruptedException {
Thread.sleep(100); // 模拟延迟
return "Hello from Sentinel!";
}
Sentinel —— 微服务的守护者
核心功能:
✅ 限流(Flow Control)
✅ 降级(Degradation)
✅ 熔断(Circuit Breaking)
✅ 系统保护
核心概念:
🔹 资源(Resource) → 被保护的对象
🔹 规则(Rule) → 控制策略
集成步骤:
1. 引依赖
2. 配置连接 Dashboard
3. 定义资源(接口)
4. Dashboard 配置规则
5. 观察效果
口诀:一引二配三访问,四设规则五验证。
Q:为什么 Dashboard 没有显示我的服务?
A:检查端口、依赖版本、网络连接,确保应用启动时能连接到 Dashboard。
Q:流控后如何自定义返回内容?
A:使用 @SentinelResource
注解配置 blockHandler
。
通过本课,学生不仅能掌握 Sentinel 的基本使用,更能理解高可用系统的设计思想,为后续学习微服务架构打下坚实基础。