【Sentinel部署与流量防护】

提示:本文原创作品,良心制作,干货为主,简洁清晰,一看就会

文章目录

  • 前言
  • 一、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%原创,转载请务必标注原创作者,尊重劳动成果。

求赞、求关注、求评论!你的支持是我更新的最大动力,评论区等你~

相关推荐
952361 天前
Sentinel
java·后端·spring·sentinel·springcloud
渣渣盟2 天前
当 Redis 集群发生主从切换(Failover)时,Flink 任务会崩溃吗?如何利用 Sentinel 实现高可用?
redis·flink·sentinel
xiaoxiangsiyan8 天前
LNMP + Redis Sentinel 高可用架构部署手册(续)
运维·网络·数据库·redis·缓存·架构·sentinel
敲代码的嘎仔8 天前
从零搭建微服务:Spring Cloud Alibaba 全家桶踩坑实录(Nacos + OpenFeign + Gateway + Sentinel)
java·spring boot·spring·spring cloud·微服务·gateway·sentinel
小罗水11 天前
第14章 Sentinel 限流与 AI 降级
人工智能·sentinel
he___H11 天前
Sentinel使用实操
java·开发语言·sentinel
随风M记忆s12 天前
GEE&Python-demo:利用Sentinel-监测北京奥林匹克森林公园年NDVI变化(附Python版)
开发语言·python·sentinel
X-⃢_⃢-X12 天前
六、Sentinel
网络·数据库·sentinel
YOU OU14 天前
Redis哨兵 & 集群
数据库·redis·sentinel