面试题 | 设计youtube

本文探讨了设计YouTube系统的关键点,包括上传、分享、搜索视频,处理赞踩和评论,以及高可用和低延迟的要求。面临挑战如存储、读写比例、元数据扩展性。采用upload服务、消息队列、转码服务、缩略图生成服务等组件。存储方面,视频使用分布式存储,缩略图利用bigtable优化大量读取。系统通过缓存、CDN、LB进行扩展,解决热点视频负载不均问题,并使用视频ID进行sharding以平衡存储。关键在于缩略图的高效存储和读取策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Use Cases

  • 上传 视频

  • 分享/查看 视频

  • 基于title搜索

  • 记录视频状态:赞/踩,播放数量

  • 评论

  • 高可靠

  • 高可用AP

  • 低时延,不卡顿

约束

  • 500M用户,DAU 1M
  • 单条视频100MB,1M/day,存储=100TB,上传qps=11.3
  • 视频 r/w = 100/1, 读qps=1100
  • 评论 10M ,每条1KB 存储 10G,qps=110
  • 存储增长:100TB / 3PB / 36PB / 180PB
  • 元数据:vedio / comment/ user 易扩展

High Level

  1. upload服务 app server:负责任务转发和路由,上传任务放到队列,用户注册读写User DB,查看和评论任务读写metadata DB
  2. 消息队列:上传视频先push到队列,然后被消费(编码/生成缩略图/存储)
  3. 转码服务:离线转码到多个码率,多种格式
  4. 缩略图生成服务
  5. video和缩略图存储:分布式存储
  6. video metadata storage:存储视频元信息和评论:title/filePath/user/total views/like/dislike
  7. User DB:存储用户信息

DB schema

详细设计

  1. 如何处理大量读video?
  • 读写分离:服务层面分离upload服务;video存储多副本,分散读取压力;metadata 主从MS架构,写master,读取slave节点;
    • 问题:主从会导致staleness问题,slave节点因同步有延迟,但是在youtube系统可以容忍,用户几毫秒后,可以看到新视频;

2.如何处理缩略图大量读?

  • 存储:小文件(<5KB)大量读(qps=20K)的存储 - bigtable
  • 存储如何选型
    • 合并小文件,减少文件次数,提升seek效率
    • 优化小文件读IO
  • 读取优化:热点文件的cache,小文件,内存cache
  1. 视频如何存储?
  • 分布式文件系统 HDFS
  1. 图片上传的效率优化?
  • 支持断点续传

Scale

  • cache/cdn/LB
    • 热点视频会导致cache servers的负载不均匀,如何解决?
      • 多副本,busy server重定向到less busy servers
        • 重定向的问题?
          • 可能导致多次重定向
          • 增大了时延,视频播放变慢
          • 跨数据中心的重定向可能导致服务变慢
  • deplication
  • sharding:用userID的缺点1)热点user影响同server的其他用户 2)存储不均匀;
    • 用videoID代替userID,用cache解决热点video的问题;查询某个userID的视频时,从多个server获取视频,再交由一个中心server汇总和排序;

总结

系统最关键的点:缩略图如何存储?

  • 读图/视频 = 20/1
  • bigtable适合存储大量读的小文件,在读方面做了很多优化,需要研究下
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值