今日頭條技術架構分析

 

原文連接: https://blog.csdn.net/mucaoyx/article/details/84498468

​ ​ 今日頭條創立於2012年3月,到目前僅4年時間。從十幾個工程師開始研發,到上百人,再到200餘人。產品線由內涵段子,到今日頭條,今日特賣,今日電影等產品線。數據庫

1、產品背景

​ ​ 今日頭條是爲用戶提供個性化資訊客戶端。下面就和你們分享一下當前今日頭條的數據(據內部與公開數據綜合):瀏覽器

  • 5億註冊用戶

2014年5月1.5億,2015年5月3億,2016年5月份爲5億。幾乎爲成倍增加。markdown

  • 日活4800萬用戶

2014年爲1000萬日活,2015年爲3000萬日活。網絡

  • 日均5億PV

5億文章瀏覽,視頻爲1億。頁面請求量超過30億次。架構

  • 用戶停留時長超過65分鐘以上

一、文章抓取與分析

​ ​ 咱們平常產生原創新聞在1萬篇左右,包括各大新聞網站和地方站,另外還有一些小說,博客等文章。這些對於工程師來說,寫個Crawler並不是困難的事。併發

​ ​ 接下來,今日頭條會用人工方式對敏感文章進行審覈過濾。此外,今日頭條頭條號目前也有爲數很多的原創文章加入到了內容遴選隊列中。分佈式

​​ ​ 接下來咱們會對文章進行文本分析,好比分類,標籤、主題抽取,按文章或新聞所在地區,熱度,權重等計算。微服務

二、用戶建模

​ ​ 當用戶開始使用今日頭條後,對用戶動做的日誌進行實時分析。使用的工具以下:工具

- Scribeoop

- Flume

- Kafka

​ ​ 咱們對用戶的興趣進行挖掘,會對用戶的每一個動做進行學習。主要使用:

- Hadoop

- Storm

​ ​ 產生的用戶模型數據和大部分架構同樣,保存在MySQL/MongoDB(讀寫分離)以及Memcache/Redis中。

​ ​ 隨着用戶量的不斷擴展大,用戶模型處理的機器集羣數量較大。2015年前爲7000臺左右。其中,用戶推薦模型包括如下維度:

1 用戶訂閱

2 標籤

3 部分文章打散推送

此時,須要每時每刻作推薦。

三、新用戶的「冷啓動」

​ ​ 今日頭條會經過用戶使用的手機,操做系統,版本等「識別」。另外,好比用戶經過社交賬號登陸,如新浪微博,頭條會對其好友,粉絲,微博內容及轉發、評論等維度進行對用戶作初步「畫像」。

​ ​ 分析用戶的主要參數以下:

- 關注、粉絲關係

- 關係

- 用戶標籤

​​ ​ 除了手機硬件,今日頭條還會對用戶安裝的APP進行分析。例如機型和APP結合分析,用小米,用三星的和用蘋果的不一樣,另外還有用戶瀏覽器的書籤。頭條會實時捕捉用戶對APP頻道的動做。另外還包括用戶訂閱的頻道,好比電影,段子,商品等。

四、推薦系統

​ ​ 推薦系統,也稱推薦引擎。它是今日頭條技術架構的核心部分。包括自動推薦與半自動推薦系統兩種類型:

1 自動推薦系統

- 自動候選

- 自動匹配用戶,如用戶地址定位,抽取用戶信息

- 自動生成推送任務

這時須要高效率,大併發的推送系統,上億的用戶都要收到。

2 半自動推薦系統

- 自動選擇候選文章

- 根據用戶站內外動做

​ ​ 頭條的頻道,在技術側劃分的包括分類頻道、興趣標籤頻道、關鍵詞頻道、文本分析等,這些都分紅相對獨立的開發團隊。目前已經有300+個分類器,仍在不斷增長新的用戶模型,原來的用戶模型不用撤消,仍然發揮做用。

​ ​ 在尚未推出頭條號時,內容主要是抓取其它平臺的文章,而後去重,一年幾百萬級,並不太大。主要是用戶動做日誌收集,興趣收集,用戶模型收集。

​ ​ 資訊App的技術指標,好比屏幕滑動,用戶是否是對一篇都看完,停留時間等都須要咱們特別關注

在這裏插入圖片描述

五、數據存儲

​ ​ 今日頭條使用MySQL或Mongo持久化存儲+Memched(Redis),分了不少庫(一個大內存庫),亦嘗試使用了SSD的產品。

​ ​ 今日頭條的圖片存儲,直接放在數據庫中,分佈式保存文件,讀取的時候採用CDN。

六、消息推送

​ ​ 消息推送,對於用戶: 及時獲取信息。對運營來說,可以 提⾼⽤用戶活躍度。好比在今日頭條推送後可以提高20%左右的DAU,若是沒有推送,會影響10%左右 DAU(2015年數據)。

​ ​ 推送後要關注的ROI:點擊率,點擊量。可以監測到App卸載和推送禁用數量。

​ ​ 今日頭條推送的主要內容包括突發與熱點諮訊,有人評論回覆,站外好友註冊加入。

​ ​ 在頭條,推送也是個性化:

- 頻率個性化

- 內容個性化

- 地域

- 興趣

好比:

​ ​ 按照城市:遼寧朝陽發生的某個新聞事件,發給朝陽本地的用戶。

​ ​ 按照興趣:好比京東收購一號店,發給互聯網興趣的用戶。

​ ​ 推送平臺的工具和選擇,須要具有以下的標準:

​ ​ ​ ​ - 通道,首先速度要快,可是要可控,可靠,而且節省資源

​ ​ ​ ​ - 推送的速度要快,有不一樣維度的策略支持,可跟蹤,開發接口要友好

​ ​ ​ ​ - 推送運營的後臺,反饋也要快,包括時效性,熱度,工具操做方便

​ ​ ​ ​ - 對於運營側,清晰是否肯定推薦,包括推送的文案處理

​ ​ 所以,推送後臺應該提供日報,完整的數據後臺,提供A/B Test方案支持。

​ ​ 推送系統一部分使用自有IDC,在發送量特別大,消耗帶寬較嚴重。可使用相似阿里雲的服務,可有效節省成本。

2、今日頭條系統架構

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

3、頭條微服務架構

​​ ​ 今日頭條經過拆分子系統,大的應用拆成小應用,抽象通用層作代碼複用。

在這裏插入圖片描述

​​ ​ 系統的分層比較典型。重點在基礎設施,但願經過基礎設施提升快速迭代、容災和一系列的工做,但願各個業務團隊能更快作業務上的迭代以及架構上的調整。

4、今日頭條的虛擬化PaaS平臺規劃


​ ​ 經過三層實現,經過 PaaS 平臺統一管理。提供通用 SaaS 服務,同時提供通用的 App 執行引擎。最底層是 IaaS 層。

在這裏插入圖片描述

​ ​ IaaS 管理全部的機器,把公有云整合起來,頭條有一些熱點事件會全國推廣推送,對網絡帶寬比較高,咱們藉助公有云,須要哪種類型計算資源,統一抽象起來。基礎設施結合服務化的思路,好比日誌,監控等等功能,業務不須要關注細節就能夠享受到基礎設施提供的能力。

5、總結

​ ​ 今日頭條重要的部分在於:

  • 數據生成與採集
  • 數據傳輸。Kafka作消息總線鏈接在線和離線系統。
  • 數據入庫。數據倉庫、ETL(抽取轉換加載)
  • 數據計算。數據倉庫中的數據表如何能被高效的查詢很關鍵,由於這會直接關係到數據分析的效率。常見的查詢引擎能夠歸到三個模式中,Batch 類、MPP 類、Cube 類,頭條在 3 種模式上都有所應用。
相關文章
相關標籤/搜索