提示:本文原创作品,良心制作,干货为主,简洁清晰,一看就会
文章目录
- 前言
- 一、Sentinel基础知识
-
- [1.1 如何解决雪崩](#1.1 如何解决雪崩)
- [1.2 Sentinel是什么](#1.2 Sentinel是什么)
- [1.3 Sentinel的构成](#1.3 Sentinel的构成)
- 二、Sentinel部署
- [三、基于JAVA应用的 Sentinel和 Nacos 实战案例](#三、基于JAVA应用的 Sentinel和 Nacos 实战案例)
-
- [3.1 实验环境](#3.1 实验环境)
- [3.2 运行jar包](#3.2 运行jar包)
- [3.3 流量控制测试](#3.3 流量控制测试)
前言
随着微服务架构的广泛应用,单点服务故障极易逐级扩散,引发服务雪崩,导致整体系统瘫痪,严重影响业务稳定性。Sentinel 作为主流的轻量级流量治理组件,可高效实现限流、熔断降级等防护能力,规避服务雪崩风险。本文从雪崩问题原理与Sentinel基础理论入手,讲解Sentinel部署方式,并结合Java应用、Nacos完成完整实战测试,系统性讲解微服务流量防护的落地流程
一、Sentinel基础知识
1.1 如何解决雪崩
随着微服务的流行,服务和服务之间的调用导致服务的稳定性问题变得越来越重要
雪崩 :微服务调用链里某一个下游服务故障,慢慢向上传导,最终整条链路所有服务都不可用
例如:A 调用 B、B 调用 C;如果 C 挂了,B 大量请求阻塞、线程耗尽,接着 B 也瘫痪;然后 A 跟着被拖垮,故障从单点扩散到整条调用链路,这就是服务雪崩
解决雪崩问题的常见方式有四种:
超时处理:设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待
流量控制:限制业务访问的QPS,避免服务因流量的突增而故障
熔断降级 :由断路器统计业务执行的异常比例,如果超出阈值则会熔断该业务,拦截访问该业务的一切请求。当系统资源(如CPU、内存、线程池)紧张或某服务负载过高时,主动暂时舍弃部分非核心功能或降低服务质量,以保证核心功能的可用性,通过牺牲部分功能来维持系统整体的可用性,避免因局部问题导致全局崩溃
舱壁模式:限定每个业务能使用的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离
1.2 Sentinel是什么
Sentinel 是阿里巴巴开源的流量治理组件,用于保障分布式微服务架构的稳定性,它承接了阿里近10年"双十一"大促的流量考验
核心作用:
流量控制:限制服务每秒处理请求数(QPS),防止突发流量压垮服务
熔断降级:下游服务响应缓慢或错误率上升时,自动切断调用,阻止故障扩散
系统负载保护:当 CPU、内存等整体负载过高,自动拒绝部分请求,避免系统崩溃
适用场景:可用于秒杀抢购这类流量突增场景,也支持消息削峰填谷、服务实时熔断等场景
Sentinel 的核心目标,就是解决微服务领域的服务雪崩问题
1.3 Sentinel的构成
Sentinel主要由 客户端核心库 和 控制台Dashboard 两部分构成:
核心库(Java 客户端):
开发人员通过JAVA调用,不依赖任何框架/库,能够运行于Java 8 及以上的版本的运行时环境,同时对Dubbo / Spring Cloud等框架也有较好的支持
控制台(Dashboard):
可以由运维部署,Dashboard 主要负责管理推送规则、监控、管理机器信息等
二、Sentinel部署
https://github.com/alibaba/Sentinel/releases

Sentinel控制台是一个标准的 Spring Boot应用,以 Spring Boot 的方式运行jar包即可
yaml
root@sentinel:~# java --version
java 21.0.12 2026-07-21 LTS
Java(TM) SE Runtime Environment (build 21.0.12+7-LTS-205)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.12+7-LTS-205, mixed mode, sharing)
root@sentinel:~# wget https://github.com/alibaba/Sentinel/releases/download/1.8.10/sentinel-dashboard-1.8.10.jar
root@sentinel:~# ls
sentinel-dashboard-1.8.10.jar
root@sentinel:~# java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.10.jar
-Dserver.port=8080:指定Sentinel控制台**自身监听端口,访问页面就是 http://ip:8080
-Dcsp.sentinel.dashboard.server=localhost:8080:指定dashboard服务地址(控制台自己注册到自身)
-Dproject.name=sentinel-dashboard:给控制台服务命名,在监控页面展示的服务名
-jar sentinel-dashboard-1.8.10.jar:运行sentinel控制台jar包
这条命令用来启动 Sentinel Dashboard 可视化管控台,**默认端口8080
报错了可以先不用管,只要能访问网页即可
浏览器访问本机ip:8080


yaml
# 每隔 0.5 秒循环访问 /version 接口
root@sentinel:~# while true;do curl 192.168.13.141:8080/version;sleep 0.5;echo;done

添加流量控制规则,限制1秒访问一次

再次每隔 0.5 秒循环访问 /version 接口就会看到一秒内有一次成功一次失败,这样就达到了流量控制的效果

三、基于JAVA应用的 Sentinel和 Nacos 实战案例
3.1 实验环境
| 主机名 | IP地址 | 作用说明 |
|---|---|---|
| nacos | 192.168.13.140 | 运行 Nacos 服务,提供服务注册与发现、配置管理功能 |
| sentinel | 192.168.13.141 | 运行 Sentinel Dashboard(控制台),配置流量控制、熔断降级等规则并监控应用状态 |
| ubuntu | 192.168.13.142 | 运行测试 Java 应用,作为服务提供方,同时向 Nacos 和 Sentinel 完成自动注册 |
3.2 运行jar包
我已提前打好一个可直接运行的 Jar 包,该 Jar 支持注册到 Nacos 并接入 Sentinel,同时开放了/hello接口供访问打jar包:https://blog.csdn.net/m0_63756214/article/details/163700116?spm=1001.2014.3001.5501
yaml
root@ubuntu:~# ls
sentinel-web-test-1.0-SNAPSHOT.jar
# 启动jar包
root@ubuntu:~# java -jar sentinel-web-test-1.0-SNAPSHOT.jar
# 访问页面
root@ubuntu:~# curl 192.168.13.142:8080/hello
Hello, Sentinel! 请求通过了!
实际运维工作中,无需关注 Jar 包的构建过程,我们只负责搭建好 Sentinel Dashboard,交付给开发人员使用。本次为演示 Sentinel 流量控制效果,预先准备了该 Jar 包
运行java程序后,我们可以看到该程序已经被Nacos和Sentinel添加了


3.3 流量控制测试
未做流量控制前,每秒访问两次全部正常

添加流量控制,每秒内允许访问1次

做流量控制后,每秒访问2次必有一次失败,如此,我们就实现了流量控制

注:
文中若有疏漏,欢迎大家指正赐教。
本文为100%原创,转载请务必标注原创作者,尊重劳动成果。
求赞、求关注、求评论!你的支持是我更新的最大动力,评论区等你~