第八节 《Sentinel 入门与实战》教学教案

亮子 2025-09-18 20:08:17 20 0 0 0

当然可以!以下是一份面向学生(建议为计算机相关专业本科生或研究生)的《Sentinel 入门与实战》教学教案,适合在1-2课时(90-180分钟)内完成讲解与实践。


《Sentinel 入门与实战》教学教案

课程名称:微服务高可用保护 —— Alibaba Sentinel 入门
授课对象:计算机科学与技术、软件工程等相关专业本科生/研究生
课时安排:2课时(90分钟)
授课形式:理论讲解 + 演示 + 动手实验
前置知识:Java 基础、Spring Boot、微服务概念(如 Spring Cloud)


一、教学目标

  1. 理解微服务架构中流量治理的重要性。
  2. 掌握Sentinel 的核心概念(资源、规则、降级、限流等)。
  3. 学会在 Spring Boot 项目中集成 Sentinel。
  4. 能够配置简单的流控与降级规则,并观察效果。
  5. 激发学生对高可用系统设计的兴趣。

二、教学重点与难点

  • 重点
  • Sentinel 的基本概念与核心功能。
  • 在 Spring Boot 中集成 Sentinel 并配置规则。
  • 难点
  • 理解“资源”与“规则”的抽象关系。
  • 理解熔断降级的触发机制。

三、教学准备

  • 教师准备:
  • 安装好 JDK 1.8+、Maven、IDEA 或 VS Code。
  • 准备好 Sentinel Dashboard(控制台)的启动脚本。
  • 准备一个简单的 Spring Boot Web 项目(提供 /hello 接口)。
  • 学生准备:
  • 安装好开发环境(JDK、Maven、IDE)。
  • 下载示例项目代码(可提前提供 GitHub 链接)。

四、教学流程

第一部分:引入问题(10分钟)

情景导入

想象一下:双十一零点,你的电商系统突然涌入百万用户,某个商品详情接口因数据库压力过大响应变慢,导致整个系统线程耗尽,最终所有功能都不可用 —— 这就是“雪崩效应”。

提问
- 如何防止一个接口出问题影响整个系统?
- 如何限制流量,避免系统被压垮?

引出主题

今天我们要学习一个“系统守护者”——**Sentinel**,它能帮我们实现**限流、降级、熔断、系统保护**等功能。


第二部分:Sentinel 简介(15分钟)

1. 什么是 Sentinel?

  • 由阿里巴巴开源的**轻量级流量治理框架**。
  • 核心功能:**流量控制、熔断降级、系统负载保护、实时监控**。
  • 支持 Java、Go、C++ 等语言,Java 生态最成熟。

2. 为什么需要 Sentinel?

  • 微服务架构中,服务调用链复杂,一个节点故障可能引发雪崩。
  • Sentinel 提供“保险丝”机制,保护系统稳定性。

3. 核心概念(重点讲解)

概念 说明
资源(Resource) 被保护的对象,如一个接口、一段代码、一个服务。
规则(Rule) 对资源施加的控制策略,如每秒最多放行10个请求。
限流(Flow Control) 控制进入系统的流量,防止突发流量压垮系统。
降级(Degradation) 当资源不稳定时(如响应慢、异常多),暂时“降级”处理(返回默认值)。
熔断(Circuit Breaking) 类似保险丝,当错误率过高时,直接拒绝请求一段时间。

🎯 类比:把系统比作高速公路,Sentinel 就是交通管理员:
- 限流 = 限速或限车流
- 降级 = 关闭部分车道,优先保障主干道
- 熔断 = 封路维修


第三部分:动手实践(40分钟)

步骤 1:启动 Sentinel Dashboard(教师演示)

# 下载 sentinel-dashboard-1.8.6.jar
java -jar sentinel-dashboard-1.8.6.jar --server.port=8080

访问:http://localhost:8080,账号密码默认均为 sentinel

步骤 2:创建 Spring Boot 项目(学生跟随)

添加依赖(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!";
    }
}

步骤 3:运行并观察

  1. 启动 Spring Boot 应用。
  2. 访问 http://localhost:8081/hello 几次。
  3. 刷新 Sentinel Dashboard,观察“簇点链路”中是否出现 /hello 资源。

步骤 4:配置流控规则(学生操作)

在 Dashboard 中:
1. 找到 /hello 资源,点击“流控”。
2. 设置:
- QPS 阈值:1
- 流控模式:直接
- 流控效果:快速失败
3. 点击“新增”。

测试
- 快速刷新浏览器(>1次/秒),观察是否返回 Blocked by Sentinel (flow limiting)

✅ 成功!你已经实现了最简单的限流保护。

步骤 5:配置降级规则(可选进阶)

  1. 在 Dashboard 中为 /hello 添加降级规则。
  2. 设置:
  • RT(平均响应时间)> 50ms
  • 异常比例 > 0.5
  • 时间窗口:5 秒
  1. 修改代码模拟慢请求:

    @GetMapping("/hello")
    public String hello() throws InterruptedException {
    Thread.sleep(100); // 模拟延迟
    return "Hello from Sentinel!";
    }
    
  2. 触发后观察是否自动降级(返回 fallback)。

第四部分:总结与拓展(15分钟)

1. 本课小结

  • Sentinel 是微服务中的“流量卫士”。
  • 核心功能:限流、降级、熔断。
  • 通过 Dashboard 可视化配置规则。
  • 保护系统稳定性,防止雪崩。

2. 实际应用场景

  • 秒杀系统:限流 + 降级
  • API 网关:统一接入保护
  • 内部服务调用:防止级联故障

3. 拓展思考

  • Sentinel 如何实现“热点参数限流”?
  • 如何与 Nacos 配合实现规则持久化?
  • 与 Hystrix 有何异同?

4. 课后任务(可选)

  1. 尝试配置“热点参数限流”。
  2. 实现一个 fallback 方法,当接口被限流时返回友好提示。
  3. 阅读 Sentinel 官方文档:https://sentinelguard.io

五、板书设计(可投影)

         Sentinel —— 微服务的守护者

核心功能:
  ✅ 限流(Flow Control)
  ✅ 降级(Degradation)
  ✅ 熔断(Circuit Breaking)
  ✅ 系统保护

核心概念:
  🔹 资源(Resource) → 被保护的对象
  🔹 规则(Rule) → 控制策略

集成步骤:
  1. 引依赖
  2. 配置连接 Dashboard
  3. 定义资源(接口)
  4. Dashboard 配置规则
  5. 观察效果

口诀:一引二配三访问,四设规则五验证。

六、教学反思(教师课后填写)

  • 学生是否理解“资源”与“规则”的抽象?
  • 动手环节是否顺畅?是否需要简化项目?
  • 是否需要增加更多真实案例?

附录:常见问题

  • Q:为什么 Dashboard 没有显示我的服务?
    A:检查端口、依赖版本、网络连接,确保应用启动时能连接到 Dashboard。

  • Q:流控后如何自定义返回内容?
    A:使用 @SentinelResource 注解配置 blockHandler


通过本课,学生不仅能掌握 Sentinel 的基本使用,更能理解高可用系统的设计思想,为后续学习微服务架构打下坚实基础。