今日頭條這麼牛逼,用了什麼技術?

java隋七哥發表於2018-11-05

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

JAVA高階架構群:https://jq.qq.com/?_wv=1027&k=5gMDouY

一、產品背景

今日頭條是為使用者提供個性化資訊客戶端。下面就和大家分享一下當前今日頭條的資料(據內部與公開資料綜合):

5億註冊使用者

2014年5月1.5億,2015年5月3億,2016年5月份為5億。幾乎為成倍增長。

日活4800萬使用者

2014年為1000萬日活,2015年為3000萬日活。

日均5億PV

5億文章瀏覽,視訊為1億。頁面請求量超過30億次。

使用者停留時長超過65分鐘以上

二、技術與架構演進

1、文章抓取與分析

我們日常產生原創新聞在1萬篇左右,包括各大新聞網站和地方站,另外還有一些小說,部落格等文章。這些對於工程師來講,寫個Crawler並非困難的事。

接下來,今日頭條會用人工方式對敏感文章進行稽核過濾。此外,今日頭條頭條號目前也有為數不少的原創文章加入到了內容遴選佇列中。

接下來我們會對文章進行文字分析,比如分類,標籤、主題抽取,按文章或新聞所在地區,熱度,權重等計算。

2、使用者建模

當使用者開始使用今日頭條後,對使用者動作的日誌進行實時分析。使用的工具如下:

– Scribe

– Flume

– Kafka

我們對使用者的興趣進行挖掘,會對使用者的每個動作進行學習。主要使用:

– Hadoop

– Storm

產生的使用者模型資料和大部分架構一樣,儲存在MySQL/MongoDB(讀寫分離)以及Memcache/Redis中。

隨著使用者量的不斷擴充套件大,使用者模型處理的機器叢集數量較大。2015年前為7000臺左右。其中,使用者推薦模型包括以下維度:

1 使用者訂閱

2 標籤

3 部分文章打散推送

此時,需要每時每刻做推薦。

3、新使用者的“冷啟動”

今日頭條會通過使用者使用的手機,作業系統,版本等“識別”。另外,比如使用者通過社交帳號登入,如新浪微博,頭條會對其好友,粉絲,微博內容及轉發、評論等維度進行對使用者做初步“畫像”。

分析使用者的主要引數如下:

– 關注、粉絲關係 

– 關係

– 使用者標籤

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

這裡推薦一下我的JAVA架構學習交流群:614478470 ,想要學習Java高架構、分散式架構、高可擴充套件、高效能、高併發、效能優化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分散式專案實戰學習架構師視訊都有整理,送給每一位JAVA小夥伴,有想學習JAVA架構的,或是轉行,還有工作中想提升自己能力的,正在學習的小夥伴歡迎加入學習。

4、推薦系統

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

1 自動推薦系統

–  自動候選

–  自動匹配使用者,如使用者地址定位,抽取使用者資訊

–  自動生成推送任務

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

2 半自動推薦系統

–  自動選擇候選文章

–  根據使用者站內外動作

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

在還沒有推出頭條號時,內容主要是抓取其它平臺的文章,然後去重,一年幾百萬級,並不太大。主要是使用者動作日誌收集,興趣收集,使用者模型收集。

資訊App的技術指標,比如螢幕滑動,使用者是不是對一篇都看完,停留時間等都需要我們特別關注。 

5、資料儲存

今日頭條使用MySQL或Mongo持久化儲存+Memched(Redis),分了很多庫(一個大記憶體庫),亦嘗試使用了SSD的產品。

今日頭條的圖片儲存,直接放在資料庫中,分散式儲存檔案,讀取的時候採用CDN。

6、訊息推送

訊息推送,對於使用者: 及時獲取資訊。對運營來講,能夠 提⾼⽤使用者活躍度。比如在今日頭條推送後能夠提升20%左右的DAU,如果沒有推送,會影響10%左右 DAU(2015年資料)。

推送後要關注的ROI:點選率,點選量。能夠監測到App解除安裝和推送禁用數量。

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

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

–  頻率個性化

–  內容個性化

–  地域

–  興趣

比如:

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

按照興趣:比如京東收購一號店,發給網際網路興趣的使用者。

推送平臺的工具和選擇,需要具備如下的標準:

– 通道,首先速度要快,但是要可控,可靠,並且節省資源

–  推送的速度要快,有不同維度的策略支援,可跟蹤,開發介面要友好

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

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

因此,推送後臺應該提供日報,完整的資料後臺,提供A/B Test方案支援。

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

JAVA高階架構群:https://jq.qq.com/?_wv=1027&k=5gMDouY

7、延展思考

現在很多客戶端都會需要推薦技術,比如電商、旅遊類的商品推薦,也可以有娛樂頭條、健康頭條、體育頭條等類似的應用,這些產品在技術側的實現,包括使用者,模型,資料都是相通的。


相關文章