1. 什么是 Feed 流
Feed 是将用户主动订阅的若干消息源组合在一起形成内容聚合器,帮助用户持续地获取最新的订阅源内容。 Feed 流即持续更新并呈现给用户内容的信息流。在生活中 Feed 流也是很常见的,比如微信朋友圈、微博等,就是 Feed 流的经典实现。
2. Feed 流的经典推拉模式
在了解推拉设计模式之前,先看几个概念:
- 发件箱:用于存储发出消息的用户消息的容器
- 收件箱:用于存储粉丝订阅的用户发送的消息的容器
有了这两个概念之后,就引出了拉架构和推架构,其中拉架构对应发件箱,推架构对应收件箱。
2.1 推模式/拉模式的交互流程
假设此时有A用户和B用户,其中B是A的粉丝,当A发送一条消息时会把消息投递到自己的发件箱和B的收件箱,那么这时候这条消息就产生了两条Feed。
当B用户登录成功后查看自己的Feed流时(查看收件箱)可以有两套技术选型,分别是拉模式和推模式。
2.1.1 拉模式(读扩散)
拉模式是指B用户要查询关注的用户的列表,再查询关注的用户的发件箱,从而获取关注用户发送给B用户的信息。
优点:
- 关注的用户少的时候,可以快速找到发送给自己的消息
缺点:
- 如果关注的用户很多,那么查询的消耗是比较大的
2.1.2 推模式(写扩散)
推模式是指A用户在发送消息时,会先查询自己的粉丝列表,再向所有关注自己的粉丝的收件箱投递一条信息。
优点:
- 粉丝数量较少的时候,可以更快的将发送的消息推送到粉丝的收件箱,粉丝直接查看自己的收件箱即可
- 可以异步化的处理消息写入(实时性要求不高时)
缺点:
- 当粉丝数量较多时,用户发送一条消息会产生大量的写入粉丝收件箱的操作,性能较差
- 非活跃用户较多时,不会产生实际意义的读取操作,浪费磁盘空间
2.2 推拉混合模式
由于只使用推模式或拉模式都有不可避免的一些问题,这里就可以使用推拉混合模式来尽可能的避免在一种模式下的缺点。
其中推拉混合模式的方法是:
- 大V不推,只写入发件箱,对大V用户采用拉模式
- 非大V用户采用推模式,让用户直接读取收件箱
此时粉丝在获取Feed时需要将大V发件箱的信息和自己收件箱的信息进行merge后再展示。