设计YouTube,支持视频上传,视频点播,以及评论、分享、点赞、保存播放列表、频道收藏等功能。
Step 1 - 明确需求
完整的YouTube功能繁杂,这里可以通过以下讨论来缩小设计范围:
- 需要支持哪些重要特性?=> 上传视频,观看视频
- 需要支持哪些客户端?=> 移动端,浏览器,智能电视
- 日活多少?=> 500万
- 用户平均每天的使用时间是多少?=>30分钟
- 需要支持国际用户吗?=>需要
- 支持的分辨率有哪些?=> 需要支持大部分视频格式和分辨率
- 支持加密传输吗?=> 支持
- 视频大小有什么限制?=>以中心文件为主,最大文件不超过1GB
- 可以借助Amazon、Google等云服务商提供的服务吗?=> 可以
这里以下列需求作为本系统设计的目标:
- 支持快速上传视频
- 流畅的视频观看体验
- 支持切换视频分辨率
- 低成本架构
- 高可用性,扩展性,可靠性
- 支持移动端,浏览器,智能电视
规模预估:
- 假设产品有500万每日活跃用户
- 用户平均每天观看5个视频
- 10%的用户每天会上传一个视频
- 视频大小为300MB
- 每日视频存储空间需求:500万 * 10% * 300MB = 150 TB
- CDN成本。
- CDN按流量计费
- 假设CDN流量费用为$0.02/GB,则每日视频流量的CDN费用为:500万 * 5 * 0.3GB * $0.02 = $150000
CDN成本占据费用的大头。
Step 2 - 高阶设计
借助现有的云服务来简化设计,可供使用的云服务包括CDN和对象存储(blog storage),下面系统包含的组件设计: