51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

设计一个支持高并发请求的游戏视频生成系统,假设每天需要处理10万条视频生成请求,每条请求平均耗时5秒(包含渲染、编码、存储)。请描述系统的整体架构,包括前端请求处理、任务调度、渲染集群、存储层的设计,并说明如何保证系统的可扩展性和稳定性。

八方职达 | 广州创思信息技术有限公司游戏视频设计师难度:困难

答案

1) 【一句话结论】
针对每天10万条、每条5秒的视频生成请求,系统采用微服务架构,通过负载均衡分发请求、消息队列调度任务、动态扩展的GPU渲染集群并行处理、分片对象存储优化存储,结合任务优先级队列和监控告警机制,确保高并发下的可扩展性与稳定性。

2) 【原理/概念讲解】
老师口吻解释各组件逻辑:

  • 前端请求处理:用Nginx负载均衡器,像交通指挥中心,将用户点餐(请求)按轮询/加权轮询算法分发给后端渲染节点,避免单点过载。
  • 任务调度:用Kafka消息队列,作为任务缓冲区,将请求持久化,渲染节点按需消费,保证任务不丢失(类比快递驿站,任务按顺序取件)。
  • 渲染集群:多台GPU服务器并行处理,每个节点独立运行FFmpeg渲染,提高吞吐量(像工厂流水线,多个工人同时加工产品)。
  • 存储层:分片对象存储(如阿里OSS),按用户ID分片存储视频,每个用户对应独立存储路径,避免写入瓶颈(像仓库按区域分区,提高取放效率)。
  • 优先级处理:消息队列支持优先级队列,VIP用户请求优先级高,先被消费,保证关键用户体验。

3) 【对比与适用场景】

组件/算法定义特性使用场景注意点
负载均衡算法(轮询 vs 加权轮询)按顺序/权重分配请求简单公平/节点能力不同时更均衡渲染节点GPU数量不同时可能导致节点负载不均
消息队列(Kafka vs RabbitMQ)分布式发布-订阅/点对点消息代理高吞吐/可靠传输、持久化实时视频任务/长任务渲染需持久化存储,消息堆积影响延迟;需手动确认消息避免死循环
渲染节点扩展策略动态增减GPU服务器根据GPU使用率自动扩缩容高并发场景需监控工具(如Kubernetes HPA)支持

4) 【示例】
前端请求示例(JSON):

{
  "request_id": "req_20240501_001",
  "video_params": {
    "duration": 30,
    "resolution": "1080p",
    "format": "mp4",
    "template": "gameplay"
  },
  "user_id": "user_123",
  "priority": "vip" // VIP用户优先级为1,普通为0
}

流程:

  1. 用户发送请求到Nginx负载均衡器(轮询算法)。
  2. Nginx将请求转发到Kafka Producer,写入主题“video_tasks”,内容包含请求ID、参数、用户ID、优先级。
  3. Celery Worker(渲染节点)从Kafka消费消息(优先级队列,VIP优先),调用FFmpeg渲染视频(单节点GPU渲染能力:每秒1个视频,5秒即1个任务)。
  4. 渲染完成后,将视频上传至OSS,路径为users/user_123/videos/req_20240501_001.mp4,更新数据库状态为“completed”,发送通知。
  5. 若渲染超时(如10秒),触发重试机制,将任务重新放入队列,降低优先级。

5) 【面试口播版答案】
面试官您好,针对每天10万条、每条5秒的视频生成请求,核心设计是构建高并发、可扩展的微服务系统。具体来说,前端请求由Nginx负载均衡器分发,任务调度中心通过Kafka消息队列管理任务,渲染集群(GPU服务器)并行处理,存储层采用分片对象存储(如阿里OSS)。这样能保证请求均匀分发,任务并行处理,存储高并发写入。可扩展性方面,渲染节点可通过Kubernetes HPA根据GPU使用率动态增减,消息队列支持水平扩展;稳定性方面,消息队列持久化保证任务不丢失,渲染节点故障后任务重试,存储层冗余备份。同时,支持VIP用户请求优先级处理,确保关键用户体验。整体架构通过解耦各组件,实现高并发下的稳定运行。

6) 【追问清单】

  • 问题1:如何处理渲染节点的资源竞争?
    回答要点:为每个渲染节点分配GPU资源配额(如1个GPU),监控资源使用率(Prometheus),GPU使用率超80%时动态增加渲染节点。
  • 问题2:如果渲染任务超时,如何回滚?
    回答要点:设置超时阈值(10秒),超时后标记失败,清理临时文件,通知用户重试,并记录超时日志。
  • 问题3:如何保证VIP用户请求优先级?
    回答要点:消息队列采用优先级队列(VIP优先级1,普通0),Celery Worker按优先级顺序消费;负载均衡器对VIP请求分配更高权重(加权轮询,VIP权重2,普通1)。
  • 问题4:系统的监控与告警机制?
    回答要点:用Prometheus监控渲染节点CPU/GPU负载、Kafka队列延迟,Grafana可视化,设置CPU > 90%或队列长度 > 1000时告警。
  • 问题5:数据一致性如何保证?
    回答要点:任务状态更新到数据库(最终一致性,允许短时不一致),存储路径同步到消息队列,确保视频文件与元数据一致。

7) 【常见坑/雷区】

  • 坑1:忽略消息队列堆积问题,导致请求延迟(生产者速率超过消费者速率,队列长度激增)。
  • 坑2:渲染节点单点故障,未冗余(单个节点故障导致任务积压,性能下降)。
  • 坑3:存储层未分片,写入瓶颈(所有视频写入同一路径,写入速度饱和)。
  • 坑4:忽略用户请求优先级,导致VIP用户体验差(普通用户积压,VIP请求无法及时处理)。
  • 坑5:资源监控不足,无法及时发现性能瓶颈(GPU使用率过高未告警,导致节点过载)。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1