云计算百科
云计算领域专业知识百科平台

SpringCloud Alibaba Sentinel 教学:限流、熔断、降级、线程/信号量隔离、活动过载保护

前言

在微服务体系中,服务调用链错综复杂,一个下游服务卡顿、超时、流量暴涨,就会向上传导,引发级联雪崩。Sentinel 是阿里开源的流量防护组件,核心能力:限流、熔断降级、线程隔离、系统自适应保护、热点参数防护。

本文结合真实业务案例:大促领券活动,过载时关闭领券写接口,但保留券查询读接口可用,完整讲解Sentinel核心概念、两种隔离模式、规则配置、代码示例、原理图、踩坑总结、对比表格,文末附带复盘总结与面试思考题。

核心目标:保护自身服务,也保护下游依赖,故障不扩散,做到部分功能降级,核心链路可用。


第一部分:Sentinel 基础概念

1.1 什么是Sentinel

Sentinel 面向分布式微服务的流量控制防护组件。核心工作模式:资源埋点 → 设置规则 → 运行时统计QPS、线程数、响应时间、异常比例 → 触发规则执行防护动作。

  • 资源Resource:需要保护的对象,可以是接口、方法、代码块;通过注解@SentinelResource或者API埋点定义。
  • 规则Rule:流控规则、熔断降级规则、系统规则、热点参数规则。
  • Slot责任链:Sentinel底层Slot链依次执行统计、流控、熔断、隔离等逻辑。
  • BlockException:被限流/隔离触发抛出的基础异常;业务捕获该异常做降级兜底逻辑。

和Hystrix对比:Hystrix主要以线程池隔离为主;Sentinel支持信号量隔离,也支持线程池隔离,同时提供丰富限流能力,Hystrix已经停止维护,微服务主流选型Sentinel。

1.2 微服务雪崩是怎么发生的

#mermaid-svg-BTxSC63A7w0kovEi{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-BTxSC63A7w0kovEi .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-BTxSC63A7w0kovEi .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-BTxSC63A7w0kovEi .error-icon{fill:#552222;}#mermaid-svg-BTxSC63A7w0kovEi .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-BTxSC63A7w0kovEi .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-BTxSC63A7w0kovEi .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-BTxSC63A7w0kovEi .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-BTxSC63A7w0kovEi .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-BTxSC63A7w0kovEi .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-BTxSC63A7w0kovEi .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-BTxSC63A7w0kovEi .marker{fill:#333333;stroke:#333333;}#mermaid-svg-BTxSC63A7w0kovEi .marker.cross{stroke:#333333;}#mermaid-svg-BTxSC63A7w0kovEi svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-BTxSC63A7w0kovEi p{margin:0;}#mermaid-svg-BTxSC63A7w0kovEi .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-BTxSC63A7w0kovEi .cluster-label text{fill:#333;}#mermaid-svg-BTxSC63A7w0kovEi .cluster-label span{color:#333;}#mermaid-svg-BTxSC63A7w0kovEi .cluster-label span p{background-color:transparent;}#mermaid-svg-BTxSC63A7w0kovEi .label text,#mermaid-svg-BTxSC63A7w0kovEi span{fill:#333;color:#333;}#mermaid-svg-BTxSC63A7w0kovEi .node rect,#mermaid-svg-BTxSC63A7w0kovEi .node circle,#mermaid-svg-BTxSC63A7w0kovEi .node ellipse,#mermaid-svg-BTxSC63A7w0kovEi .node polygon,#mermaid-svg-BTxSC63A7w0kovEi .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-BTxSC63A7w0kovEi .rough-node .label text,#mermaid-svg-BTxSC63A7w0kovEi .node .label text,#mermaid-svg-BTxSC63A7w0kovEi .image-shape .label,#mermaid-svg-BTxSC63A7w0kovEi .icon-shape .label{text-anchor:middle;}#mermaid-svg-BTxSC63A7w0kovEi .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-BTxSC63A7w0kovEi .rough-node .label,#mermaid-svg-BTxSC63A7w0kovEi .node .label,#mermaid-svg-BTxSC63A7w0kovEi .image-shape .label,#mermaid-svg-BTxSC63A7w0kovEi .icon-shape .label{text-align:center;}#mermaid-svg-BTxSC63A7w0kovEi .node.clickable{cursor:pointer;}#mermaid-svg-BTxSC63A7w0kovEi .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-BTxSC63A7w0kovEi .arrowheadPath{fill:#333333;}#mermaid-svg-BTxSC63A7w0kovEi .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-BTxSC63A7w0kovEi .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-BTxSC63A7w0kovEi .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-BTxSC63A7w0kovEi .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-BTxSC63A7w0kovEi .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-BTxSC63A7w0kovEi .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-BTxSC63A7w0kovEi .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-BTxSC63A7w0kovEi .cluster text{fill:#333;}#mermaid-svg-BTxSC63A7w0kovEi .cluster span{color:#333;}#mermaid-svg-BTxSC63A7w0kovEi div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-BTxSC63A7w0kovEi .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-BTxSC63A7w0kovEi rect.text{fill:none;stroke-width:0;}#mermaid-svg-BTxSC63A7w0kovEi .icon-shape,#mermaid-svg-BTxSC63A7w0kovEi .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-BTxSC63A7w0kovEi .icon-shape p,#mermaid-svg-BTxSC63A7w0kovEi .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-BTxSC63A7w0kovEi .icon-shape .label rect,#mermaid-svg-BTxSC63A7w0kovEi .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-BTxSC63A7w0kovEi .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-BTxSC63A7w0kovEi .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-BTxSC63A7w0kovEi :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

网关

活动领券服务

券库存服务

用户信息服务

券库存服务慢/卡顿大量请求堆积

请求堆积,线程耗尽

新请求全部阻塞

领券服务线程打满连带券查询接口也不可用

现象:下游服务响应变慢,上游大量请求堆积,线程耗尽,整个服务所有接口卡死,哪怕和故障下游无关的接口也无法响应,这就是服务雪崩。
防护手段:限流、熔断降级、线程/信号量隔离。

1.3 快速引入依赖(Maven)

<!– sentinel spring cloud alibaba starter –>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

简单资源埋点示例,注解方式:

/**
* value: 资源名称
* blockHandler: 限流/隔离触发的兜底函数
* fallback: 业务异常的降级函数
*/

@SentinelResource(value = "receiveCoupon", blockHandler = "receiveCouponBlockHandler")
public String receiveCoupon(Long activityId, Long userId){
// 领券业务逻辑
return "领券成功";
}

// blockHandler 兜底,入参必须带上BlockException
public String receiveCouponBlockHandler(Long activityId, Long userId, BlockException ex){
log.warn("领券接口被流量防护拦截", ex);
return "活动访问过于火爆,请稍后重试";
}

⚠️坑点:@SentinelResource注解只对public方法生效,同类内部调用注解不生效,不会走Sentinel防护逻辑。


第二部分:流量限流(FlowRule)

2.1 限流核心概念

限流:限制资源的访问速率,防止请求量超过服务处理能力。Sentinel流控规则FlowRule。

流控模式:

  • 直接:对当前资源本身限流;
  • 关联:关联其他资源,关联资源达到阈值,限流本资源;典型场景:写操作过载,限制查询;
  • 链路:只记录指定调用链路上的流量,只对指定入口限流。
  • #mermaid-svg-IonKIXmdK5N1MuZC{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-IonKIXmdK5N1MuZC .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-IonKIXmdK5N1MuZC .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-IonKIXmdK5N1MuZC .error-icon{fill:#552222;}#mermaid-svg-IonKIXmdK5N1MuZC .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-IonKIXmdK5N1MuZC .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-IonKIXmdK5N1MuZC .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-IonKIXmdK5N1MuZC .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-IonKIXmdK5N1MuZC .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-IonKIXmdK5N1MuZC .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-IonKIXmdK5N1MuZC .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-IonKIXmdK5N1MuZC .marker{fill:#333333;stroke:#333333;}#mermaid-svg-IonKIXmdK5N1MuZC .marker.cross{stroke:#333333;}#mermaid-svg-IonKIXmdK5N1MuZC svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-IonKIXmdK5N1MuZC p{margin:0;}#mermaid-svg-IonKIXmdK5N1MuZC .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-IonKIXmdK5N1MuZC .cluster-label text{fill:#333;}#mermaid-svg-IonKIXmdK5N1MuZC .cluster-label span{color:#333;}#mermaid-svg-IonKIXmdK5N1MuZC .cluster-label span p{background-color:transparent;}#mermaid-svg-IonKIXmdK5N1MuZC .label text,#mermaid-svg-IonKIXmdK5N1MuZC span{fill:#333;color:#333;}#mermaid-svg-IonKIXmdK5N1MuZC .node rect,#mermaid-svg-IonKIXmdK5N1MuZC .node circle,#mermaid-svg-IonKIXmdK5N1MuZC .node ellipse,#mermaid-svg-IonKIXmdK5N1MuZC .node polygon,#mermaid-svg-IonKIXmdK5N1MuZC .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-IonKIXmdK5N1MuZC .rough-node .label text,#mermaid-svg-IonKIXmdK5N1MuZC .node .label text,#mermaid-svg-IonKIXmdK5N1MuZC .image-shape .label,#mermaid-svg-IonKIXmdK5N1MuZC .icon-shape .label{text-anchor:middle;}#mermaid-svg-IonKIXmdK5N1MuZC .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-IonKIXmdK5N1MuZC .rough-node .label,#mermaid-svg-IonKIXmdK5N1MuZC .node .label,#mermaid-svg-IonKIXmdK5N1MuZC .image-shape .label,#mermaid-svg-IonKIXmdK5N1MuZC .icon-shape .label{text-align:center;}#mermaid-svg-IonKIXmdK5N1MuZC .node.clickable{cursor:pointer;}#mermaid-svg-IonKIXmdK5N1MuZC .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-IonKIXmdK5N1MuZC .arrowheadPath{fill:#333333;}#mermaid-svg-IonKIXmdK5N1MuZC .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-IonKIXmdK5N1MuZC .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-IonKIXmdK5N1MuZC .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-IonKIXmdK5N1MuZC .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-IonKIXmdK5N1MuZC .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-IonKIXmdK5N1MuZC .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-IonKIXmdK5N1MuZC .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-IonKIXmdK5N1MuZC .cluster text{fill:#333;}#mermaid-svg-IonKIXmdK5N1MuZC .cluster span{color:#333;}#mermaid-svg-IonKIXmdK5N1MuZC div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-IonKIXmdK5N1MuZC .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-IonKIXmdK5N1MuZC rect.text{fill:none;stroke-width:0;}#mermaid-svg-IonKIXmdK5N1MuZC .icon-shape,#mermaid-svg-IonKIXmdK5N1MuZC .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-IonKIXmdK5N1MuZC .icon-shape p,#mermaid-svg-IonKIXmdK5N1MuZC .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-IonKIXmdK5N1MuZC .icon-shape .label rect,#mermaid-svg-IonKIXmdK5N1MuZC .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-IonKIXmdK5N1MuZC .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-IonKIXmdK5N1MuZC .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-IonKIXmdK5N1MuZC :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    流控模式

    直接限流

    资源R自身QPS达到阈值拦截R的请求

    关联限流

    监控关联资源R_writeR_write流量超限 → 拦截R_read

    案例:领券写流量暴增,限制查询接口

    链路限流

    资源R可从多个入口调用只统计入口Entrance1的流量,Entrance2不统计

    用户

    流控效果:

    • 快速失败:达到阈值直接抛出BlockException;
    • Warm Up(预热):冷启动,阈值缓慢上升,应对系统刚启动JIT未预热;
    • 排队等待:漏桶模式,匀速处理请求,允许请求排队,设置最大等待时间。

    #mermaid-svg-wZWW4movyUF5BZLe{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-wZWW4movyUF5BZLe .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-wZWW4movyUF5BZLe .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-wZWW4movyUF5BZLe .error-icon{fill:#552222;}#mermaid-svg-wZWW4movyUF5BZLe .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-wZWW4movyUF5BZLe .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-wZWW4movyUF5BZLe .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-wZWW4movyUF5BZLe .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-wZWW4movyUF5BZLe .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-wZWW4movyUF5BZLe .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-wZWW4movyUF5BZLe .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-wZWW4movyUF5BZLe .marker{fill:#333333;stroke:#333333;}#mermaid-svg-wZWW4movyUF5BZLe .marker.cross{stroke:#333333;}#mermaid-svg-wZWW4movyUF5BZLe svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-wZWW4movyUF5BZLe p{margin:0;}#mermaid-svg-wZWW4movyUF5BZLe .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-wZWW4movyUF5BZLe .cluster-label text{fill:#333;}#mermaid-svg-wZWW4movyUF5BZLe .cluster-label span{color:#333;}#mermaid-svg-wZWW4movyUF5BZLe .cluster-label span p{background-color:transparent;}#mermaid-svg-wZWW4movyUF5BZLe .label text,#mermaid-svg-wZWW4movyUF5BZLe span{fill:#333;color:#333;}#mermaid-svg-wZWW4movyUF5BZLe .node rect,#mermaid-svg-wZWW4movyUF5BZLe .node circle,#mermaid-svg-wZWW4movyUF5BZLe .node ellipse,#mermaid-svg-wZWW4movyUF5BZLe .node polygon,#mermaid-svg-wZWW4movyUF5BZLe .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-wZWW4movyUF5BZLe .rough-node .label text,#mermaid-svg-wZWW4movyUF5BZLe .node .label text,#mermaid-svg-wZWW4movyUF5BZLe .image-shape .label,#mermaid-svg-wZWW4movyUF5BZLe .icon-shape .label{text-anchor:middle;}#mermaid-svg-wZWW4movyUF5BZLe .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-wZWW4movyUF5BZLe .rough-node .label,#mermaid-svg-wZWW4movyUF5BZLe .node .label,#mermaid-svg-wZWW4movyUF5BZLe .image-shape .label,#mermaid-svg-wZWW4movyUF5BZLe .icon-shape .label{text-align:center;}#mermaid-svg-wZWW4movyUF5BZLe .node.clickable{cursor:pointer;}#mermaid-svg-wZWW4movyUF5BZLe .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-wZWW4movyUF5BZLe .arrowheadPath{fill:#333333;}#mermaid-svg-wZWW4movyUF5BZLe .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-wZWW4movyUF5BZLe .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-wZWW4movyUF5BZLe .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wZWW4movyUF5BZLe .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-wZWW4movyUF5BZLe .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wZWW4movyUF5BZLe .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-wZWW4movyUF5BZLe .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-wZWW4movyUF5BZLe .cluster text{fill:#333;}#mermaid-svg-wZWW4movyUF5BZLe .cluster span{color:#333;}#mermaid-svg-wZWW4movyUF5BZLe div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-wZWW4movyUF5BZLe .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-wZWW4movyUF5BZLe rect.text{fill:none;stroke-width:0;}#mermaid-svg-wZWW4movyUF5BZLe .icon-shape,#mermaid-svg-wZWW4movyUF5BZLe .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wZWW4movyUF5BZLe .icon-shape p,#mermaid-svg-wZWW4movyUF5BZLe .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-wZWW4movyUF5BZLe .icon-shape .label rect,#mermaid-svg-wZWW4movyUF5BZLe .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wZWW4movyUF5BZLe .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-wZWW4movyUF5BZLe .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-wZWW4movyUF5BZLe :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    流控效果

    快速失败

    QPS超限 → 立刻拒绝,抛出BlockException

    Warm Up预热

    启动初期阈值低,逐步提升至设定阈值避免冷启动流量打垮服务

    排队等待-漏桶

    请求进入队列,匀速放行超出最大等待时间直接拒绝

    流控属性说明生产实践
    resource 受保护资源名 和@SentinelResourcevalue保持一致
    count 阈值 QPS阈值,每秒允许请求数
    grade 阈值类型:0线程数,1 QPS 绝大多数场景使用QPS(1)
    strategy 流控模式:直接/关联/链路 大促写过载保护读使用关联模式
    controlBehavior 流控效果:快速失败/warmup/排队 接口普通限流用快速失败;异步消息可用排队等待

    Java代码定义流控规则示例(也可以在Sentinel控制台配置持久化到Nacos)

    private void initFlowRule(){
    List<FlowRule> rules = new ArrayList<>();
    FlowRule rule = new FlowRule();
    rule.setResource("receiveCoupon");
    rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
    rule.setCount(200); // QPS限制200
    rule.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_DEFAULT);
    rules.add(rule);
    FlowRuleManager.loadRules(rules);
    }

    2.2 业务案例:大促活动过载:关闭领券(写),保留券查询(读)

    业务需求:活动流量洪峰,领券写接口过载,直接限制领券,但是券查询读接口必须正常对外提供服务。

    方案:使用关联流控模式

    • 资源A:receiveCoupon 领券写接口
    • 资源B:queryCoupon 券查询读接口
    • 设置流控规则:对queryCoupon设置关联资源为receiveCoupon。
      含义:当receiveCoupon领券的QPS超过阈值,触发限流,限制领券;查询接口本身不受影响。

    #mermaid-svg-vrMEVAUNPs0LHDv1{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-vrMEVAUNPs0LHDv1 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-vrMEVAUNPs0LHDv1 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-vrMEVAUNPs0LHDv1 .error-icon{fill:#552222;}#mermaid-svg-vrMEVAUNPs0LHDv1 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-vrMEVAUNPs0LHDv1 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-vrMEVAUNPs0LHDv1 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-vrMEVAUNPs0LHDv1 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-vrMEVAUNPs0LHDv1 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-vrMEVAUNPs0LHDv1 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-vrMEVAUNPs0LHDv1 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-vrMEVAUNPs0LHDv1 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-vrMEVAUNPs0LHDv1 .marker.cross{stroke:#333333;}#mermaid-svg-vrMEVAUNPs0LHDv1 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-vrMEVAUNPs0LHDv1 p{margin:0;}#mermaid-svg-vrMEVAUNPs0LHDv1 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-vrMEVAUNPs0LHDv1 .cluster-label text{fill:#333;}#mermaid-svg-vrMEVAUNPs0LHDv1 .cluster-label span{color:#333;}#mermaid-svg-vrMEVAUNPs0LHDv1 .cluster-label span p{background-color:transparent;}#mermaid-svg-vrMEVAUNPs0LHDv1 .label text,#mermaid-svg-vrMEVAUNPs0LHDv1 span{fill:#333;color:#333;}#mermaid-svg-vrMEVAUNPs0LHDv1 .node rect,#mermaid-svg-vrMEVAUNPs0LHDv1 .node circle,#mermaid-svg-vrMEVAUNPs0LHDv1 .node ellipse,#mermaid-svg-vrMEVAUNPs0LHDv1 .node polygon,#mermaid-svg-vrMEVAUNPs0LHDv1 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-vrMEVAUNPs0LHDv1 .rough-node .label text,#mermaid-svg-vrMEVAUNPs0LHDv1 .node .label text,#mermaid-svg-vrMEVAUNPs0LHDv1 .image-shape .label,#mermaid-svg-vrMEVAUNPs0LHDv1 .icon-shape .label{text-anchor:middle;}#mermaid-svg-vrMEVAUNPs0LHDv1 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-vrMEVAUNPs0LHDv1 .rough-node .label,#mermaid-svg-vrMEVAUNPs0LHDv1 .node .label,#mermaid-svg-vrMEVAUNPs0LHDv1 .image-shape .label,#mermaid-svg-vrMEVAUNPs0LHDv1 .icon-shape .label{text-align:center;}#mermaid-svg-vrMEVAUNPs0LHDv1 .node.clickable{cursor:pointer;}#mermaid-svg-vrMEVAUNPs0LHDv1 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-vrMEVAUNPs0LHDv1 .arrowheadPath{fill:#333333;}#mermaid-svg-vrMEVAUNPs0LHDv1 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-vrMEVAUNPs0LHDv1 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-vrMEVAUNPs0LHDv1 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-vrMEVAUNPs0LHDv1 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-vrMEVAUNPs0LHDv1 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-vrMEVAUNPs0LHDv1 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-vrMEVAUNPs0LHDv1 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-vrMEVAUNPs0LHDv1 .cluster text{fill:#333;}#mermaid-svg-vrMEVAUNPs0LHDv1 .cluster span{color:#333;}#mermaid-svg-vrMEVAUNPs0LHDv1 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-vrMEVAUNPs0LHDv1 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-vrMEVAUNPs0LHDv1 rect.text{fill:none;stroke-width:0;}#mermaid-svg-vrMEVAUNPs0LHDv1 .icon-shape,#mermaid-svg-vrMEVAUNPs0LHDv1 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-vrMEVAUNPs0LHDv1 .icon-shape p,#mermaid-svg-vrMEVAUNPs0LHDv1 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-vrMEVAUNPs0LHDv1 .icon-shape .label rect,#mermaid-svg-vrMEVAUNPs0LHDv1 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-vrMEVAUNPs0LHDv1 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-vrMEVAUNPs0LHDv1 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-vrMEVAUNPs0LHDv1 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    大促活动服务

    QPS 超过 300 触发阈值

    拦截写请求

    领券 receiveCoupon 写资源

    券查询 queryCoupon 读资源

    流控规则资源:queryCoupon模式:关联关联资源:receiveCoupon阈值QPS=300

    用户

    查询读接口不受影响,正常返回

    注意:关联流控:阈值是关联资源的指标,限流作用在当前配置的资源上。不要搞反配置对象。

    Java代码定义流控规则示例(也可以在Sentinel控制台配置持久化到Nacos)

    private void initFlowRule(){
    List<FlowRule> rules = new ArrayList<>();
    FlowRule rule = new FlowRule();
    rule.setResource("receiveCoupon");
    rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
    rule.setCount(200); // QPS限制200
    rule.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_DEFAULT);
    rules.add(rule);
    FlowRuleManager.loadRules(rules);
    }

    2.2 业务案例:大促活动过载:关闭领券(写),保留券查询(读)

    业务需求:活动流量洪峰,领券写接口过载,直接限制领券,但是券查询读接口必须正常对外提供服务。

    方案:使用关联流控模式

    • 资源A:receiveCoupon 领券写接口
    • 资源B:queryCoupon 券查询读接口
    • 设置流控规则:对queryCoupon设置关联资源为receiveCoupon。
      含义:当receiveCoupon领券的QPS超过阈值,触发限流,限制领券;查询接口本身不受影响。

    #mermaid-svg-f6DXgEMY2jXgcBwm{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-f6DXgEMY2jXgcBwm .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-f6DXgEMY2jXgcBwm .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-f6DXgEMY2jXgcBwm .error-icon{fill:#552222;}#mermaid-svg-f6DXgEMY2jXgcBwm .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-f6DXgEMY2jXgcBwm .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-f6DXgEMY2jXgcBwm .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-f6DXgEMY2jXgcBwm .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-f6DXgEMY2jXgcBwm .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-f6DXgEMY2jXgcBwm .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-f6DXgEMY2jXgcBwm .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-f6DXgEMY2jXgcBwm .marker{fill:#333333;stroke:#333333;}#mermaid-svg-f6DXgEMY2jXgcBwm .marker.cross{stroke:#333333;}#mermaid-svg-f6DXgEMY2jXgcBwm svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-f6DXgEMY2jXgcBwm p{margin:0;}#mermaid-svg-f6DXgEMY2jXgcBwm .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-f6DXgEMY2jXgcBwm .cluster-label text{fill:#333;}#mermaid-svg-f6DXgEMY2jXgcBwm .cluster-label span{color:#333;}#mermaid-svg-f6DXgEMY2jXgcBwm .cluster-label span p{background-color:transparent;}#mermaid-svg-f6DXgEMY2jXgcBwm .label text,#mermaid-svg-f6DXgEMY2jXgcBwm span{fill:#333;color:#333;}#mermaid-svg-f6DXgEMY2jXgcBwm .node rect,#mermaid-svg-f6DXgEMY2jXgcBwm .node circle,#mermaid-svg-f6DXgEMY2jXgcBwm .node ellipse,#mermaid-svg-f6DXgEMY2jXgcBwm .node polygon,#mermaid-svg-f6DXgEMY2jXgcBwm .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-f6DXgEMY2jXgcBwm .rough-node .label text,#mermaid-svg-f6DXgEMY2jXgcBwm .node .label text,#mermaid-svg-f6DXgEMY2jXgcBwm .image-shape .label,#mermaid-svg-f6DXgEMY2jXgcBwm .icon-shape .label{text-anchor:middle;}#mermaid-svg-f6DXgEMY2jXgcBwm .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-f6DXgEMY2jXgcBwm .rough-node .label,#mermaid-svg-f6DXgEMY2jXgcBwm .node .label,#mermaid-svg-f6DXgEMY2jXgcBwm .image-shape .label,#mermaid-svg-f6DXgEMY2jXgcBwm .icon-shape .label{text-align:center;}#mermaid-svg-f6DXgEMY2jXgcBwm .node.clickable{cursor:pointer;}#mermaid-svg-f6DXgEMY2jXgcBwm .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-f6DXgEMY2jXgcBwm .arrowheadPath{fill:#333333;}#mermaid-svg-f6DXgEMY2jXgcBwm .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-f6DXgEMY2jXgcBwm .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-f6DXgEMY2jXgcBwm .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-f6DXgEMY2jXgcBwm .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-f6DXgEMY2jXgcBwm .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-f6DXgEMY2jXgcBwm .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-f6DXgEMY2jXgcBwm .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-f6DXgEMY2jXgcBwm .cluster text{fill:#333;}#mermaid-svg-f6DXgEMY2jXgcBwm .cluster span{color:#333;}#mermaid-svg-f6DXgEMY2jXgcBwm div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-f6DXgEMY2jXgcBwm .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-f6DXgEMY2jXgcBwm rect.text{fill:none;stroke-width:0;}#mermaid-svg-f6DXgEMY2jXgcBwm .icon-shape,#mermaid-svg-f6DXgEMY2jXgcBwm .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-f6DXgEMY2jXgcBwm .icon-shape p,#mermaid-svg-f6DXgEMY2jXgcBwm .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-f6DXgEMY2jXgcBwm .icon-shape .label rect,#mermaid-svg-f6DXgEMY2jXgcBwm .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-f6DXgEMY2jXgcBwm .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-f6DXgEMY2jXgcBwm .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-f6DXgEMY2jXgcBwm :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    大促活动服务

    QPS 超过 300 触发阈值

    拦截写请求

    领券 receiveCoupon 写资源

    券查询 queryCoupon 读资源

    流控规则资源:queryCoupon模式:关联关联资源:receiveCoupon阈值QPS=300

    User

    查询读接口不受影响,正常返回

    注意:关联流控:阈值是关联资源的指标,限流作用在当前配置的资源上。不要搞反配置对象。


    第三部分:熔断降级 DegradeRule

    3.1 熔断降级是什么

    限流解决流量过大;熔断降级解决下游依赖不稳定、慢调用问题。
    当调用下游服务出现大量慢调用、异常,达到阈值,Sentinel打开熔断器,短时间内直接拒绝调用该资源,执行降级兜底逻辑,避免大量超时请求堆积耗尽线程。

    Sentinel 三种熔断策略:

    熔断策略grade值触发条件适用场景
    慢调用比例 0 超过最大RT的请求占比达到阈值 下游接口响应缓慢,IO耗时高
    异常比例 1 异常请求占比超过阈值 业务抛出异常,报错激增
    异常数 2 单位时间内异常总数达到阈值 短时间大量报错

    熔断器状态流转:

    #mermaid-svg-fF9V8t1FfBCatvkJ{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-fF9V8t1FfBCatvkJ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-fF9V8t1FfBCatvkJ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-fF9V8t1FfBCatvkJ .error-icon{fill:#552222;}#mermaid-svg-fF9V8t1FfBCatvkJ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-fF9V8t1FfBCatvkJ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-fF9V8t1FfBCatvkJ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-fF9V8t1FfBCatvkJ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-fF9V8t1FfBCatvkJ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-fF9V8t1FfBCatvkJ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-fF9V8t1FfBCatvkJ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-fF9V8t1FfBCatvkJ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-fF9V8t1FfBCatvkJ .marker.cross{stroke:#333333;}#mermaid-svg-fF9V8t1FfBCatvkJ svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-fF9V8t1FfBCatvkJ p{margin:0;}#mermaid-svg-fF9V8t1FfBCatvkJ defs #statediagram-barbEnd{fill:#333333;stroke:#333333;}#mermaid-svg-fF9V8t1FfBCatvkJ g.stateGroup text{fill:#9370DB;stroke:none;font-size:10px;}#mermaid-svg-fF9V8t1FfBCatvkJ g.stateGroup text{fill:#333;stroke:none;font-size:10px;}#mermaid-svg-fF9V8t1FfBCatvkJ g.stateGroup .state-title{font-weight:bolder;fill:#131300;}#mermaid-svg-fF9V8t1FfBCatvkJ g.stateGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-fF9V8t1FfBCatvkJ g.stateGroup line{stroke:#333333;stroke-width:1;}#mermaid-svg-fF9V8t1FfBCatvkJ .transition{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-fF9V8t1FfBCatvkJ .stateGroup .composit{fill:white;border-bottom:1px;}#mermaid-svg-fF9V8t1FfBCatvkJ .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px;}#mermaid-svg-fF9V8t1FfBCatvkJ .state-note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-fF9V8t1FfBCatvkJ .state-note text{fill:black;stroke:none;font-size:10px;}#mermaid-svg-fF9V8t1FfBCatvkJ .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-fF9V8t1FfBCatvkJ .edgeLabel .label rect{fill:#ECECFF;opacity:0.5;}#mermaid-svg-fF9V8t1FfBCatvkJ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-fF9V8t1FfBCatvkJ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-fF9V8t1FfBCatvkJ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-fF9V8t1FfBCatvkJ .edgeLabel .label text{fill:#333;}#mermaid-svg-fF9V8t1FfBCatvkJ .label div .edgeLabel{color:#333;}#mermaid-svg-fF9V8t1FfBCatvkJ .stateLabel text{fill:#131300;font-size:10px;font-weight:bold;}#mermaid-svg-fF9V8t1FfBCatvkJ .node circle.state-start{fill:#333333;stroke:#333333;}#mermaid-svg-fF9V8t1FfBCatvkJ .node .fork-join{fill:#333333;stroke:#333333;}#mermaid-svg-fF9V8t1FfBCatvkJ .node circle.state-end{fill:#9370DB;stroke:white;stroke-width:1.5;}#mermaid-svg-fF9V8t1FfBCatvkJ .end-state-inner{fill:white;stroke-width:1.5;}#mermaid-svg-fF9V8t1FfBCatvkJ .node rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-fF9V8t1FfBCatvkJ .node polygon{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-fF9V8t1FfBCatvkJ #statediagram-barbEnd{fill:#333333;}#mermaid-svg-fF9V8t1FfBCatvkJ .statediagram-cluster rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-fF9V8t1FfBCatvkJ .cluster-label,#mermaid-svg-fF9V8t1FfBCatvkJ .nodeLabel{color:#131300;}#mermaid-svg-fF9V8t1FfBCatvkJ .statediagram-cluster rect.outer{rx:5px;ry:5px;}#mermaid-svg-fF9V8t1FfBCatvkJ .statediagram-state .divider{stroke:#9370DB;}#mermaid-svg-fF9V8t1FfBCatvkJ .statediagram-state .title-state{rx:5px;ry:5px;}#mermaid-svg-fF9V8t1FfBCatvkJ .statediagram-cluster.statediagram-cluster .inner{fill:white;}#mermaid-svg-fF9V8t1FfBCatvkJ .statediagram-cluster.statediagram-cluster-alt .inner{fill:#f0f0f0;}#mermaid-svg-fF9V8t1FfBCatvkJ .statediagram-cluster .inner{rx:0;ry:0;}#mermaid-svg-fF9V8t1FfBCatvkJ .statediagram-state rect.basic{rx:5px;ry:5px;}#mermaid-svg-fF9V8t1FfBCatvkJ .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#f0f0f0;}#mermaid-svg-fF9V8t1FfBCatvkJ .note-edge{stroke-dasharray:5;}#mermaid-svg-fF9V8t1FfBCatvkJ .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-fF9V8t1FfBCatvkJ .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-fF9V8t1FfBCatvkJ .statediagram-note text{fill:black;}#mermaid-svg-fF9V8t1FfBCatvkJ .statediagram-note .nodeLabel{color:black;}#mermaid-svg-fF9V8t1FfBCatvkJ .statediagram .edgeLabel{color:red;}#mermaid-svg-fF9V8t1FfBCatvkJ #dependencyStart,#mermaid-svg-fF9V8t1FfBCatvkJ #dependencyEnd{fill:#333333;stroke:#333333;stroke-width:1;}#mermaid-svg-fF9V8t1FfBCatvkJ .statediagramTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-fF9V8t1FfBCatvkJ :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    初始关闭状态,正常放行请求

    统计窗口内达到熔断阈值,打开熔断

    熔断时间窗口结束,进入半开

    探测请求成功,关闭熔断器恢复

    探测请求失败,重新打开熔断

    CLOSED

    OPEN

    HALF_OPEN

    • CLOSED关闭:正常放行请求,做指标统计;
    • OPEN打开:熔断开启,所有请求直接走降级,不执行业务调用;
    • HALF_OPEN半开:时间窗口到期,放行少量探测请求,探测下游是否恢复。

    DegradeRule关键参数:

  • resource:受保护资源;
  • grade:熔断策略;
  • count:阈值(慢调用RT阈值 / 异常比例 / 异常数量);
  • timeWindow:熔断打开持续时间(秒);
  • minRequestAmount:最小请求数,低于该数值不会触发熔断;
  • statIntervalMs:统计时间窗口,毫秒。
  • 代码示例:慢调用比例熔断

    DegradeRule degradeRule = new DegradeRule("couponStockApi")
    .setGrade(RuleConstant.DEGRADE_GRADE_SLOW_RATIO)
    .setCount(500) // RT大于500ms判定为慢调用
    .setTimeWindow(10) //熔断窗口10秒
    .setSlowRatioThreshold(0.6) //60%请求慢调用触发熔断
    .setMinRequestAmount(10);

    3.2 fallback 与 blockHandler 的区别(高频面试)

    属性blockHandlerfallback
    触发时机 限流、熔断、隔离等Sentinel流量防护抛出BlockException 业务方法本身抛出任意异常
    作用 流量防护拦截兜底 业务异常兜底返回降级结果
    异常入参 必须携带BlockException 不需要
    典型场景 访问太火爆,请稍后重试 下游出错返回缓存数据、默认值

    最佳实践:两个同时配置。流量打满走blockHandler;业务报错走fallback。


    第四部分:线程隔离 & 信号量隔离

    4.1 两种隔离模式对比(面试重中之重)

    隔离目的:某个依赖的慢调用,只耗尽分配给它的资源,不能拖垮整个服务全部线程。
    Sentinel 默认是信号量隔离;Sentinel也支持线程池隔离(类似Hystrix)。

    ⚠️Sentinel注解默认不是线程池隔离!很多开发者踩坑。

    对比维度信号量隔离(Sentinel默认)线程池隔离
    底层实现 当前调用线程执行,通过计数器控制并发数 独立业务线程池执行任务
    线程来源 Tomcat/Web容器线程 自定义隔离线程池
    超时控制 不支持线程超时中断 支持线程池超时
    资源开销 轻量,无线程创建开销 较重,每个资源创建线程池
    上下文传递 请求上下文可直接传递 需要手动传递上下文(MDC、请求头)
    适用场景 内部接口、内存运算、本地逻辑;不依赖超时中断 外部RPC调用、第三方HTTP调用,需要超时销毁阻塞线程

    #mermaid-svg-97LM7t3uDvk75NwS{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-97LM7t3uDvk75NwS .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-97LM7t3uDvk75NwS .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-97LM7t3uDvk75NwS .error-icon{fill:#552222;}#mermaid-svg-97LM7t3uDvk75NwS .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-97LM7t3uDvk75NwS .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-97LM7t3uDvk75NwS .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-97LM7t3uDvk75NwS .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-97LM7t3uDvk75NwS .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-97LM7t3uDvk75NwS .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-97LM7t3uDvk75NwS .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-97LM7t3uDvk75NwS .marker{fill:#333333;stroke:#333333;}#mermaid-svg-97LM7t3uDvk75NwS .marker.cross{stroke:#333333;}#mermaid-svg-97LM7t3uDvk75NwS svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-97LM7t3uDvk75NwS p{margin:0;}#mermaid-svg-97LM7t3uDvk75NwS .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-97LM7t3uDvk75NwS .cluster-label text{fill:#333;}#mermaid-svg-97LM7t3uDvk75NwS .cluster-label span{color:#333;}#mermaid-svg-97LM7t3uDvk75NwS .cluster-label span p{background-color:transparent;}#mermaid-svg-97LM7t3uDvk75NwS .label text,#mermaid-svg-97LM7t3uDvk75NwS span{fill:#333;color:#333;}#mermaid-svg-97LM7t3uDvk75NwS .node rect,#mermaid-svg-97LM7t3uDvk75NwS .node circle,#mermaid-svg-97LM7t3uDvk75NwS .node ellipse,#mermaid-svg-97LM7t3uDvk75NwS .node polygon,#mermaid-svg-97LM7t3uDvk75NwS .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-97LM7t3uDvk75NwS .rough-node .label text,#mermaid-svg-97LM7t3uDvk75NwS .node .label text,#mermaid-svg-97LM7t3uDvk75NwS .image-shape .label,#mermaid-svg-97LM7t3uDvk75NwS .icon-shape .label{text-anchor:middle;}#mermaid-svg-97LM7t3uDvk75NwS .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-97LM7t3uDvk75NwS .rough-node .label,#mermaid-svg-97LM7t3uDvk75NwS .node .label,#mermaid-svg-97LM7t3uDvk75NwS .image-shape .label,#mermaid-svg-97LM7t3uDvk75NwS .icon-shape .label{text-align:center;}#mermaid-svg-97LM7t3uDvk75NwS .node.clickable{cursor:pointer;}#mermaid-svg-97LM7t3uDvk75NwS .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-97LM7t3uDvk75NwS .arrowheadPath{fill:#333333;}#mermaid-svg-97LM7t3uDvk75NwS .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-97LM7t3uDvk75NwS .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-97LM7t3uDvk75NwS .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-97LM7t3uDvk75NwS .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-97LM7t3uDvk75NwS .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-97LM7t3uDvk75NwS .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-97LM7t3uDvk75NwS .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-97LM7t3uDvk75NwS .cluster text{fill:#333;}#mermaid-svg-97LM7t3uDvk75NwS .cluster span{color:#333;}#mermaid-svg-97LM7t3uDvk75NwS div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-97LM7t3uDvk75NwS .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-97LM7t3uDvk75NwS rect.text{fill:none;stroke-width:0;}#mermaid-svg-97LM7t3uDvk75NwS .icon-shape,#mermaid-svg-97LM7t3uDvk75NwS .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-97LM7t3uDvk75NwS .icon-shape p,#mermaid-svg-97LM7t3uDvk75NwS .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-97LM7t3uDvk75NwS .icon-shape .label rect,#mermaid-svg-97LM7t3uDvk75NwS .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-97LM7t3uDvk75NwS .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-97LM7t3uDvk75NwS .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-97LM7t3uDvk75NwS :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    线程池隔离

    线程可用

    线程耗尽

    Tomcat线程

    独立隔离线程池

    执行业务逻辑隔离池线程

    触发BlockException降级

    支持任务超时终止

    信号量隔离(默认)

    计数器未超限

    超限

    Tomcat线程

    信号量计数器

    执行业务逻辑使用Tomcat线程

    触发BlockException降级

    4.2 信号量隔离坑点

    信号量隔离仅仅限制并发请求数量,无法中断阻塞线程。
    如果下游RPC卡死不返回,Tomcat线程会一直阻塞,信号量计数器释放不了,时间久后Tomcat线程池依然会被占满。

    结论:调用外部不稳定第三方服务,不要单纯依赖默认信号量隔离;优先使用线程池隔离,同时客户端必须设置超时时间。

    4.3 Sentinel线程池隔离代码示例

    需要手动配置SentinelThreadPoolExecutor,为资源分配独立线程池。

    // 为券库存RPC资源分配独立隔离线程池
    ThreadPoolExecutor pool = new SentinelThreadPoolExecutor(
    5,
    10,
    30,
    TimeUnit.SECONDS,
    new ArrayBlockingQueue<>(20),
    new NamedThreadFactory("sentinel-coupon-rpc-"),
    new ThreadPoolExecutor.AbortPolicy()
    );

    // 定义线程池隔离规则
    ExecutorServiceRule executorRule = new ExecutorServiceRule();
    executorRule.setResource("couponStockRpc");
    executorRule.setExecutor(pool);
    ExecutorServiceRuleManager.loadRules(Collections.singletonList(executorRule));

    4.4 隔离模式业务选型建议

  • 本地内存计算、本地方法调用:信号量隔离,轻量高效;
  • RPC调用、第三方http接口、IO外部依赖:线程池隔离,具备超时能力,卡死任务可以终止;
  • 不要全部业务共用同一个隔离线程池,不同下游依赖使用独立线程池,防止单点故障扩散。
  • 补充:Hystrix只有线程池隔离和信号量隔离,没有原生限流能力;Sentinel把限流、熔断、隔离整合一套体系。


    第五部分:完整业务综合场景:大促领券服务防护

    业务背景:

    活动领券接口 receiveCoupon(写),券查询 queryCoupon(读)。依赖下游券库存RPC服务。
    需求:

  • 领券接口QPS限流;
  • 下游券库存RPC慢调用、报错触发熔断;
  • RPC调用使用线程池隔离,防止下游卡死占满tomcat线程;
  • 大促过载,领券写拦截降级,券查询读不受影响;
  • 限流熔断均配置兜底返回友好提示。
  • #mermaid-svg-MMHn7NorVcH6JUg7{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-MMHn7NorVcH6JUg7 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-MMHn7NorVcH6JUg7 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-MMHn7NorVcH6JUg7 .error-icon{fill:#552222;}#mermaid-svg-MMHn7NorVcH6JUg7 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-MMHn7NorVcH6JUg7 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-MMHn7NorVcH6JUg7 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-MMHn7NorVcH6JUg7 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-MMHn7NorVcH6JUg7 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-MMHn7NorVcH6JUg7 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-MMHn7NorVcH6JUg7 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-MMHn7NorVcH6JUg7 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-MMHn7NorVcH6JUg7 .marker.cross{stroke:#333333;}#mermaid-svg-MMHn7NorVcH6JUg7 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-MMHn7NorVcH6JUg7 p{margin:0;}#mermaid-svg-MMHn7NorVcH6JUg7 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-MMHn7NorVcH6JUg7 .cluster-label text{fill:#333;}#mermaid-svg-MMHn7NorVcH6JUg7 .cluster-label span{color:#333;}#mermaid-svg-MMHn7NorVcH6JUg7 .cluster-label span p{background-color:transparent;}#mermaid-svg-MMHn7NorVcH6JUg7 .label text,#mermaid-svg-MMHn7NorVcH6JUg7 span{fill:#333;color:#333;}#mermaid-svg-MMHn7NorVcH6JUg7 .node rect,#mermaid-svg-MMHn7NorVcH6JUg7 .node circle,#mermaid-svg-MMHn7NorVcH6JUg7 .node ellipse,#mermaid-svg-MMHn7NorVcH6JUg7 .node polygon,#mermaid-svg-MMHn7NorVcH6JUg7 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-MMHn7NorVcH6JUg7 .rough-node .label text,#mermaid-svg-MMHn7NorVcH6JUg7 .node .label text,#mermaid-svg-MMHn7NorVcH6JUg7 .image-shape .label,#mermaid-svg-MMHn7NorVcH6JUg7 .icon-shape .label{text-anchor:middle;}#mermaid-svg-MMHn7NorVcH6JUg7 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-MMHn7NorVcH6JUg7 .rough-node .label,#mermaid-svg-MMHn7NorVcH6JUg7 .node .label,#mermaid-svg-MMHn7NorVcH6JUg7 .image-shape .label,#mermaid-svg-MMHn7NorVcH6JUg7 .icon-shape .label{text-align:center;}#mermaid-svg-MMHn7NorVcH6JUg7 .node.clickable{cursor:pointer;}#mermaid-svg-MMHn7NorVcH6JUg7 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-MMHn7NorVcH6JUg7 .arrowheadPath{fill:#333333;}#mermaid-svg-MMHn7NorVcH6JUg7 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-MMHn7NorVcH6JUg7 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-MMHn7NorVcH6JUg7 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-MMHn7NorVcH6JUg7 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-MMHn7NorVcH6JUg7 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-MMHn7NorVcH6JUg7 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-MMHn7NorVcH6JUg7 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-MMHn7NorVcH6JUg7 .cluster text{fill:#333;}#mermaid-svg-MMHn7NorVcH6JUg7 .cluster span{color:#333;}#mermaid-svg-MMHn7NorVcH6JUg7 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-MMHn7NorVcH6JUg7 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-MMHn7NorVcH6JUg7 rect.text{fill:none;stroke-width:0;}#mermaid-svg-MMHn7NorVcH6JUg7 .icon-shape,#mermaid-svg-MMHn7NorVcH6JUg7 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-MMHn7NorVcH6JUg7 .icon-shape p,#mermaid-svg-MMHn7NorVcH6JUg7 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-MMHn7NorVcH6JUg7 .icon-shape .label rect,#mermaid-svg-MMHn7NorVcH6JUg7 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-MMHn7NorVcH6JUg7 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-MMHn7NorVcH6JUg7 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-MMHn7NorVcH6JUg7 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    触发限流

    触发熔断

    线程耗尽

    User

    网关

    receiveCoupon 领券写

    queryCoupon 券查询读

    Sentinel防护链

    流控规则

    熔断降级规则

    线程池隔离

    券库存RPC下游

    blockHandler降级返回

    券查询读不受写限流影响保障用户可以查自己已有的券

    防护规则清单总结:

  • 写类型核心接口配置QPS流量限流,拦截突增流量;
  • 使用关联流控实现读写分离防护:写资源流量过载时,仅拦截写请求,保障读资源正常可用;
  • 外部RPC/第三方依赖资源配置线程池隔离 + 熔断降级规则,隔离下游故障,慢调用占满资源时触发熔断;
  • 受保护资源同时配置blockHandler流量防护兜底与fallback业务异常兜底;
  • 所有外部网络调用强制开启客户端超时,避免线程无限阻塞。
  • 🌰业务举例(对应本次大促领券场景)

  • receiveCoupon领券写接口设置QPS限流;
  • 配置关联流控:监控领券写资源流量,过载只拦截领券,queryCoupon券查询读接口正常放行;
  • 券库存RPC资源开启线程池隔离,配置慢调用比例熔断策略;
  • 在receiveCoupon资源上同时指定blockHandler、fallback兜底方法;
  • 券库存RPC客户端设置合理超时时间,防止请求卡死。

  • 小节坑点汇总

  • @SentinelResource只对public生效,同类内部调用不会走Sentinel防护逻辑;
  • Sentinel注解默认是信号量隔离,不是线程池隔离,不支持线程中断,外部RPC不要踩坑;
  • blockHandler只捕获Sentinel流量防护异常BlockException;业务异常走fallback;两者不要混淆;
  • 关联流控模式:关联资源是阈值判断对象,限流作用在配置的resource上,配置极易写反;
  • 熔断需要达到minRequestAmount最小请求数,否则不会触发熔断;
  • 线程池隔离模式,MDC、traceId上下文需要手动传递;
  • 不要在业务代码硬编码规则,生产环境建议把规则持久化到Nacos配置中心,Sentinel控制台动态修改;
  • 防护兜底逻辑不能做重量级IO,降级逻辑尽量内存返回缓存或者默认值。

  • 文末综合总结

  • Sentinel三大核心能力:限流保护入口流量、熔断保护不稳定下游、隔离限制并发资源防止线程耗尽;
  • 资源Resource是Sentinel的最小保护单元,@SentinelResource埋点,区分blockHandler流量拦截、fallback业务异常降级;
  • 限流有直接、关联、链路模式;大促场景使用关联流控实现:写接口过载限流,读接口继续可用;
  • 熔断三种策略:慢调用比例、异常比例、异常数;熔断器三状态:关闭、打开、半开;
  • 隔离分为信号量隔离(默认轻量,无超时中断)、线程池隔离(独立线程池,支持超时,适合RPC外部调用);
  • 线上稳定性目标:允许部分非核心功能降级,保障核心链路可用,阻止故障级联雪崩。
  • 课后思考题(面试复盘)

  • blockHandler 和 fallback 有什么区别,分别什么场景触发?
  • Sentinel默认信号量隔离有什么缺陷?为什么调用外部RPC不建议只用默认信号量隔离?
  • 关联流控模式,如何实现:领券写接口过载限流,券查询读接口不受影响?
  • 熔断器OPEN、HALF_OPEN、CLOSED三种状态流转逻辑,半开状态作用是什么?
  • Sentinel和Hystrix在隔离模式上的核心差异是什么?
  • 如果下游RPC一直阻塞不返回,只用信号量隔离会发生什么线上故障?
  • 赞(0)
    未经允许不得转载:网硕互联帮助中心 » SpringCloud Alibaba Sentinel 教学:限流、熔断、降级、线程/信号量隔离、活动过载保护
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!