本章节主要为您介绍使用表格存储搭建Feed流的方案原理。

方案架构图

存储模块

如架构图所示,Feed流中的以下内容使用表格存储进行存储。
  • 个人页Timeline:每个用户的发件箱,也就是自己的个人页页面。
  • 关注页Timeline:每个用户的收件箱,也就是自己的关注页页面,内容都是自己关注人发布的消息。
  • 关注列表:保存账号关系,例如朋友圈中的好友关系、微博中的关注列表等。
  • 虚拟关注列表:主要用来个性化和广告。

发布及读取流程

  • 拉结合流程
    • 发布Feed
      1. Feed消息先进入一个队列服务。
      2. 先从关注列表中读取到自己的粉丝列表,以及判断自己是否是大V。
      3. 将自己的Feed消息写入个人页Timeline(发件箱)。如果是大V,写入流程到此结束。
      4. 如果是普通用户,还需要将自己的Feed消息写给自己的粉丝,如果有100个粉丝,那么就要写给100个用户,包括Feed内容和Feed ID。
      5. 第三步和第四步可以合并在一起,使用BatchWriteRow接口一次性将多行数据写入表格存储。
      6. 发布Feed的流程结束。
    • 读取Feed流
      1. 先读取自己关注的大V列表。
      2. 通过GetRange读取自己的收件箱。范围起始位置是上次读取到的最新Feed的ID;结束位置可以是当前时间,也可以是MAX,建议是MAX值。
      3. 如果有关注的大V,则再次并发读取每一个大V的发件箱。如果关注了10个大V,那么则需要10次访问。
      4. 合并2和3步的结果,然后按时间排序,返回给用户。

    至此,使用推拉结合方式的发布、读取Feed流的流程结束。

  • 推模式流程
    如果只是用推模式了,流程更简单。
    • 发布Feed流:不用区分是否大V,所有用户的流程都一样。
    • 读取Feed流:不需要第1步,也不需要第3步,只需要第2步即可,将之前的2 + N(N是关注的大V个数)次网络开销减少为1次网络开销。读取延时大幅降级。

个性化和定向广告

个性化和定向广告是需求度很高的两个功能