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