【微服务】面试 4、限流

微服务限流技术总结

一、微服务业务面试题引入

在微服务业务面试中,限流是重要考点,常与分布式事务、分布式服务接口幂等解决方案、分布式任务调度等一同被考查。面试官一般会询问项目中是否实施限流及具体做法,回答需涵盖限流原因、采用的方式与算法等方面。

二、限流原因

(一)应对高并发

业务增长或特定活动(如抢券业务)时会出现流量高峰,大量请求可能超出系统处理能力,导致系统响应变慢、资源耗尽甚至崩溃,影响用户体验和系统稳定性,因此需要限流来保障系统正常运行。

(二)防范恶意攻击

恶意用户刷接口会占用大量系统资源,即使采用集群技术也可能无法应对大规模恶意流量,限流可有效阻止此类攻击,确保合法用户的服务质量。

三、常见限流方式及算法

(一)Tomcat 限流

通过设置 max rs 等参数控制最大连接数实现限流。例如,若 max rs 设置为 150,则 Tomcat 同时处理的连接数最多为 150。但在微服务架构下,每个微服务都需单独配置,管理复杂,适用于单体项目,在微服务项目中存在局限性。

(二)Nginx 限流

  1. 漏桶算法控制速率
    • 算法原理:基于漏桶算法,Nginx 将请求存入类似漏桶的结构,按照固定速率向外流出请求进行处理。如每秒固定流出 2 个请求,可使处理请求的速率保持稳定。
    • 配置参数
      • limit_req_zone:用于设置请求区域。
      • 可按用户 ip 或路径等方式定义限流对象,如 remote_addr 表示按 ip 限流。
      • 存储空间可根据实际需求设置,如 10M 可存储 16 万 ip 地址,用于记录限流相关信息。
      • rate10r/s 表示每秒最多处理 10 个请求。
      • burst 表示桶的大小,如设置为 20,则桶最多能存储 20 个请求,超过此数量的请求将被等待或抛弃。
      • nodelay 表示快速处理请求,包括快速处理桶内请求和快速抛弃超出限量的请求。
  2. 漏桶算法控制并发连接数
    • 配置参数
      • limit_conn:用于控制连接相关的限流操作。
      • 可按 ipserver_name(虚拟主机)等方式进行限流配置,如按 ip 限流时可设置内存大小为 10M,并可自定义引用。
      • 对于 server_name,可设置虚拟主机同时处理的并发连接数总数,如设置为 100,表示该服务最大并发连接数为 100;对于单个 ip,可设置其最多能持有的连接数,如 20 个。
    • 配置位置 :需在具体的主机或反向代理中进行配置才能生效。

(三)网关限流(以 Spring Cloud 网关为例)

  1. 令牌桶算法原理及配置
    • 算法原理:采用令牌桶算法,以固定速率生成令牌并存入令牌桶中。请求到达时需从桶中获取令牌,获取到令牌的请求才能被服务处理,未获取到令牌的请求则被阻塞或丢弃。例如,每秒生成 3 个令牌,如果某一秒内没有请求消耗令牌,下一秒来了 6 个请求,这 6 个请求可先获取上一秒剩余的 3 个令牌,同时本秒再生成 3 个令牌,从而可以处理这 6 个请求,这体现了令牌桶算法在处理突发流量时与漏桶算法的区别,即令牌桶处理请求的速率可能存在波动,而漏桶是以固定速率处理请求。
    • 配置参数
      • keyResolver:用于定义限流对象,可按 ip、路径或参数等方式定义,需要通过代码实现并被 Spring 管理,可使用 SPEL 表达式获取对象。
      • 设置令牌桶每秒填充的平均速度,即令牌生成速度,如设置为 1 表示每秒生成 1 个令牌。
      • 设置令牌桶的总容量,因为令牌桶不能无限制生成令牌,且令牌默认存储在 Redis 中,所以在网关配置文件中需要配置 Redis 连接信息。
    • 配置位置 :在网关的配置文件(如 yaml)中,通过 request rate limit 局部过滤器进行设置。

(四)自定义连接器限流

在没有 Nginx 或网关的情况下,可采用自定义连接器限流,但在一般微服务项目中,通常会有 Nginx 或网关,所以在面试中重点应阐述 Nginx 和网关的限流方式。

四、面试回答要点

(一)业务场景描述

详细介绍项目业务及限流场景,例如在开展促销活动期间,如假期抢优惠券活动时,QPS(每秒查询率)可能会从平时的 10 - 50 飙升至 2000,为应对这种突发流量需要进行限流;或者为防止恶意攻击,若系统压测得出能承受的最大 QPS 为 1000,超过此值系统可能崩溃,因此需要控制每秒访问次数在 1000 以内。

(二)限流方式阐述

分别说明项目中采用的 Nginx 和网关限流方式及相关算法原理。对于 Nginx,提及控制速率的漏桶算法和控制并发连接数的配置及原理;对于网关,重点讲解令牌桶算法在网关中的应用及配置细节,如限流对象定义、令牌生成速度和桶容量设置等,强调这些限流方式如何保障系统在面对高并发和恶意攻击时的稳定运行。

相关推荐
我是谁谁12 分钟前
在 UniApp 开发中,由于需要跨平台(小程序、H5、App 等),样式兼容性是常见挑战
前端·面试
技术蔡蔡24 分钟前
Flutter真实项目中bug解决详解
flutter·面试·android studio
工呈士33 分钟前
HTTP 请求方法与状态码
前端·后端·面试
RWKV元始智能39 分钟前
Ollama 已支持 RWKV-7 模型,可灵活开关思考模式
人工智能·架构·开源
想用offer打牌1 小时前
关于Seata的一个小issue...😯
java·后端·架构
独行soc1 小时前
2025年渗透测试面试题总结-2025年HW(护网面试) 01(题目+回答)
linux·科技·安全·面试·职场和发展·区块链
Allen_LVyingbo1 小时前
从“数据困境”到“数据生态”:DaaS重塑三甲医院医疗数据治理
人工智能·搜索引擎·架构·健康医疗
独行soc2 小时前
2025年渗透测试面试题总结-2025年HW(护网面试) 02(题目+回答)
linux·科技·安全·面试·职场和发展·渗透测试·区块链
伊成2 小时前
Java面试高频面试题【2025最新版】
java·开发语言·面试
23级二本计科3 小时前
RPC常见问题回答
网络协议·面试·rpc