微博日活躍用戶 1.6 億+,每日訪問量達(dá)百億級(jí),面對(duì)龐大用戶群的海量訪問,良好的架構(gòu)且不斷改進(jìn)的緩存體系具有非常重要的支撐作用。
本文由新浪微博技術(shù)專家陳波老師,分為如下四個(gè)部分跟大家詳細(xì)講解那些龐大的數(shù)據(jù)都是如何呈現(xiàn)的:
微博在運(yùn)行過程中的數(shù)據(jù)挑戰(zhàn)
Feed 平臺(tái)系統(tǒng)架構(gòu)
Cache 架構(gòu)及演進(jìn)
總結(jié)與展望
Feed 平臺(tái)系統(tǒng)架構(gòu)總共分為五層:
最上面是端層,比如 Web 端、客戶端、大家用的 iOS 或安卓的一些客戶端,還有一些開放平臺(tái)、第三方接入的一些接口。
下一層是平臺(tái)接入層,不同的池子,主要是為了把好的資源集中調(diào)配給重要的核心接口,這樣遇到突發(fā)流量的時(shí)候,就有更好的彈性來服務(wù),提高服務(wù)穩(wěn)定性。
再下面是平臺(tái)服務(wù)層,主要是 Feed 算法、關(guān)系等等。
接下來是中間層,通過各種中間介質(zhì)提供一些服務(wù)。
最下面一層就是存儲(chǔ)層。
大家日常刷微博的時(shí)候,比如在主站或客戶端點(diǎn)一下刷新,最新獲得了十到十五條微博,這是怎么構(gòu)建出來的呢?
刷新之后,首先會(huì)獲得用戶的關(guān)注關(guān)系。比如他有一千個(gè)關(guān)注,會(huì)把這一千個(gè) ID 拿到,再根據(jù)這一千個(gè) UID,拿到每個(gè)用戶發(fā)表的一些微博。
同時(shí)會(huì)獲取這個(gè)用戶的 Inbox,就是他收到的特殊的一些消息,比如分組的一些微博、群的微博、下面的關(guān)注關(guān)系、關(guān)注人的微博列表。
拿到這一系列微博列表之后進(jìn)行集合、排序,拿到所需要的那些 ID,再對(duì)這些 ID 去取每一條微博 ID 對(duì)應(yīng)的微博內(nèi)容。
如果這些微博是轉(zhuǎn)發(fā)過來的,它還有一個(gè)原微博,會(huì)進(jìn)一步取原微博內(nèi)容。通過原微博取用戶信息,進(jìn)一步根據(jù)用戶的過濾詞對(duì)這些微博進(jìn)行過濾,過濾掉用戶不想看到的微博。
根據(jù)以上步驟留下的微博,會(huì)再進(jìn)一步來看,用戶對(duì)這些微博有沒有收藏、點(diǎn)贊,做一些 Flag 設(shè)置,還會(huì)對(duì)這些微博各種計(jì)數(shù),轉(zhuǎn)發(fā)、評(píng)論、贊數(shù)進(jìn)行組裝,最后才把這十幾條微博返回給用戶的各種端。
這樣看來,用戶一次請(qǐng)求得到的十幾條記錄,后端服務(wù)器大概要對(duì)幾百甚至幾千條數(shù)據(jù)進(jìn)行實(shí)時(shí)組裝,再返回給用戶。
整個(gè)過程對(duì) Cache 體系強(qiáng)度依賴,所以 Cache 架構(gòu)設(shè)計(jì)優(yōu)劣會(huì)直接影響到微博體系表現(xiàn)的好壞。
接下來我們看一下 Cache 架構(gòu),它主要分為六層:
第一層是 Inbox,主要是分組的一些微博,然后直接對(duì)群主的一些微博。Inbox 比較少,主要是推的方式。
第二層是 Outbox,每個(gè)用戶都會(huì)發(fā)常規(guī)的微博,都會(huì)到它的 Outbox 里面去。根據(jù)存的 ID 數(shù)量,實(shí)際上分成多個(gè) Cache,普通的大概是 200 多條,如果長的大概是 2000 條。
第三層是一些關(guān)系,它的關(guān)注、粉絲、用戶。
第四層是內(nèi)容,每一條微博一些內(nèi)容存在這里。
第五層就是一些存在性判斷,比如某條微博我有沒有贊過。之前有一些明星就說我沒有點(diǎn)贊這條微博怎么顯示我點(diǎn)贊了,引發(fā)了一些新聞。而這種就是記錄,實(shí)際上她有在某個(gè)時(shí)候點(diǎn)贊過但可能忘記了。
最下面還有比較大的一層——計(jì)數(shù),每條微博的評(píng)論、轉(zhuǎn)發(fā)等計(jì)數(shù),還有用戶的關(guān)注數(shù)、粉絲數(shù)這些數(shù)據(jù)。