關(guān)于類朋友圈設(shè)計(jì)架構(gòu)分析

前言

類朋友圈架構(gòu)設(shè)計(jì)一直是一個(gè)很有意思的話題,雖然沒有絕對(duì)正確的答案,不妨深入探究一下其中的奧秘。


設(shè)計(jì)思路

首先一款產(chǎn)品的設(shè)計(jì)方案,與公司目標(biāo)、產(chǎn)品需求、項(xiàng)目預(yù)算、員工知識(shí)偏好與水平結(jié)構(gòu)等等都有著緊密的聯(lián)系。在離開這些細(xì)節(jié)來空談如何設(shè)計(jì),是很有問題的。因此我們分析問題,著重去考慮核心的點(diǎn),忽略具體的實(shí)現(xiàn)細(xì)節(jié)。
我們以新浪微博、微信、twitter去入手分析。

新浪微博

feed是將用戶主動(dòng)訂閱的若干消息源組合在一起形成內(nèi)容聚合器,幫助用戶持續(xù)地獲取最新的訂閱源內(nèi)容。

為什么要先介紹feed流的概念?朋友圈也好微博也好,都是由用戶主動(dòng)訂閱消息源并向用戶提供消息內(nèi)容。
新浪微博推拉并存,以拉為主。若粉絲數(shù)很大的用戶,采用拉模式更為合理,當(dāng)粉絲上線的時(shí)候,對(duì)微博進(jìn)行數(shù)據(jù)拉取,這樣可以有效避免數(shù)據(jù)過度冗余產(chǎn)生的浪費(fèi),尤其是大量僵尸粉存在的情況。若關(guān)注的用戶很多,則需要在后端進(jìn)行多次拉取再取并集,但是查詢效率會(huì)降低,因此一般的微博都有關(guān)注上限。大多時(shí)候應(yīng)該是推拉模式并存。
另外,新浪微博的「拉」做了很大程度的優(yōu)化,每次拉取數(shù)據(jù)時(shí)參考上次拉取的時(shí)間,也就是說每次拉去的時(shí)候只是拉去新的,這樣就減少了很多資源。每次拉出來的數(shù)據(jù)是暫存在緩存結(jié)構(gòu)中。而且新浪微博將后臺(tái)的數(shù)據(jù)按時(shí)間分區(qū)存儲(chǔ),這樣冷熱結(jié)合平衡資源配置。 當(dāng)數(shù)據(jù)量龐大了之后自然需要考慮分庫分表,因此分布式存儲(chǔ)層面的設(shè)計(jì)也尤為重要。
新浪微博的feed流從曾經(jīng)的timeline已經(jīng)變成了rank,根據(jù)計(jì)算的權(quán)重推送給用戶。最常見的是feed流中插入商業(yè)變現(xiàn)的廣告內(nèi)容,雖然會(huì)有部分用戶抵觸,但是feed流廣告帶給平臺(tái)的收入是實(shí)實(shí)在在的。

微信

再比如微信使用的是「推」,因?yàn)槊總€(gè)人的好友一般不超過三位數(shù),并不像新浪那樣,所以推可以滿足微信的需求。
每當(dāng)有action的時(shí)候就向所有的好友推送,每個(gè)用戶的接受的feed表都是單獨(dú)的,是現(xiàn)成的,如果有好友動(dòng)作的話單獨(dú)添加此用戶的feed表 。因此,每次刷新朋友圈不會(huì)一次次都去遍歷所有朋友圈內(nèi)容,而是去feed表抓取數(shù)據(jù)。所以微信目前也不支持編輯操作,只有添加/刪除。

twitter

twitter用了哪些數(shù)據(jù)庫?

  • Hadoop 作社交圖分析、推薦喜好、API分析、廣告投放以及MySQL、Manhattan備份和log存儲(chǔ)等非核心業(yè)務(wù)的數(shù)據(jù)。
  • MySQL & Manhattan 作用戶數(shù)據(jù)存儲(chǔ)的首選。
  • Memcache, Redis 作緩存
  • FlockDB 存儲(chǔ)社交圖
  • MetricsDB 存儲(chǔ)平臺(tái)數(shù)據(jù)記錄
  • Blobstore 存儲(chǔ)圖片、視頻和大文件

早期的文章提到Twitter棄用MySQL換成了NoSQL型的Cassandra,但是后來也無法滿足增長龐大的用戶量,開始使用Manhattan。
Manhattan是Twitter基于目前需求及長遠(yuǎn)考慮,自行開發(fā)的分布式數(shù)據(jù)庫系統(tǒng)。在設(shè)計(jì)Manhattan時(shí)主要遵循了保持核心輕量和簡單、能夠更快地帶來價(jià)值、有限考慮多租戶、服務(wù)質(zhì)量(QoS)和自助服務(wù)、專注于可預(yù)測性、存儲(chǔ)作為服務(wù),而不僅僅是技術(shù)的原則。
大致可以看出twitter的重心更加側(cè)重在了數(shù)據(jù)庫的研發(fā)上,更加針對(duì)業(yè)務(wù)。


總結(jié)

總之,雖然沒有詳細(xì)的去列舉表結(jié)構(gòu)應(yīng)該如何去設(shè)計(jì),但是中間提供的幾種實(shí)現(xiàn)的思路都是可以借鑒的。另外,可擴(kuò)展性也是需要重點(diǎn)關(guān)照的一環(huán),最初需要具體看所要開發(fā)的社交結(jié)構(gòu)是什么樣子,根據(jù)可預(yù)見的數(shù)據(jù)量進(jìn)行分析。一開始用戶少就沒有必要考慮那么多,等到用戶爆機(jī)之后就需要去做優(yōu)化了。

最后推薦下阿里的這篇文章,應(yīng)該是非常詳細(xì)的案例了億級(jí)規(guī)模的 Feed 流系統(tǒng),如何輕松設(shè)計(jì)?


參考

NoSQL 還是 SQL ?這一篇講清楚
微博的數(shù)據(jù)庫設(shè)計(jì),如何解答?
微博分布式存儲(chǔ)作業(yè)實(shí)現(xiàn)方法
what database does twitter use

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一年,又過了一年 昨日還看見你的音容笑貌 今日又不知 離了多少天涯 我還在時(shí)光里游蕩 你已消失在我的時(shí)光里 明天 ...
    萋萋月下閱讀 163評(píng)論 0 1
  • 老趙和我說,只要是你深思熟慮,有把握有調(diào)研有自信去做的事,我都會(huì)支持你的! 夜晚的蚊子伴著潮濕的好像敷在你臉上的熱...
    我叫努力努力哦哦哦閱讀 314評(píng)論 0 0
  • “牽手互加”,學(xué)會(huì)了“改變”,所有的“無法”,都變成了“有法”,所有的“困難”,都成變成了“奮進(jìn)”,于是“換來了...
    美丫頭呀閱讀 1,931評(píng)論 23 29
  • 良緣由夙締,佳偶自天成。 (美好姻緣是前世締結(jié),好配偶上天生成) 蹇修與柯人,皆是媒妁之言。 (蹇修和柯人叫媒人)...
    愚人傳說閱讀 1,741評(píng)論 0 2
  • 用時(shí)光之菁華洗臉而青春不老 我要用花瓣喚醒沉睡的你 當(dāng)夜色從你的紗帳褪成朝暉 你醒后發(fā)現(xiàn)冰冷的宮殿只有你一人 事情...
    林簪煙詩精選閱讀 349評(píng)論 0 0

友情鏈接更多精彩內(nèi)容