微博直播架构

个人信息

设计⼀个视频弹幕系统

  • 要求:
    • 允许评论(每条消息平均300byte)
    • 每秒只需显示最新的5条消息
    • ⽤户发⾔实时性(5s之内)
    • 视频平均⻓度1个⼩时,⽤户平均观看时⻓为5分钟,⽤户点击打开视频的qps为100

资源评估

  • ⽉活⽤户数:3亿
  • 平均关注⼈数:200⼈
  • feed晚⾼峰峰值:2W QPS
  • ⽇均内容发布⼈数:50W
  • ⽇均内容发布总量:100W
  • 假设发布直播⽤户数为关注⼈数的10%
  • 公式:
    • 读 直播:2W * 200 QPS * 10%= 40wQPS
    • 写评论:
      • 假设有200个粉丝评论:200QPS
    • 读评论,出story的同时,出评论,因此读评论和读直播的QPS一致。
      • 40W QPS

资源选取

  1. mysql

    MySQL单实例最高的读QPS为6k,假设穿透DB的概率为5%,请求量为2w/s。

    按uid划分,4个端口,每个端口5000QPS读取,因此需12个从。故 2主4从。

  2. memcached

    按uid划分,4个端口。L1,Master,Slave三层缓存。

    每个端口10wQPS读,写QPS几乎可以忽略不计,因此需要8台L1,1台Master,2台Slave。

数据存储设计

  • 数据表设计
    • 评论表
      • liveId
      • commentId
      • commentUid
      • commentTime
      • commentContent

系统结构设计

  • 结构图
  • Markdown

接口设计

  • 评论发布接口,用户发布评论
    • 传入参数:用户uid,直播id,评论内容,评论时间
    • 返回值:true/false
    • 用户发布评论时调用该接口
  • 评论获取接口,用于获取最新的评论信息
    • 传入参数:当前时间
    • 返回值:true/false
    • 每秒只需显示最新的5条消息,系统每秒钟调用一次该接口,每秒钟内最新的5条评论展示出来
  • 评论删除接口,保证用户发言的实时性。
    • 传入参数:当前时间
    • 返回值:true/false
    • 根据传入时间,将前15秒钟内用户发布的评论删除,保证用户发言的实时性。