0
雷鋒網按:昨天,騰訊大數據技術峰會暨KDD China技術峰會上在深圳召開,騰訊數據平臺部總經理,首席數據專家蔣杰做了騰訊大數據平臺Angel即將全面開源的報告,雷鋒網現場摘編如下。
大家好,很多人已經知道騰訊獲得了今年的Sort benchmark的排序的4項冠軍,很多朋友來問我,騰訊是怎么做到的,背后支撐的究竟是什么樣的技術?今天,我借這個機會,跟大伙來講講背后的一些故事。
相信很多人看過我們在很多城市機場投放的這個廣告,這個廣告里面畫的是一個賽跑的選手,排序比賽,就跟奧運會的百米賽跑一樣,都要很快。但我想說的是,其實我們更像一個長跑選手,我們在跑馬拉松,這場馬拉松,我們跑了7年。

回顧過去幾年的比賽的成績,幾年前冠軍都是被美國企業壟斷的,最近三年則是BAT拿了冠軍。應該說,這幾年,國內互聯網的發展速度不比美國慢,與此同時,以BAT為代表的國內互聯網企業的計算能力也不落后于美國。

過去幾年,獲得冠軍的團隊,用的基本上都是Hadoop和Spark,其實騰訊的大數據平臺,也是始于Hadoop的。我們之所以能獲得四項的冠軍,是我們經歷了幾年的打磨,追求極致,我們希望最大限度地壓榨機器的性能。
首先,從成本的角度,只有把硬件壓榨到極致,成本才會低。我們采用的是OpenPower架構的機器,按節點數計算,我們規模只有去年冠軍的六份一,按照今年的硬件價格,我們總的TCO成本遠低于去年冠軍。

在調度層面,我們對調度算法做了深度優化,使得每臺機器的CPU、內存、網絡、磁盤IO等每個環節都能發揮到極致。本次比賽的其中兩項為MinuteSort,比拼的就是一分鐘內的排序數據量,這個時間調度的效率就變得非常重要,而這兩項比賽我們比去年提升了5倍,是提升幅度最高的;這也從另一個方面說明了我們在調度效率上的領先性。總結為一句話,就是最大限度地壓榨了硬件的性能,才讓我們取得這個成績。
目前我們用于比賽的這個集群,已經在我們的現網中用起來了,在高性能計算、圖計算、深度學習等領域支撐騰訊的現網應用。
回顧我們走過的7年,我們是2009年1月開始基于Hadoop來開發我們的大數據平臺,七年的征程,我們歷經了3代平臺的發展。

2009-2011年是我們的第一代平臺,我們的第一代平臺,只支持批量計算的場景,主要就是報表,這個過程,我們重點發展了平臺的可擴展性,我們不斷增大集群的規模,從09年的幾十臺,發展到現在總規模接近3萬臺。總結成幾個字,第一代就是規模化。
第二代,用三個字總結就是實時化。這是2012年到2014年。主要支持在線分析和實時計算的場景,比如實時報表,實時查詢、實時監控等。
第三代是去年到現在,主要建設機器學習平臺,支持騰訊各業務數據挖掘的需求。這是從數據分析到數據挖掘的轉變,三個字總結就是“智能化“。
第一代是離線計算的架構,是基于Hadoop開發的, 我們起名叫TDW,騰訊分布式數據倉庫的意思。

社區的Hadoop迭代慢,單一集群規模小,穩定性和易用性都很差,不能達到騰訊的要求,因此我們按騰訊的業務運營標準,做了深度定制開發,我們著重發展集群的規模,解決Master單點瓶頸不能擴展的問題,我們優化了調度策略來提高Job的并發性,也加強HA容災建設,還有很關鍵的一點的是,我們豐富了Hadoop的周邊生態,建設了配套的工具和產品來降低用戶的使用門檻,語法上,我們兼容Oracle的語法,方便騰訊各產品部門做程序的遷移,Hadoop大數據的性能很強,但是小數據分析的效率很差,我們就集成了PostgreSQL來提升小數據的分析性能,打通Hadoop和PG的訪問界限。
就這樣,我們從最開始的幾十臺、到幾百臺、到幾千臺,幾年以后,在2013年單一集群達到4400臺,2014年單一集群突破8800臺,處于業界領先的水平。目前我們的總規模接近3萬臺。
TDW的建成,解決了我們內部三大業務痛點。
第一,它使我們具備了T/P級的數據處理能力,幾十億、百億級的數據量,基本上30分鐘就能算出來。
第二,它的成本很低,我們可以使用很普通的PC Server,就能達到以前小型機一樣的效果;
第三,容災方面,原來只要有機器宕機,業務的數據肯定就有影響,各種報表、數據查詢,都出不來。現在TDW的機器宕機,業務完全無感知,系統會自動做切換、數據備份等等的事情。

正是解決了業務的這些痛點,業務部門都愿意把計算遷移到TDW。到2012年底,我們把所有原來在Oracle和mysql上跑的報表都切換到TDW。
TDW的建成,讓我們具備了融合所有產品平臺的數據的能力。
以前的各產品的數據都是分散在各自的DB里面的,是一個個數據孤島,現在,我們以用戶為中心,建成了十億用戶量級、每個用戶萬維特征的用戶畫像體系。

以前的用戶畫像,只有十幾個維度主要就是用戶的一些基礎屬性,比如年齡、性別、地域等,以前構建一次要耗費很多天,數據都是按月更新,有了TDW,我們每天更新一次。這個用戶畫像,應用在騰訊所有跟精準推薦相關的產品里面。
再舉個推薦的例子。推薦相信大家現在都耳熟能詳,但是放在6年前,這還是一個剛剛新興起的應用;TDW為我們提供了一個快速切入快速支撐的能力。通過 MapReduce的編程范式,基于TDW 的平臺,我們可以專注于各種推薦算法邏輯本身的實現,比如大家常見的CF, MF, LR 這些算法,以及各種 hash 聚類算法;這個時候的推薦技術,面對海量的用戶群體訪問,更多還是基于一種實時查詢的服務方式。

第一代平臺解決了量大的痛點,但是在速度方面還有問題,數據是離線的,任務計算是離線的,實時性差。所以,我們建設了第二代的大數據平臺。在第一代基礎上,集成了Spark,同時,還融合了Storm流式計算的框架。這一代平臺的集成,讓我們的計算的粒度從原來的小時,發展到分鐘,直至秒級。

數據采集方面,我們構建了TDBank,讓原來通過接口機傳文件的方式,T+1的粒度,變成了毫秒級的實時采集。在這個采集平臺里面,我們自研的消息中間件,每天采集的消息條數超過6.5萬億,可以說是世界上消息量最大的消息中間件。同時,我們還有高可靠版本的消息中間件,能支持像金融、計費等高一致性的需求,保證消息不丟。

在資源調度層面,我們基于Yarn,發展了我們的Gaia調度平臺,Yarn只支持CPU和內存的維度,而我們的Gaia還支持網絡以及磁盤IO的維度,Yarn只支撐離線計算,Gaia能支持在線的場景,另外,我們還支持doctor,我們平臺現在每天有1.5億container。
再拿剛才提到的推薦例子,基于第一代平臺的推薦應用會碰到2個問題,一個是隨著用戶量,訪問量的增多,產生的數據會越來越多,多到在有限的時間根本不可能批處理的計算完,還有一點是用戶的行為模式變化很快,需要更快的去更新各種維度的用戶畫像;數據的實時采集讓用戶行為,實時畫像的計算成為可能,這構成了流式計算的 數據流,分布式的流式計算實時更新各個維度的統計量,進一步形成了推薦算法的實時訓練數據,從而把上一代的 offline 的推薦系統變成了 online 的實時推薦系統。在廣告的推薦應用上,我們可以看到每一次的實時加快,都帶來了更大的點擊率提升。
第二代的平臺,實時性和體量方面,都能滿足絕大多數業務需求。但隨著我們的數據量越來越大,我們的瓶頸很快也出現了。我們在Spark上做數據訓練的時候,每一輪的迭代,在更新數據的時候,都會遇到網絡方面的瓶頸,因為更新數據的地方是一個單點,如果數據的維度很大,這套框架就無法支撐。

在我們的實際應用中,千萬級的維度,都可以run得不錯,但是上了億級,性能就非常低了,甚至跑不出來。

所以,我們必須要建設一個能支持超大規模數據集的一套系統,能滿足billion級別的維度的數據訓練,而且,這個系統必須能滿足我們現網應用需求的一個工業級的系統。它能解決big data,以及big model的需求,它既能做數據并行,也能做模型并行。
一個是基于第二代平臺的基礎上做演進,解決大規模參數交換的問題。另外一個,就是新建設一個高性能的計算框架。
我們看了當時業內比較流行的幾個產品
GraphLab,主要做圖模型,容錯差;
Google的Distbelief,還沒開源;
還有CMU Eric Xing的Petuum,當時很火,不過它更多是一個實驗室的產品,易用性和穩定性達不到我們的要求。

看了一圈,我們決定自研,走自研的路。我們前兩代都是基于開源的,第三代則開始了自研的歷程。其實在第二代,我們已經嘗試自研,我們消息中間件,不論是高性能的,還是高可靠的版本,都是我們自研的。他們經歷了騰訊億萬流量的考驗,這也給了我們在自研方面很大的信心。因此,第三代整體的計算框架方面,我們也走了自研的道路。第三代的平臺,核心是一個叫Angel的高性能計算平臺。我們聚焦在高性能的計算框架方面,同時,也是我們往機器學習、深度學習演進的一個路線。
相比第二代,第三代的計算框架,可以支持10億級維度的算法訓練,由以前的數據并行,到可以支持模型并行。
同時,我們第三代的平臺,還支持GPU深度學習,支持文本、語音、圖像等非結構化的數據。

Angel是基于參數服務器的一個架構,它跑在我們的Gaia平臺上面的。它支持BSP、SSP、ASP三種計算模式;
支持數據并行以及工業界更看重的模型并行,因為我們主要碰到的還是模型大的問題;
另外,在網絡上我們有個原創的嘗試,我們用了港科大楊老師的團隊做的諸葛弩來做網絡調度。ParameterServer優先服務較慢的Worker,當模型較大時,能明顯降低等待時間,任務總體耗時下降5%~15%。

Angel提供很豐富的算法,支持LR、SVM、LDA、GDBT等等,并且集成了非常豐富的數學函數庫。
另外,還提供非常友好的編程界面,能跟Spark、MR對接,你能像用MR、Spark一樣編程。

Angel跟其他平臺相比,比如Petuum,和spark等,就我們的測試結果,在同等量級下,Angel的性能要優于其他平臺。比如我們用Netflix的數據跑的SGD算法,大家看一下這個圖的對比。

同時,Angel更適合超大規模的數據訓練。目前Angel支持了很多騰訊內部的現網業務。這里舉兩個例子,比如,在構建用戶畫像方面,以前都是基于Hadoop和Spark來做,跑一次模型要1天甚至幾天,話題只有1k;而在Angel上,20多億文檔、幾百萬個詞,3000億的token,1個小時就跑完了。

以前Spark能跑的,現在Angel快幾十倍;以前Spark跑不了的,Angel也能輕松跑出來。再看一個case,視頻的點擊預測,同等數據量下,Angel的性能是Spark的44倍以上。用了Angel以后,我們維度從千萬擴展到億,訓練時間從天縮短到半小時,而準確度也有不小的提升。

Angel不僅僅是一個只做并行計算的平臺,它更是一個生態。

我們圍繞Angel,建立了一個小生態圈,它支持Spark之上的MLLib,支持上億的維度的訓練;我們也支持更復雜的圖計算模型;同時支持Caffe、TensorFlow、Torch等深度學習框架,實現這些框架的多機多卡的應用場景。
各位,臨近尾聲了,我想總結一下騰訊大數據平臺發展的三個階段:

我們從離線計算起步,經過實時計算階段,進入了機器學習的時代。
我們從跟隨開源,發展到自研,我們的發展歷經了規模化、實時化,以及智能化的變遷。最后,我要借這個機會跟大家公布一個消息,那就是:我們的大數據平臺將全面開源。

我們會在明年上半年把Angel以及Angel周邊的系統進行開源。我們平臺源自開源,我們的發展離不開開源,所以我們會以最大的力度擁抱開源。
其實在開源的道路上,我們一直都在參與:
我們第一代平臺的核心,TDW-Hive,已經在2014年就開源了;
我們還在很多社區項目貢獻了很多核心代碼,培養了好幾個committer。
而未來,我們的開源力度只會越來越大。
在雷鋒網眼里,Angel是騰訊完全自主的大數據平臺,按照騰訊的說法無論是在性能還是實用性,Angel比其它平臺都有很大的優勢,但讓業界為之震驚的還是騰訊將其開源,而且開源的力度也是騰訊過去2代計算平臺無法比擬的,毋庸置疑,對下游廠商來講,這是一個利好消息。
雷峰網原創文章,未經授權禁止轉載。詳情見轉載須知。