面試官:小紅書(shū)的Feed流是如何實(shí)現(xiàn)的?
Feed流這塊相較于電商偏冷門(mén)一些,可能有些同學(xué)對(duì)其概念不太理解,我先來(lái)解釋一下。
其實(shí),咱們每天刷的小紅書(shū)首頁(yè)、抖音推薦頁(yè)、新浪微博等,這些都是Feed流,說(shuō)白了就是“按規(guī)則排序的內(nèi)容信息流”。
如下圖所示:
圖片
Feed流一共分為三大類(lèi),基于興趣推薦內(nèi)容、基于用戶(hù)關(guān)注獲取內(nèi)容,以及將兩者相結(jié)合起來(lái)。
把你所關(guān)注博主的內(nèi)容、系統(tǒng)推薦的內(nèi)容,按時(shí)間先后、興趣匹配、熱度高低等因素,整合成一條能持續(xù)往下滑的內(nèi)容列表,你刷的每一頁(yè)都是Feed流動(dòng)態(tài)生成的結(jié)果。
Feed流具備三個(gè)核心特點(diǎn):
1、動(dòng)態(tài)更新,你關(guān)注的博主新增了筆記或視頻,就可能會(huì)出現(xiàn)到Feed流信息中,不是一成不變的固定頁(yè)面。
2、個(gè)性化推薦,會(huì)根據(jù)平臺(tái)算法給你挑內(nèi)容推薦,如果你對(duì)“汽車(chē)”方向感興趣,就不會(huì)一直給你推薦“寵物”相關(guān)的內(nèi)容。
3、沉浸式閱覽,你不用點(diǎn)進(jìn)不同頁(yè)面查找內(nèi)容,上下滑動(dòng)就能持續(xù)閱覽,猶如“刷瀑布” 般順暢。
接下來(lái)我們就來(lái)講講基于用戶(hù)關(guān)注獲取內(nèi)容的Feed流,以及其相關(guān)的讀擴(kuò)散和寫(xiě)擴(kuò)散方案。
讀擴(kuò)散機(jī)制
我們還是以小紅書(shū)APP為例進(jìn)行講解。
當(dāng)我在小紅書(shū)APP中點(diǎn)擊“關(guān)注”頁(yè)時(shí),系統(tǒng)會(huì)從我關(guān)注的所有博主的發(fā)件箱中獲取筆記,并選擇其中的一些熱度較高、質(zhì)量?jī)?yōu)質(zhì)、時(shí)間較近的筆記進(jìn)行展示。
這就是讀擴(kuò)散機(jī)制,所謂“擴(kuò)散”,就是需要讀取我關(guān)注的所有博主的筆記。
如下圖所示:
圖片
圖片
這里有個(gè)發(fā)件箱和收件箱的概念,我來(lái)解釋一下。
發(fā)件箱(Outbox)
用戶(hù)發(fā)布內(nèi)容時(shí),消息首先被寫(xiě)入的存儲(chǔ)區(qū)域,記錄用戶(hù)所有歷史發(fā)布內(nèi)容,類(lèi)似于電子郵箱中的“已發(fā)送”文件夾,每條消息僅存儲(chǔ)一份。
收件箱(Inbox)
用戶(hù)接收關(guān)注對(duì)象發(fā)布內(nèi)容的存儲(chǔ)區(qū)域,按時(shí)間順序聚合所有關(guān)注人的消息,類(lèi)似于電子郵箱中的“收件箱”文件夾,每條消息可能被存儲(chǔ)多份(群發(fā))。
細(xì)心的同學(xué)會(huì)想到,按照上述“讀擴(kuò)散”機(jī)制獲取筆記,如果我關(guān)注了特別多(幾百上千)的博主,那當(dāng)我點(diǎn)擊“關(guān)注”頁(yè)的時(shí)候才現(xiàn)從各個(gè)博主的收件箱中讀取筆記,并基于規(guī)則因子進(jìn)行排序,這樣會(huì)耗時(shí)非常久,嚴(yán)重影響用戶(hù)體驗(yàn)。
于是就衍生出了一種新的機(jī)制來(lái)進(jìn)行互補(bǔ)——寫(xiě)擴(kuò)散機(jī)制。
寫(xiě)擴(kuò)散機(jī)制
所謂寫(xiě)擴(kuò)散機(jī)制,就是當(dāng)小紅書(shū)博主發(fā)布筆記時(shí),除了寫(xiě)入自己的發(fā)件箱外,同時(shí)將筆記寫(xiě)入到所有粉絲(包括我)的收件箱中。
這樣當(dāng)我點(diǎn)擊“關(guān)注”頁(yè)時(shí),直接從自己的收件箱中選擇其中的一些熱度較高、質(zhì)量?jī)?yōu)質(zhì)、時(shí)間較近的筆記進(jìn)行展示即可。
通過(guò)這種方式,就無(wú)需從我所關(guān)注博主的發(fā)件箱中獲取筆記了,可以大幅縮短耗時(shí),這是一種用空間換時(shí)間的思想。
如下圖所示:
圖片
這種機(jī)制看似很美好,但真的可以一招鮮解決所有Feed流問(wèn)題,讓讀擴(kuò)散機(jī)制完全沒(méi)有用武之地嗎?
當(dāng)然不能,因?yàn)樾〖t書(shū)APP上還有另外兩種生物,一種生物叫做大V,也就是粉絲量特別多的那種博主。
以演員趙露思為例,如果她發(fā)布一條筆記,2000多萬(wàn)粉絲采用寫(xiě)擴(kuò)散機(jī)制,那不把數(shù)據(jù)庫(kù)服務(wù)器硬盤(pán)的IOPS打滿(mǎn)才怪。
圖片
另一種生物叫做僵尸粉,也就是常年都不登錄小紅書(shū)APP的用戶(hù),往這類(lèi)用戶(hù)的收件箱里面不斷地寫(xiě)入筆記,實(shí)屬有些消耗寫(xiě)擴(kuò)散性能和浪費(fèi)硬件存儲(chǔ)資源。
讀擴(kuò)散 + 寫(xiě)擴(kuò)散機(jī)制結(jié)合
這種讀擴(kuò)散 + 寫(xiě)擴(kuò)散結(jié)合的機(jī)制才是主流的Feed流解決方案,我們來(lái)詳細(xì)介紹一下。
如上文所述,小紅書(shū)APP上的用戶(hù)分為三大類(lèi):活躍用戶(hù)、僵尸用戶(hù)和大V,這三類(lèi)人是可以通過(guò)用戶(hù)粉絲數(shù)和用戶(hù)行為識(shí)別出來(lái)的。
1、如果大V進(jìn)行筆記發(fā)布,需要通過(guò)讀擴(kuò)散機(jī)制來(lái)代替寫(xiě)擴(kuò)散機(jī)制,來(lái)避免其寫(xiě)入熱點(diǎn)導(dǎo)致數(shù)據(jù)庫(kù)服務(wù)器硬盤(pán)的IOPS打滿(mǎn)問(wèn)題。
2、對(duì)于僵尸用戶(hù),同樣需要通過(guò)讀擴(kuò)散機(jī)制來(lái)代替寫(xiě)擴(kuò)散機(jī)制,來(lái)避免寫(xiě)擴(kuò)散機(jī)制所帶來(lái)的性能消耗和存儲(chǔ)資源浪費(fèi)問(wèn)題。
3、而對(duì)于活躍用戶(hù),我們可以采用寫(xiě)擴(kuò)散為主、讀擴(kuò)散為輔的方式,前者可以縮短筆記展示耗時(shí),提升用戶(hù)體驗(yàn),后者則可以規(guī)避大V發(fā)布筆記的情況。
因此,對(duì)于寫(xiě)擴(kuò)散機(jī)制來(lái)說(shuō),其只適用于非大V博主進(jìn)行筆記發(fā)布時(shí),往活躍粉絲的收件箱進(jìn)行寫(xiě)入的場(chǎng)景。
圖片
結(jié)語(yǔ)
對(duì)于Feed流的讀擴(kuò)散和寫(xiě)擴(kuò)散機(jī)制來(lái)說(shuō),根本沒(méi)有好壞之分,只有場(chǎng)景適用或不適用,我們來(lái)做個(gè)總結(jié)。
1、讀擴(kuò)散機(jī)制的優(yōu)點(diǎn)是消息寫(xiě)入效率高,且消息僅在發(fā)件箱存儲(chǔ)一份,無(wú)需冗余存儲(chǔ)。
缺點(diǎn)則是Feed流讀取性能差,需要從多個(gè)發(fā)件箱讀取消息,并按照規(guī)則因子進(jìn)行排序,高并發(fā)下容易成為瓶頸。
2、寫(xiě)擴(kuò)散機(jī)制的優(yōu)點(diǎn)則是讀擴(kuò)散機(jī)制的缺點(diǎn),那就是Feed流去讀性能好,直接從自己的收件箱讀取數(shù)據(jù),并按照規(guī)則因子進(jìn)行排序即可,無(wú)需進(jìn)行多源聚合。
缺點(diǎn)則是消息寫(xiě)入效率低且復(fù)雜度高,且消息需要在所有粉絲的發(fā)件箱冗余存儲(chǔ)一份,浪費(fèi)硬件存儲(chǔ)資源。
另外就是,我們可以在項(xiàng)目采用讀擴(kuò)散機(jī)制快速驗(yàn)證業(yè)務(wù),降低存儲(chǔ)與開(kāi)發(fā)成本,發(fā)展至中長(zhǎng)期再逐步迭代至讀擴(kuò)散 + 寫(xiě)擴(kuò)散機(jī)制結(jié)合終態(tài)方案。


































