降级&熔断详解(付费)
约 1103 字大约 4 分钟
31. Hystrix Dashboard 和 Sentinel Dashboard 有什么区别?
📝 通俗解释
- Hystrix Dashboard:像个**“老式仪表盘”**,只能看,不能动。你想改规则?得去改代码或者配置文件,然后重启。
- Sentinel Dashboard:像个**“智能触控屏”**,既能看监控,又能直接操作。点几下鼠标,限流规则就变了,立马生效,不用重启。
- Hystrix Dashboard:主要用于查看单个 Hystrix 实例的实时监控数据(通过 Turbine 聚合)。它本身不具备规则配置能力,修改规则通常依赖配置中心或代码修改重启。
- Sentinel Dashboard:不仅提供实时的监控数据(QPS、响应时间等),还提供了强大的动态规则管理能力。可以在控制台直接新增、修改流控规则、降级规则、热点规则等,并推送到客户端生效。
32. 如何在 Sentinel 中自定义异常处理(BlockExceptionHandler)?
📝 通俗解释
默认情况下,被限流了会返回一个很丑的英文 "Blocked by Sentinel..."。
你肯定不想给用户看这个。
自定义异常处理就是让你自己写一段代码:
“如果被限流了,就返回一个漂亮的 JSON,比如{ "code": 429, "msg": "哎呀,人太多了,请稍后再试" }。”
- 默认:Sentinel 拦截请求后,默认返回 "Blocked by Sentinel (flow limiting)" 字符串。
- 自定义:实现
BlockExceptionHandler接口,重写handle方法。- 判断
BlockException的类型(FlowException, DegradeException, ParamFlowException 等)。 - 构造统一的 JSON 响应格式(如
{"code": 429, "msg": "请求过于频繁"})。 - 将响应写回
HttpServletResponse。
- 判断
33. 熔断器(Circuit Breaker)能代替限流(Rate Limiter)吗?
📝 通俗解释
不能,它俩是好基友,但分工不同。
- 限流:是**“保安”。不管里面有没有事,反正每分钟只许进 100 个人。保护自己**不被挤爆。
- 熔断:是**“保险丝”。发现里面(下游服务)起火了(挂了),立马断开,防止自己也被烧坏。保护下游和自己**。
- 不能。两者关注点不同。
- 限流:主要为了保护自己(防止被上游的大流量压垮)。它是预防性的,不管下游是否正常,只要流量超标就拒绝。
- 熔断:主要为了保护下游(防止调用挂掉的服务)和自己(防止线程池耗尽)。它是响应性的,当下游出现故障时才触发。
- 结合使用:通常在网关层做限流,在服务调用层做熔断。
34. Resilience4j 和 Sentinel 有什么主要区别?
📝 通俗解释
- Sentinel:阿里系,功能大而全(全家桶),对 Dubbo、Spring Cloud Alibaba 支持超级好,文档是中文的,国内用得多。
- Resilience4j:Netflix Hystrix 的接班人,轻量级,模块化(想用啥引啥),代码写起来像函数式编程,国外用得多。
- 生态:Sentinel 是阿里巴巴开源,对 Dubbo、Spring Cloud Alibaba 生态支持极好,文档丰富(中文)。Resilience4j 是 Netflix Hystrix 的官方推荐替代品,轻量级,函数式编程风格。
- 功能:Sentinel 功能更全面(流量整形、系统自适应保护、热点参数限流、集群限流)。Resilience4j 更专注于容错(Retry, CircuitBreaker, RateLimiter, Bulkhead, TimeLimiter)。
- 性能:Sentinel 的滑动窗口算法和无锁设计使其性能略优。
35. 什么是 Sentinel 的集群流控(Cluster Flow Control)?
📝 通俗解释
- 单机流控:各自为战。每台机器限流 100,10 台就是 1000。但有时候流量分配不均,有的机器空闲,有的机器忙死。
- 集群流控:统一指挥。找个**“大管家”**(Token Server),所有机器想处理请求都得先找管家领令牌。管家说“停”,所有机器都得停。这样能精确控制总流量。
- 场景:单机限流无法精确控制整个集群的总流量。例如,限制某个 API 总 QPS 为 1000,如果有 10 台机器,单机限流只能配 100,但如果不均匀,有的机器空闲,有的机器被限流。
- 原理:引入一个Token Server(令牌服务器)。所有客户端(Token Client)向 Token Server 请求令牌。
- 优点:能精确控制集群总流量。
- 缺点:引入了新的单点(Token Server),增加了网络开销和复杂性。通常在单机限流无法满足需求时才使用。
