Pika 1.0上线后,用户量在两周内增长了十倍,视频生成任务的排队时间从几秒飙升到几十分钟。作为架构负责人,我主导了一次全面的架构升级。本文分享这套支持高可用高并发的设计方案。

一、核心挑战

AI视频生成和传统的Web服务有本质区别,架构设计面临几个独特挑战。

1. 任务耗时长。 一段5秒的视频生成需要30秒到2分钟,是典型的长耗时任务。传统的同步请求响应模式完全不适用。

2. GPU资源昂贵。 视频生成依赖A100或H100 GPU,单卡成本超过十万元。如何最大化GPU利用率,是成本控制的关键。

3. 任务类型多样。 文生视频、图生视频、视频编辑、风格迁移,不同任务的计算量差异巨大,需要差异化调度。

4. 结果文件大。 生成的视频文件从几MB到几十MB,存储和分发都需要专门设计。

二、整体架构

我们采用了"接入层 + 调度层 + 推理层 + 存储层"的四层架构。

1. 接入层。 基于Kubernetes部署的API网关,负责用户鉴权、限流、请求校验和任务提交。所有请求异步处理,提交后立即返回任务ID,用户通过轮询或WebSocket查询状态。

2. 调度层。 这是整个系统的大脑。基于Redis实现任务队列,支持优先级、公平调度和延迟调度。调度器根据GPU节点的负载、任务类型和排队时间,将任务分配到最合适的推理节点。

3. 推理层。 GPU推理节点集群,每个节点运行多个模型实例。通过Docker容器隔离不同模型,支持动态扩缩容。节点内置健康检查,故障时自动从集群中摘除。

4. 存储层。 生成的视频文件存储在对象存储中,通过CDN分发。任务元数据存在PostgreSQL,实时状态存在Redis。

三、高可用设计

1. 多可用区部署。 推理节点分布在两个可用区,单个可用区故障时,另一个可用区可以承接全部流量。虽然成本增加了30%,但可用性从99.5%提升到99.9%。

2. 任务重试机制。 每个任务最多重试3次,重试时自动切换到不同的推理节点。对于因GPU故障导致的失败,重试成功率超过95%。

3. 降级策略。 当系统负载过高时,自动启动降级:降低视频分辨率、缩短最大时长、暂停免费用户的任务。确保付费用户的体验不受影响。

4. 熔断保护。 当某个模型的失败率超过阈值时,自动熔断该模型,流量切换到备用模型。恢复后自动半开探测,确认稳定后完全恢复。

四、高并发设计

1. 任务排队。 所有任务进入队列后按优先级和提交时间排序。付费用户优先,免费用户排队。队列长度超过阈值时,前端显示预计等待时间,让用户有心理预期。

2. GPU复用。 单张GPU上运行多个模型实例,通过时间片轮转提高利用率。对于小任务(如图片生成),多个任务可以在同一张GPU上并行执行。

3. 结果缓存。 对于相同提示词的生成请求,直接返回缓存结果。我们的缓存命中率达到了25%,显著降低了GPU负载。

4. 弹性伸缩。 根据队列长度自动扩缩容GPU节点。队列长度超过100时自动扩容,低于20时自动缩容。扩容响应时间约5分钟,缩容有30分钟冷却期,避免频繁波动。

五、存储与分发

1. 分层存储。 最近7天的视频存在高性能对象存储,超过7天的自动迁移到低频存储,超过90天的归档到冷存储。存储成本降低了60%。

2. CDN加速。 所有视频通过CDN分发,全球用户都能快速加载。热门视频预热到CDN边缘节点,首帧加载时间控制在1秒以内。

3. 断点续传。 大文件上传支持断点续传,用户网络中断后可以从上次位置继续,不需要重新上传。

六、监控与运维

1. 全链路追踪。 每个任务从提交到完成的每个阶段都有详细日志,出现问题可以快速定位。

2. 实时大盘。 监控大屏展示队列长度、GPU利用率、任务成功率、平均等待时间等核心指标,异常时自动告警。

3. 灰度发布。 新模型上线时,先给5%的用户使用,观察稳定性和效果,确认无误后逐步扩大比例。

七、总结

Pika 1.0的架构升级后,系统支撑了日均50万次视频生成请求,平均等待时间从20分钟降到3分钟,可用性达到99.9%。

AI应用的架构设计和传统Web服务有很大不同,核心是处理好长耗时任务、昂贵的GPU资源和大文件存储。高可用靠多可用区、重试和降级,高并发靠排队、复用和弹性伸缩。随着AI技术的发展,架构还需要持续演进,但这些核心设计原则应该能适用很长一段时间。