1. 什么是 Feed 流
Feed 是將用戶主動訂閱的若干消息源組合在一起形成內(nèi)容聚合器,幫助用戶持續(xù)地獲取最新的訂閱源內(nèi)容。 Feed 流即持續(xù)更新并呈現(xiàn)給用戶內(nèi)容的信息流。在生活中 Feed 流也是很常見的,比如微信朋友圈、微博等,就是 Feed 流的經(jīng)典實(shí)現(xiàn)。
2. Feed 流的經(jīng)典推拉模式
在了解推拉設(shè)計(jì)模式之前,先看幾個概念:
- 發(fā)件箱:用于存儲發(fā)出消息的用戶消息的容器
- 收件箱:用于存儲粉絲訂閱的用戶發(fā)送的消息的容器
有了這兩個概念之后,就引出了拉架構(gòu)和推架構(gòu),其中拉架構(gòu)對應(yīng)發(fā)件箱,推架構(gòu)對應(yīng)收件箱。
2.1 推模式/拉模式的交互流程
假設(shè)此時有A用戶和B用戶,其中B是A的粉絲,當(dāng)A發(fā)送一條消息時會把消息投遞到自己的發(fā)件箱和B的收件箱,那么這時候這條消息就產(chǎn)生了兩條Feed。
當(dāng)B用戶登錄成功后查看自己的Feed流時(查看收件箱)可以有兩套技術(shù)選型,分別是拉模式和推模式。
2.1.1 拉模式(讀擴(kuò)散)
拉模式是指B用戶要查詢關(guān)注的用戶的列表,再查詢關(guān)注的用戶的發(fā)件箱,從而獲取關(guān)注用戶發(fā)送給B用戶的信息。
優(yōu)點(diǎn):
- 關(guān)注的用戶少的時候,可以快速找到發(fā)送給自己的消息
缺點(diǎn):
- 如果關(guān)注的用戶很多,那么查詢的消耗是比較大的
2.1.2 推模式(寫擴(kuò)散)
推模式是指A用戶在發(fā)送消息時,會先查詢自己的粉絲列表,再向所有關(guān)注自己的粉絲的收件箱投遞一條信息。
優(yōu)點(diǎn):
- 粉絲數(shù)量較少的時候,可以更快的將發(fā)送的消息推送到粉絲的收件箱,粉絲直接查看自己的收件箱即可
- 可以異步化的處理消息寫入(實(shí)時性要求不高時)
缺點(diǎn):
- 當(dāng)粉絲數(shù)量較多時,用戶發(fā)送一條消息會產(chǎn)生大量的寫入粉絲收件箱的操作,性能較差
- 非活躍用戶較多時,不會產(chǎn)生實(shí)際意義的讀取操作,浪費(fèi)磁盤空間
2.2 推拉混合模式
由于只使用推模式或拉模式都有不可避免的一些問題,這里就可以使用推拉混合模式來盡可能的避免在一種模式下的缺點(diǎn)。
其中推拉混合模式的方法是:
- 大V不推,只寫入發(fā)件箱,對大V用戶采用拉模式
- 非大V用戶采用推模式,讓用戶直接讀取收件箱
此時粉絲在獲取Feed時需要將大V發(fā)件箱的信息和自己收件箱的信息進(jìn)行merge后再展示。