在互聯(lián)網(wǎng)領(lǐng)域,尤其現(xiàn)在的移動(dòng)互聯(lián)網(wǎng)時(shí)代,F(xiàn)eed流產(chǎn)品是非常常見(jiàn)的,比如我們每天都會(huì)用到的朋友圈,微博,就是一種非常典型的Feed流產(chǎn)品,還有圖片分享網(wǎng)站Pinterest,花瓣網(wǎng)等又是另一種形式的Feed流產(chǎn)品。除此之外,很多App的都會(huì)有一個(gè)模塊,要么叫動(dòng)態(tài),要么叫消息廣場(chǎng),這些也是Feed流產(chǎn)品,可以說(shuō),F(xiàn)eed流產(chǎn)品是遍布天下所有的App中。
概念
我們?cè)谥v如何設(shè)計(jì)Feed流系統(tǒng)之前,先來(lái)看一下Feed流中的一些概念:
Feed:Feed流中的每一條狀態(tài)或者消息都是Feed,比如朋友圈中的一個(gè)狀態(tài)就是一個(gè)Feed,微博中的一條微博就是一個(gè)Feed。
Feed流:持續(xù)更新并呈現(xiàn)給用戶(hù)內(nèi)容的信息流。每個(gè)人的朋友圈,微博關(guān)注頁(yè)等等都是一個(gè)Feed流。
Timeline:Timeline其實(shí)是一種Feed流的類(lèi)型,微博,朋友圈都是Timeline類(lèi)型的Feed流,但是由于Timeline類(lèi)型出現(xiàn)最早,使用最廣泛,最為人熟知,有時(shí)候也用Timeline來(lái)表示Feed流。
關(guān)注頁(yè)Timeline:展示其他人Feed消息的頁(yè)面,比如朋友圈,微博的首頁(yè)等。
個(gè)人頁(yè)Timeline:展示自己發(fā)送過(guò)的Feed消息的頁(yè)面,比如微信中的相冊(cè),微博的個(gè)人頁(yè)等。
特征
2017云棲社區(qū)之星評(píng)選暨年度頒獎(jiǎng)盛典_投票即可參與抽獎(jiǎng)
Feed流系統(tǒng)有一些非常典型的特點(diǎn),比如:
多賬號(hào)內(nèi)容流:Feed流系統(tǒng)中肯定會(huì)存在成千上萬(wàn)的賬號(hào),賬號(hào)之間可以關(guān)注,取關(guān),加好友和拉黑等操作。只要滿(mǎn)足這一條,那么就可以當(dāng)做Feed流系統(tǒng)來(lái)設(shè)計(jì)。
非穩(wěn)定的賬號(hào)關(guān)系:由于存在關(guān)注,取關(guān)等操作,所以系統(tǒng)中的用戶(hù)之間的關(guān)系就會(huì)一直在變化,是一種非穩(wěn)定的狀態(tài)。
讀寫(xiě)比例100:1:讀寫(xiě)嚴(yán)重不平衡,讀多寫(xiě)少,一般讀寫(xiě)比例在10:1,甚至100:1以上。
消息必達(dá)性要求高:比如發(fā)送了一條朋友圈后,結(jié)果部分朋友看到了,部分朋友沒(méi)看到,如果偏偏女朋友沒(méi)看到,那么可能會(huì)產(chǎn)生很?chē)?yán)重的感情矛盾,后果很?chē)?yán)重。
上面的就是Feed流產(chǎn)品的一些特點(diǎn),下面我們來(lái)看一下Feed流系統(tǒng)的分類(lèi)。
分類(lèi)
Feed流的分類(lèi)有很多種,但最常見(jiàn)的分類(lèi)有兩種:
Timeline:按發(fā)布的時(shí)間順序排序,先發(fā)布的先看到,后發(fā)布的排列在最頂端,類(lèi)似于微信朋友圈,微博等。這也是一種最常見(jiàn)的形式。產(chǎn)品如果選擇Timeline類(lèi)型,那么就是認(rèn)為Feed流中的Feed不多,但是每個(gè)Feed都很重要,都需要用戶(hù)看到。
Rank:按某個(gè)非時(shí)間的因子排序,一般是按照用戶(hù)的喜好度排序,用戶(hù)最喜歡的排在最前面,次喜歡的排在后面。這種一般假定用戶(hù)可能看到的Feed非常多,而用戶(hù)花費(fèi)在這里的時(shí)間有限,那么就為用戶(hù)選擇出用戶(hù)最想看的Top N結(jié)果,場(chǎng)景的應(yīng)用場(chǎng)景有圖片分享、新聞推薦類(lèi)、商品推薦等。
上面兩種是最典型,也是最常見(jiàn)的分類(lèi)方式,另外的話(huà),也有其他的分類(lèi)標(biāo)準(zhǔn),在其他的分類(lèi)標(biāo)準(zhǔn)中的話(huà),會(huì)多出兩種類(lèi)型:
Aggregate:聚合類(lèi)型,比如好幾個(gè)朋友都看了同一場(chǎng)電影,這個(gè)就可以聚合為一條Feed:A,B,C看了電影《你的名字》,這種聚合功能比較適合在客戶(hù)端做。一般的Aggregate類(lèi)型是Timeline類(lèi)型 + 客戶(hù)端聚合。
Notice:通知類(lèi)型,這種其實(shí)已經(jīng)是功能類(lèi)型了,通知類(lèi)型一般用于APP中的各種通知,私信等常見(jiàn)。這種也是Timeline類(lèi)型,或者是Aggregate類(lèi)型。
實(shí)現(xiàn)
上面介紹了Feed流系統(tǒng)的概念,特征以及分類(lèi),接下來(lái)開(kāi)始進(jìn)入關(guān)鍵部分:如何實(shí)現(xiàn)一個(gè)千萬(wàn)級(jí)Feed流系統(tǒng)。由于系統(tǒng)中的所有用戶(hù)不可能全部在線(xiàn),且不可能同時(shí)刷新和發(fā)布Feed,那么一個(gè)能支撐千萬(wàn)量級(jí)Feed流的系統(tǒng),其實(shí)在產(chǎn)品上可以支撐上億的用戶(hù)。
如果要設(shè)計(jì)一個(gè)Feed流系統(tǒng),最關(guān)鍵的兩個(gè)核心,一個(gè)是存儲(chǔ),一個(gè)是推送。
存儲(chǔ)
我們先來(lái)看存儲(chǔ),F(xiàn)eed流系統(tǒng)中需要存儲(chǔ)的內(nèi)容分為兩部分,一個(gè)是賬號(hào)關(guān)系(比如關(guān)注列表),一種是Feed消息內(nèi)容。不管是存儲(chǔ)哪一種,都有幾個(gè)問(wèn)題需要考慮:
如何能支持100TB,甚至PB級(jí)數(shù)據(jù)量?
數(shù)據(jù)量大了后成本就很關(guān)鍵,成本如何能更便宜?
如何保證賬號(hào)關(guān)系和Feed不丟失?
我們后面再解答這三個(gè)問(wèn)題,先繼續(xù)看推送
推送
推送系統(tǒng)需要的功能有兩個(gè),一個(gè)是發(fā)布Feed,一個(gè)是讀取Feed流。對(duì)于提送系統(tǒng),仍然有一些問(wèn)題需要在選型之前考慮:
如何才能提供千萬(wàn)的TPS和QPS?
如何保證讀寫(xiě)延遲在10ms,甚至2ms以下?
如何保證Feed的必達(dá)性?
再解答這些問(wèn)題之前,我們先來(lái)大概了解下阿里云的表格存儲(chǔ)TableStore。
TableStore
表格存儲(chǔ)(TableStore)是阿里云自主研發(fā)的專(zhuān)業(yè)級(jí)分布式NoSQL數(shù)據(jù)庫(kù),是基于共享存儲(chǔ)的高性能、低成本、易擴(kuò)展、全托管的半結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)平臺(tái),
支撐互聯(lián)網(wǎng)和物聯(lián)網(wǎng)數(shù)據(jù)的高效計(jì)算與分析。
目前不管是阿里巴巴集團(tuán)內(nèi)部,還是外部公有云用戶(hù),都有成千上萬(wàn)的系統(tǒng)在使用。覆蓋了重吞吐的離線(xiàn)應(yīng)用,以及重穩(wěn)定性,性能敏感的在線(xiàn)應(yīng)用。目前使用的系統(tǒng)中,有些系統(tǒng)每秒寫(xiě)入行數(shù)超過(guò)3500萬(wàn)行,每秒流量超過(guò)5GB,單表總行數(shù)超過(guò)10萬(wàn)億行,單表數(shù)據(jù)量超過(guò)10PB。
點(diǎn)擊鏈接查看全文:yq.aliyun.com/articles/224132