Sentinel

一、Sentinel 是什么(正确认知)

Sentinel 是阿里开源的:

👉 分布式流量防护组件

核心能力:

  • 限流(Flow Control)
  • 熔断(Circuit Breaker)
  • 降级(Fallback)
  • 热点参数限流
  • 系统自适应保护

🧠 一句话理解:

Sentinel = 微服务的"流量保险丝 + 安全阀门"


二、为什么必须要 Sentinel(生产真实问题)

如果没有 Sentinel:

复制代码
复制代码
订单服务
↓
用户服务挂了
↓
线程阻塞
↓
Tomcat线程池耗尽
↓
整个系统崩溃(雪崩)

🚨 真实生产问题:

1️⃣ 突发流量(秒杀)

复制代码
复制代码
10万请求瞬间打进来
系统直接崩

2️⃣ 下游服务宕机

复制代码
复制代码
支付服务挂了
→ 订单服务全部卡死

3️⃣ 慢请求拖垮系统

复制代码
复制代码
数据库慢查询
→ 线程阻塞
→ CPU 100%

🧩 三、Sentinel 的核心架构

复制代码
复制代码
请求
 ↓
Slot链(核心)
 ↓
限流 / 熔断 / 系统保护
 ↓
是否放行

核心概念:

概念 作用
Resource 资源(接口/方法)
Slot 拦截器链
Context 请求上下文
Rule 规则

🚦 四、限流(Flow Control)


1️⃣ 限流原理

Sentinel 使用:

✔ 滑动窗口算法(核心)


示例:

复制代码
复制代码
1秒最多 100 请求

超过:

复制代码
复制代码
直接拒绝(BlockException)

2️⃣ 三种限流模式


✅ (1)QPS限流(最常用)

复制代码
复制代码
@SentinelResource(value = "orderApi", blockHandler = "blockHandler")
public String createOrder(){
    return "success";
}

public String blockHandler(BlockException e){
    return "请求过于频繁";
}

📌 规则:

复制代码
复制代码
QPS > 10 → 拒绝

✅ (2)并发线程数限流

复制代码
复制代码
最多 20 个线程同时执行

适用于:

  • 慢接口
  • DB压力接口

✅ (3)热点参数限流(非常重要)

复制代码
复制代码
@SentinelResource(value = "hotKey")
public String getProduct(Long id){
    return "商品:" + id;
}

规则:

复制代码
复制代码
id = 1 → 限流更严格(爆款商品)

👉 秒杀系统核心能力


🔥 五、熔断(Circuit Breaker)


1️⃣ 熔断是什么

复制代码
复制代码
调用失败太多 → 直接不调用

类比:

电路保险丝


2️⃣ 三种状态(必须背)

复制代码
复制代码
CLOSED(关闭)   → 正常调用
OPEN(打开)     → 直接拒绝
HALF_OPEN(半开)→ 尝试恢复

3️⃣ 熔断触发条件

复制代码
复制代码
失败比例 > 50%
或
异常数 > 阈值

4️⃣ 生产级示例

复制代码
复制代码
@SentinelResource(
    value = "userApi",
    fallback = "fallback",
    blockHandler = "blockHandler"
)
public String getUser(Long id){
    if(id == 1){
        throw new RuntimeException("模拟异常");
    }
    return "user";
}

fallback(业务异常)

复制代码
复制代码
public String fallback(Long id){
    return "系统降级返回";
}

blockHandler(限流异常)

复制代码
复制代码
public String blockHandler(Long id, BlockException e){
    return "流量过大";
}

🧠 六、限流 vs 熔断(核心区别)

类型 作用
限流 控制请求进入
熔断 阻止调用下游

例子:

复制代码
复制代码
限流:入口控制(门禁)
熔断:发现坏服务直接断开

🧱 七、降级(Fallback)


1️⃣ 降级场景

  • DB慢
  • RPC失败
  • 第三方接口挂了

示例:

复制代码
复制代码
return "缓存数据 / 默认数据 / 静态数据";

🚨 八、Sentinel 生产级架构(重点)

复制代码
复制代码
Gateway
   ↓
Sentinel(网关限流)
   ↓
Feign调用
   ↓
Sentinel(服务级限流)
   ↓
DB / Redis / MQ

⚙️ 九、Sentinel + Gateway(企业常用)


1️⃣ 网关限流

复制代码
复制代码
spring:
  cloud:
    gateway:
      routes:
        - id: order
          uri: lb://order-service
          predicates:
            - Path=/order/**
          filters:
            - name: RequestRateLimiter

2️⃣ Sentinel网关整合

复制代码
复制代码
API网关统一限流入口

🧠 十、热点商品限流(秒杀核心)


场景:

复制代码
复制代码
商品ID = 1(爆款)

规则:

复制代码
复制代码
普通商品:10 QPS
爆款商品:1 QPS

🧨 十一、真实秒杀系统(重点)


架构:

复制代码
复制代码
Gateway限流
   ↓
Redis库存预扣
   ↓
Sentinel保护
   ↓
MQ异步下单
   ↓
DB落库

防止超卖:

复制代码
复制代码
Redis原子扣减库存

🚨 十二、生产级风控结合 Sentinel


1️⃣ IP限流

复制代码
复制代码
同IP 1秒 10次

2️⃣ 用户限流

复制代码
复制代码
userId + API

3️⃣ 黑名单

复制代码
复制代码
黑名单IP直接拒绝

4️⃣ 防刷组合

复制代码
复制代码
Sentinel + Redis + Gateway + JWT

🔥 十三、面试标准回答(必须背)


❓ Sentinel作用?

👉 标准回答:

Sentinel 是一个流量控制组件,用于实现微服务的限流、熔断和降级。

它通过 Slot 责任链机制,对请求进行实时统计,基于滑动窗口算法实现 QPS 限流,同时支持基于响应时间和错误比例的熔断机制。

在生产环境中,Sentinel 通常与 Gateway、Feign 结合使用,实现入口限流和服务级保护,防止系统雪崩。


❓ 限流 vs 熔断区别?

限流是控制请求进入系统,熔断是保护下游服务,当错误率过高时直接拒绝请求

相关推荐
IT策士2 天前
Redis 从入门到精通:Redis Sentinel 哨兵
数据库·redis·sentinel
一个儒雅随和的男子4 天前
sentinel底层原理剖析以及实战优化
java·网络·sentinel
我是一颗柠檬5 天前
【Java项目技术亮点】接口限流熔断:从Sentinel到令牌桶/漏桶,手把手教你构建高可用服务防护体系
java·数据库·sentinel
Trouvaille ~7 天前
【Redis篇】Redis 哨兵(Sentinel):高可用自动故障转移
数据库·redis·缓存·中间件·sentinel·高可用·哨兵
真实的菜8 天前
Redis 从入门到精通(五):哨兵模式(Sentinel)—— 自动故障转移的完整原理与实战
数据库·redis·sentinel
Demon1_Coder9 天前
Day3-微服务-Sentinel-具体使用
java·微服务·sentinel
常常有10 天前
Redis:哨兵模式 (Sentinel)
redis·python·sentinel
海市公约13 天前
Redis 哨兵模式底层原理与自动故障转移全流程
redis·sentinel·redis哨兵·高可用架构·主观下线·客观下线·leader选举
辞忧九千七14 天前
Redis 哨兵(Sentinel)模式部署教程(基于一主二从架构)
redis·架构·sentinel