主题
面试速答(先看这里)
**一句话结论:**限流的目的是控制系统的并发流量,通过限制请求流量的手段防止过度的流量导致系统崩溃。
60秒标准回答:
限流、降级和熔断是三种常用的系统稳定性策略,它们在高并发和高负载的场景下尤为重要。通常我们说为了保证系统的可用性,限流、降级、熔断一把梭,但是其实他们是三个不太相同的概念,作用也不太一样
限流的目的是控制系统的并发流量,通过限制请求流量的手段防止过度的流量导致系统崩溃。 一般用于应对突发流量高峰
一般是被调用方对调用方进行限流。举个例子,我提供了一个查询用户信息的服务,给集团内外的很多个调用方使用,但是我为了保证我的可用性,我会对每个调用方做限流,防止某个调用方不守规矩,把我的服务打挂了
**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点
回答主线:
- **要点1:**限流、降级和熔断是三种常用的系统稳定性策略,它们在高并发和高负载的场景下尤为重要。
- **要点2:**一般是被调用方对调用方进行限流。
- **要点3:**当然,也有在服务端给客户端直接做限流的,一般用于外部服务能力不太行的时候,比如电商网站大促的时候,可能会依赖很多银行的服务,但是银行服务本身可能没那么高的并发, 所以可能在电商网站上自己控制一下QPS,来起到限流的目的,避免下游系统被打挂
- **要点4:**降级 是当系统负载过高时,主动关闭一些非核心功能,以确保核心功能的正常运行。
- **要点5:**举个例子,双十一大促期间,淘宝上面会把退款功能关闭,这就是一种降级手段,通过把一些非核心功能降级掉来保证核心功能可用。
**记忆锚点:**Sentinel → 降级 → 是我为了保证我的可用性 → 熔断 → 限流 → 说为了保证系统的可用性
关键取舍:
- 限流的目的是控制系统的并发流量,通过限制请求流量的手段防止过度的流量导致系统崩溃。
- 一般用于在系统资源有限或响应时间过长时,通过降低服务质量保障核心服务。
易错提醒:
- 当然,也有在服务端给客户端直接做限流的,一般用于外部服务能力不太行的时候,比如电商网站大促的时候,可能会依赖很多银行的服务,但是银行服务本身可能没那么高的并发, 所以可能在电商网站上自己控制一下QPS,来起到限流的目的,避免下游系统被打挂 降级 是当系统负载过高时,主动关闭一些非核心功能,以确保核心功能的正常运行。
- 熔断一般发生在调用方,举个例子,当电商平台上用户支付时,收银台发现某个支付渠道,如微信支付失败率突增,超时严重,那么就可以临时把这个支付方式熔断掉。
加分表达:
- 限流、降级和熔断是三种常用的系统稳定性策略,它们在高并发和高负载的场景下尤为重要。
追问准备:
- 围绕「Sentinel」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「降级」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「是我为了保证我的可用性」:底层原理是什么?使用时有哪些边界和常见坑?
- 如果线上出现异常,你会如何定位、验证并规避?
典型回答
限流、降级和熔断是三种常用的系统稳定性策略,它们在高并发和高负载的场景下尤为重要。通常我们说为了保证系统的可用性,限流、降级、熔断一把梭,但是其实他们是三个不太相同的概念,作用也不太一样。
限流
限流的目的是控制系统的并发流量,通过限制请求流量的手段防止过度的流量导致系统崩溃。一般用于应对突发流量高峰。
一般是被调用方对调用方进行限流。举个例子,我提供了一个查询用户信息的服务,给集团内外的很多个调用方使用,但是我为了保证我的可用性,我会对每个调用方做限流,防止某个调用方不守规矩,把我的服务打挂了。
> 当然,也有在服务端给客户端直接做限流的,一般用于外部服务能力不太行的时候,比如电商网站大促的时候,可能会依赖很多银行的服务,但是银行服务本身可能没那么高的并发, 所以可能在电商网站上自己控制一下QPS,来起到限流的目的,避免下游系统被打挂
降级
降级是当系统负载过高时,主动关闭一些非核心功能,以确保核心功能的正常运行。一般用于在系统资源有限或响应时间过长时,通过降低服务质量保障核心服务。
举个例子,双十一大促期间,淘宝上面会把退款功能关闭,这就是一种降级手段,通过把一些非核心功能降级掉来保证核心功能可用。或者在某次腾讯视频挂了的时候,用户名称默认显示腾讯用户,这也是一种降级方式,用兜底名称做展示.
降级可以做在客户端,也可以做在服务端,比如关闭部分非核心功能的话,可以直接把入口关掉,及服务端直接下掉入口。也可以客户端直接返回兜底逻辑,不做业务逻辑处理起到降级的目的。
熔断
熔断是为了防止系统因某个服务的故障而整体崩溃,类似于电路的熔断器。在检测到下游服务异常时,自动停止向该服务发送请求,并在一定时间后尝试恢复。
📄 ✅什么是熔断?
熔断一般发生在调用方,举个例子,当电商平台上用户支付时,收银台发现某个支付渠道,如微信支付失败率突增,超时严重,那么就可以临时把这个支付方式熔断掉。
| 限流 | 降级 | 熔断 | |
|---|---|---|---|
| 目的 | 控制系统的流量,防止过度的流量导致系统崩溃。 | 主动关闭一些非核心功能,以确保核心功能的正常运行。 | 防止系统因某个服务的故障而整体崩溃,类似于电路的熔断器。 |
| 手段 | 各种限流算法:滑动窗口、漏桶、令牌桶 | 开关;通过开关控制某些功能直接被降级。 | 熔断器 |
| 工具 | Sentinel | Sentinel | Sentinel |
| 示例 | 我提供了一个查询用户信息的服务,给集团内外的很多个调用方使用,但是我为了保证我的可用性,我会对每个调用方做限流,防止某个调用方不守规矩,把我的服务打挂了。 | 双十一大促期间,淘宝上面会把退款功能关闭 某次腾讯视频挂了的时候,用户名称默认显示腾讯用户,这也是一种降级方式,用兜底名称做展示 | 当电商平台上用户支付时,收银台发现某个支付渠道,如微信支付失败率突增,超时严重,那么就可以临时把这个支付方式熔断掉。 |
| 发起方 | 被调用方(服务端)/调用方(客户端) | 被调用方(服务端)/调用方(客户端) | 调用方(客户端) |