
1) 【一句话结论】:采用“移动端客户端限流(令牌桶+本地队列)+ 后端服务限流(熔断+限流器)+ 跨端协同(消息队列缓冲)”的组合策略,既控制后端压力,又保证移动端请求不超时,兼顾系统稳定与用户体验。
2) 【原理/概念讲解】:限流核心是“控制请求速率”,避免后端过载。常用算法有令牌桶算法(Token Bucket)和漏桶算法(Leaky Bucket)。
3) 【对比与适用场景】:
| 对比维度 | 客户端限流(移动端) | 服务器端限流(后端) |
|---|---|---|
| 定义 | 在移动端设备上控制请求发送速率,通过本地队列/令牌桶限制并发请求数 | 在后端服务中控制请求处理速率,通过限流器/熔断器保护核心资源 |
| 特性 | 依赖移动端资源(内存/CPU),对用户设备性能有要求;可避免后端压力,但需考虑移动端超时 | 依赖后端资源(如Redis/数据库),不影响移动端性能;能保护后端核心服务 |
| 使用场景 | 用户设备性能有限(如低端手机)、需要快速响应(如实时上传)、跨网络环境(如弱网) | 后端服务资源有限(如CPU/内存)、需要保护核心业务逻辑(如AI模型推理)、高并发场景 |
| 注意点 | 本地队列长度需合理(避免内存溢出);令牌桶参数需根据设备性能调优 | 限流器参数需结合历史流量(如QPS)、服务资源(如CPU使用率);熔断器需配置合理的恢复策略 |
4) 【示例】:以移动端上传文件到后端AI服务为例。
class TokenBucket {
private long lastTokenTime = System.currentTimeMillis();
private long capacity = 10; // 单位:请求/秒
private long tokens = capacity;
public boolean tryAcquire() {
long now = System.currentTimeMillis();
long elapsed = now - lastTokenTime;
tokens = Math.min(capacity, tokens + (elapsed / 1000) * capacity);
lastTokenTime = now;
return tokens >= 1;
}
}
void uploadFile(File file) {
TokenBucket bucket = new TokenBucket();
if (!bucket.tryAcquire()) {
localQueue.offer(() -> uploadToBackend(file));
return;
}
uploadToBackend(file);
}
spring:
cloud:
gateway:
routes:
- id: ai-service
uri: lb://ai-service
predicates:
- Path=/ai/upload
filters:
- name: RateLimiter
args:
rate-limiter: "my-rate-limiter"
rate-limiter-ref: "my-rate-limiter"
rate-limiter-refresh-period: "1s"
@HystrixCommand(commandProperties = {
@HystrixProperty(name = "circuitBreaker.enabled", value = "true"),
@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "5")
})
public String uploadToBackend(File file) {
return aiService.upload(file);
}
5) 【面试口播版答案】:各位面试官好,针对移动端高并发上传文件到后端AI服务的问题,我的设计思路是采用“移动端前端限流+后端服务限流+跨端协同”的组合策略,核心目标是既防止后端过载,又保证移动端用户体验。
首先,移动端侧我们采用令牌桶算法+本地队列。令牌桶会以固定速率(比如每秒10次请求)生成令牌,每次上传文件前检查令牌,若不足则将请求加入本地队列等待,这样能避免移动端直接发起过多请求,同时本地队列能保证请求不会超时(比如队列长度设为50,超过则提示用户稍后重试)。然后,后端服务侧我们用熔断器+限流器,比如通过Spring Cloud Gateway的RateLimiter限流器,配置每秒10次请求的上限,同时用Hystrix熔断器,当请求量超过阈值(比如5次/秒)时,熔断后直接返回错误,避免后端服务崩溃。这样,移动端和后端形成“前端限流-后端保护”的双层防御,既能控制后端压力,又能保证用户上传体验。
6) 【追问清单】:
7) 【常见坑/雷区】: