【微服务】面试 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,提及控制速率的漏桶算法和控制并发连接数的配置及原理;对于网关,重点讲解令牌桶算法在网关中的应用及配置细节,如限流对象定义、令牌生成速度和桶容量设置等,强调这些限流方式如何保障系统在面对高并发和恶意攻击时的稳定运行。

相关推荐
CCPC不拿奖不改名9 小时前
SQL基础(SQL小白教程):MySQL语句+环境一键搭建+面试习题
数据库·sql·计算机网络·mysql·oracle·面试·职场和发展
Dream it possible!10 小时前
LeetCode 面试经典 150_二分查找_在排序数组中查找元素的第一个和最后一个位置(115_34_C++_中等)
c++·leetcode·面试
liux352811 小时前
Web集群管理实战指南:从架构到运维
运维·前端·架构
沛沛老爹12 小时前
Web转AI架构篇 Agent Skills vs MCP:工具箱与标准接口的本质区别
java·开发语言·前端·人工智能·架构·企业开发
运维有小邓@12 小时前
Log360 的可扩展架构实践:常见场景
运维·网络·架构
清 澜15 小时前
大模型扫盲式面试知识复习 (二)
人工智能·面试·职场和发展·大模型
掘金安东尼16 小时前
⏰前端周刊第 448 期(2026年1月4日-1月10日)
前端·面试·github
邹阿涛涛涛涛涛涛16 小时前
月之暗面招聘 Android
面试·招聘
网络工程师_ling16 小时前
【阿里云多地域混合云网络架构】
网络·阿里云·架构
FinClip16 小时前
凡泰极客FinClip荣获2025中国企业IT大奖!AI+超级APP重塑企业AI服务
前端·架构·openai