如何打造千万级Feed流系统
在互联网领域,Feed流产品已被广泛应用于各种主流应用中,例如我们每天都会使用的朋友圈、微博,还有头条的资讯推荐、抖音快手的短视频推荐等。本技术解决方案从Feed流系统分析、方案对比、方案实现、方案扩展等维度全面讲解如何打造一个千万级Feed流系统。
Feed流介绍
基本特征
Feed是指状态或者消息,而Feed流本质上是一种信息流:N个发送者的数据,通过用户关系,推送给M个接收者,在Feed流中持续更新并呈现给用户内容。
Feed流包含以下几种基本特征。
特征 | 描述 |
多账号内容流 | Feed流系统中存在成千上万的账号,账号之间可以建立关系。 |
非稳定的账号关系 | 系统用户之间的关系一直在变化,是一种非稳定的状态。 |
读写严重不平衡 | 读多写少,一般读写比例在10 : 1,甚至100 : 1以上。 |
消息必达性要求高 | 例如发送了一条朋友圈后,结果部分朋友收到信息,部分朋友没收到信息,导致信息不对称。 |
数据分类
根据上述特征和信息流关系,Feed流系统中的数据主要可以分为三类:
发送的数据
关系数据
接收的数据
系统分类
Feed流种类较多,可根据接收的数据和关系数据进行分类。
根据接收数据的展示排序方式可以分为:
基于时间的Timeline:按发布的时间顺序排序,最后发布的排列在最上方,类似于朋友圈、微博,是最常见的Feed流形式。
基于推荐的Rank:按非时间的因子排序,例如按照用户的喜好度排序,选择出用户最想看的Top N结果排在上方。应用场景包括视频推荐、资讯推荐、商品推荐等。
根据用户数据中的关注关系可以分为:
单向关系系统:用户之间的关系有向,用户可以单方面关注另一个用户。因此系统中可能会存在大V,即有很多粉丝的用户。主要产品有微博、抖音等。
双向关系系统:用户之间的关系无向,用户建立关系后成为好友,即可互相交流,因此系统中不存在大V和粉丝的概念。用户使用此类产品时,会对时效性有更高的要求。主要产品有朋友圈、私信等。
示例系统介绍
本方案主要介绍和实现的是单向关系的Timeline系统,期望效果类似于微博,主要实现的功能如下:
发布Feed:用户可以发布新消息。
获取Feed流:用户可以查看自己所关注的人的所有消息或查看某个用户发布的消息。
关注:用户间可以彼此关注。
结合系统功能和上述数据分类和系统分类,需要设计的核心方案如下:
存储:保存用户发送的数据。
同步:保存用户需要接收的数据。
元数据:保存用户关系数据和用户信息。
方案分析
本方案从存储、同步及元数据、数据推送等角度对主流的实现方案进行了对比分析:
存储、同步及元数据方案对比分析请参见方案分析。
推送方案对比分析请参见推送方案分析。
本技术解决方案技术实现原理请参见表格存储Feed流方案原理。
方案实现
本方案使用Timeline模型实现Feed流系统的存储与同步功能,包含示例代码并支持一键部署,详情请参见方案实现。
后续步骤
针对本技术方案没有讨论到但是您可能需要关注的问题,请参见方案扩展。