如何设计 Amazon Prime Video:一次系统设计模拟面试
一次模拟面试的记录:设计一个最简版的 Amazon Prime Video。梳理大规模视频流媒体平台的核心功能、非功能需求、MVP 架构、安全考虑和后续演进。
English version: How to design Amazon Prime Video: A System Design Mock Interview
这篇是一次系统设计模拟面试的整理:设计一个最简版(MVP)的 Amazon Prime Video,讨论一个大规模视频流媒体平台的核心功能和需要考虑的点。
用户角色
- 内容创作者:上传视频。
- 观众:搜索和观看视频。
功能需求
- 上传视频。
- 按标题、分类或更复杂的条件搜索视频。
- 观看视频。
非功能需求
- 可扩展性:支撑大量用户和视频。
- 可用性:尽量减少停机,保证视频对用户可用。
- 延迟:缓冲时间短,观看流畅。
- 可靠性:上传的视频不能丢。
MVP 设计
- 上传服务:接收创作者上传的视频,推到对象存储(S3)以便扩展;把元数据(标题等)写入单独的元数据数据库。
- 负载均衡器:把上传请求分发到多个上传服务实例,应对高流量。
- 搜索服务:用 Elasticsearch 这类 NoSQL 存储,按用户查询高效检索视频元数据。
- 流媒体服务:把视频从 S3 送到观众端。
- CDN:按地理位置缓存内容,加快分发(列为后续实现)。
安全考虑
- API 安全:用 OAuth2 的 token 鉴权控制访问。
- 数据加密:服务之间用 HTTPS 加密传输。
- CDN 层鉴权:通过 CDN 的访问控制阻止未授权的视频访问。
后续增强
- 转码:把视频转成多种格式(WebM、mp4),兼容更多设备。
- 负载均衡与扩缩容:按流量自动扩缩。
- 监控与告警:监控系统健康,问题及时告警。
结论
这个 MVP 为视频流媒体平台打了地基:为了可接受的用户体验,优先保证可用性而不是强一致性;设计里包含了扩展性考虑,也点出了保护用户数据的安全措施。后续迭代可以补充高级功能和更多需求。