抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

抖音系统设计

clarifying

  • 成分分析: 视频分享平台, 主要关注上传, 下载, streaming和后台分布式系统
  • 规模分析: 10亿用户, 分布在150个国家, 每天10亿浏览量, 一年100亿个视频
  • 主要目标:
    • time in app, 大概每人每天1小时

abs

  1. 主动出击, 缩短问题范围
  2. 主动出击, 提议重点关注
  3. 确保面试官同意你的想法, 或者说你们要在一个频道上

细节假设

  1. 视频大小: 时长, 分辨率等
  2. 视频数据考虑
    1. 数据量计算: * 视频量, 流量, 数据量, 冗余考虑
    2. (replica + device) * 10 => 很大很大
    3. 考虑支持这种数据量的存储格式, e.g. blob
  3. 元数据考虑
    1. 数据量考虑
    2. 存储方式, NoSQL
  4. 流量考虑
    1. 计算和统计流量大小
  5. 用户文件等…

abs

  1. 具体细分假设, 具体数字计算
  2. 全面考虑: 数据, 元数据, 网络流量, 用户数据, 存储方式
  3. 不断跟面试官确认方向ok

组件设计

  • 负载均衡
  • 微服务
    • 用户基本预览功能的
    • 上传的
    • 直播的
  • 数据库
    • 视频数据
      • 像之前考虑的, blob格式存储
      • 可以直接考虑现成产品: amz S3等
      • 分层存储: 时间分, 地区分等等
    • 元数据
      • NoSQL, 但要有结构, 因为有要经常查看
    • 用户数据
      • 考虑到用户间存储关系(SQL, 图谱), 可以考虑amz RDS, google spanner等
    • 冷热数据分离
  • CDN以及区域影响的考虑
    • CDN如CloudFront
  • 用户体验设计(推荐系统)
    • 推荐系统微服务
    • 获取一个视频列用用于推荐给用户: video_id[]
  • 模块间交互的考虑, e.g. app server获取用户信息, 然后发送给推荐系统模块
  • abs
    • 善用工具, 画好图不言自明
    • 冷热数据分离: 元数据, 视频数据
    • 尝试把技术都用上做个app
      • 微服务: 业务拆分
      • S3做blob存储
      • NoSQL做元数据存储
      • SQL做用户数据的存储, 考虑建立用户之间的关联
      • CloudFront做CDN

详细数据结构设计

  • metadata设计
    • 用户数据设计
      • 用户画像
    • 视频数据设计
      • 用户画像标签

abs

  • top down: 先hight level的看

瓶颈考虑

  • 分布式数据库
    • tradeoff: 不是所有数据量都需要分布式的
  • 离线计算: 利用手机GPU预处理

abs

  • 考虑设备自身的计算功能

评论