今日頭條的核心架構解析

来源:http://www.cnblogs.com/chenpingzhao/archive/2016/08/28/5814718.html
-Advertisement-
Play Games

今日頭條創立於2012年3月,到目前僅4年時間。從十幾個工程師開始研發,到上百人,再到200餘人。產品線由內涵段子,到今日頭條,今日特賣,今日電影等產品線。 一、產品背景 今日頭條是為用戶提供個性化資訊客戶端。下麵就和大家分享一下當前今日頭條的數據(據內部與公開數據綜合): 5億註冊用戶 2014年 ...


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

一、產品背景

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

  • 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頻道的動作。另外還包括用戶訂閱的頻道,比如電影,段子,商品等。

4、推薦系統

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

1 自動推薦系統

-  自動候選

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

-  自動生成推送任務

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

 

2 半自動推薦系統

-  自動選擇候選文章

-  根據用戶站內外動作

 

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

 

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

 

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

5、數據存儲

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

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

6、消息推送

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

推送後要關註的ROI:點擊率,點擊量。能夠監測到App卸載和推送禁用數量。

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

 

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

-  頻率個性化

-  內容個性化

-  地域

-  興趣

 

比如:

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

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

 

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

 

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

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

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

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

 

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

 

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

7、延展思考

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

 

作者:杜江。21CTO(21cto.com)社區創始人。多年架構與管理經驗, 原趕集網創始工程師,正和島CTO以及今日頭條今日特賣技術負責人。 著有《PHP5與MySQL5 Web開發技術詳解》、《PHP5完全攻略》、《PHP與MySQL高性能應用開發》(即將出版)。

原文鏈接:http://mp.weixin.qq.com/s?__biz=MjM5NTg2NTU0Ng==&mid=2656593843&idx=1&sn=6a96c9221fd45d0f72c5a4c1c99a02e3&scene=0#wechat_redirect


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Ubuntu 16.04 下使用Xampp 1. 什麼是Xampp? XAMPP(Apache+MySQL+PHP+PERL) 是一個功能強大的建站集成軟體包。這個軟體包原來的名字是 LAMPP,但是為了避免誤解,最新的幾個版本就改名為 XAMPP 了。它可以在Windows、Linux、Solar ...
  • Kali Linux在安裝完virtualbox後,打開虛擬機會出現:kernel driver not installed (rc=1908)錯誤提示,根據提示,大概可以看出是由於缺少內核模塊引起的,因為VirtualBox預設是在DKMS內核中運行,所以系統需要有DKMS的支持。所以最根本的是先 ...
  • 1.LCD即液晶顯示器,控制原理是控制其中的電子槍,在n行*n列的屏幕上投射不同顏色從而形成圖像 2.編程步驟: ①打開LCD背光將LCD背光對應的GPIO設置為禁止上拉(GPxUP相應位寫入1),選擇output類型(GPxCON相應位寫入01),輸出為高電平(GPxDAT相應位寫入1)。 ②打開 ...
  • 1.ifconfig查看和配置網路介面信息(1)設ip地址ifconfig eth0 192.168.0.1(2)暫時關閉或啟用網卡ifconfig eth0 downifconfig eth0 up(3)設子網掩碼ifconfig eth0 netmask 255.255.255.0(4)查看第一 ...
  • 1.什麼是shell?Shell是用戶和Linux操作系統之間的介面。Linux中有多種shell,其中預設使用的是Bash。 2.shell的分類(1)bash bash shell 是 Bourne shell 的一個免費版本,它是最早的 Unix shell,包括許多附加的特點。Bash 有可 ...
  • ...
  • 標題:sed命令的使用 作用:sed是以行為單位處理文本數據,可以對數據按行進行選取(顯示)、替換、刪除和新增等功能。 一、用法 sed [-nefr] [動作] 參數: -n:使用安靜模式,取消自動列印模式空間。在一般來自STDIN的數據一般都會被列出到屏幕上,但如果加上-n參數後,則只有經過se ...
  • 1、在mac上安裝好了mysql-5.7.14 ,會自動生成一個初始密碼,這個初始密碼一定要記住: 在終端中輸入:mysql -u root -p,提示:mysql: command not found。這是因為沒有配置環境變數; 2、配置環境變數,即配置.bash_profile文件,~/.zsh ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...