大數(shù)據(jù)平臺作為騰訊底層的基礎設施之一,每天必須處理千萬級規(guī)模的離線數(shù)據(jù)任務及十萬億級別的實時計算,否則無法滿足業(yè)務每天數(shù)以億計的數(shù)據(jù)分析計算的需求。
01騰訊大數(shù)據(jù)的構建理念
項目立項的時候我們曾有過激烈討論,是自主研發(fā)還是使用開源,“To be, or not to be: that is the question”。當時業(yè)務需求比較迫切,2009年上半年,QQ空間引入了“開心農場”業(yè)務,開啟了瘋狂增長的模式,業(yè)務部門的同事看著幾乎是垂直的增長曲線笑逐顏開,我們看著曲線卻笑不出來。如何能快速構建全新的數(shù)據(jù)倉庫,滿足業(yè)務快速增長的計算需求,我們在努力尋找答案。
在2008~2009年,開源在國內還沒大行其道,很多程序員都有一種偏見,覺得使用開源都是沒什么技術含量的。幾乎所有的程序員心里都有一個夢想和追求,希望能自己實現(xiàn)一套頂尖的系統(tǒng),從而在中國乃至世界的軟件行業(yè)揚名立萬。但是盤點了業(yè)務的需求以及對比了那時候團隊能力和所能調配的人力之后,我們發(fā)現(xiàn)實現(xiàn)這么一套系統(tǒng),無異于登天。完全自主研發(fā)新一代的數(shù)據(jù)倉庫是難以攀爬的珠峰。
此路不通,只能改走開源路線。其實開源有很多好處,它有著豐富的社區(qū)資源和社區(qū)生態(tài),有著龐大的各路代碼貢獻者,使用開源的系統(tǒng),相當于利用了全世界的資源,利用了全世界的程序員的智慧。使用開源項目,能快速搭建適應業(yè)務需求的平臺。
但開源對于我們來說也并不容易。首先,技術棧不一樣,我們原來是C/C++技術棧,是做計費系統(tǒng)的,而大數(shù)據(jù)開源基本以Java為主,需要從頭去學,幸好語言的差異并不是很難克服,我們邊學習邊招聘有大數(shù)據(jù)經驗的開發(fā)者,慢慢地做了起來;另外,大數(shù)據(jù)生態(tài)是很龐大的,每一個項目都不足以達到企業(yè)級的需求,每一個項目都要進行大量的優(yōu)化,才能符合我們可用性方面的需求。
從最初的蹣跚學步到現(xiàn)在,騰訊大數(shù)據(jù)走過了十余年,歷經三代技術演進。第一代是“拿來主義”,拿來就用,但部分系統(tǒng)比如HDFS(Hadoop Distributed File System, Hadoop分布式文件系統(tǒng))、Hive等因為性能、功能不能滿足需求,我們對核心模塊進行了定制化的優(yōu)化;第二代是有限自主研發(fā)的階段,我們對部分核心平臺進行參考性的自主研發(fā),重構實時采集系統(tǒng),同時對底層實時計算引擎Storm使用Java進行重寫等;第三代是純自主研發(fā)的階段,第三代的核心平臺—高性能分布式機器學習平臺Angel,是騰訊和北大等高校聯(lián)合研發(fā),具有完全知識產權。
我們一直是開源的受益者,從Hadoop到Spark到Storm……我們的發(fā)展離不開社區(qū),我們弱小的時候依賴開源社區(qū),我們成長后又積極回饋社區(qū)。其實早在2014年,我們就把騰訊自己的Hive版本進行開源,它對Oracle語法兼容等特性廣受歡迎。我們第三代最核心的高性能分布式機器學習平臺Angel在2017年就開源了,2018年還進一步捐獻給Linux基金會。2019年,我們一口氣開源了四大平臺:實時數(shù)據(jù)采集平臺TubeMQ(捐獻給Apache社區(qū))、資源管理平臺TKEStack、分布式數(shù)據(jù)庫TBase以及騰訊版本的OpenJDK—Kona JDK。我們有幾十個項目的PMC和提交者及更大量的貢獻者,每天都為社區(qū)貢獻代碼。
通過開源進行技術上的協(xié)同,可聚攏人才,一個好的項目能吸引很多優(yōu)秀的開發(fā)者,有利于形成一個優(yōu)良的技術生態(tài),有利于推動技術進步。這也是我們選擇開源的原因。
來自開源、回饋開源、堅持開源,這可以說是騰訊大數(shù)據(jù)平臺十年發(fā)展的技術理念。另外一個技術理念是:一切要為業(yè)務所用。
我們固執(zhí)地認為,技術如果不能為業(yè)務所用,那它就是毫無價值的。我們自主研發(fā)的Angel項目,出發(fā)點也是因為當時開源社區(qū)里面沒有符合我們業(yè)務需求的機器學習平臺,自主研發(fā)是因為對業(yè)務有價值,而不是因為它在技術上很有挑戰(zhàn)性以及我們要證明自己技術很牛。Angel自2017年開源后有超過一百多個公司和組織使用,包括華為、小米、OPPO、新浪微博、拼多多等,發(fā)揮了Angel在騰訊以外的價值。
02騰訊大數(shù)據(jù)的總體架構
如前所述,騰訊大數(shù)據(jù)十余年的發(fā)展,經歷了三代的技術演變,如圖1所示。
▲圖1 騰訊大數(shù)據(jù)三代技術演變
第一代架構從2009~2011年,以承載離線計算任務為主,如圖2所示。
TDW主要以Hadoop為基礎構建,我們主要做了兩方面的優(yōu)化:其一擴大了集群規(guī)模,包括增強了集群拓展性,優(yōu)化了調度性能,增強了容災能力,通過差異化存儲降低了存儲成本;其二是利用周邊生態(tài)降低應用門檻,建設配套的調度與開發(fā)平臺,兼容Oracle的語法,以及集成PostgreSQL數(shù)據(jù)庫以提升小數(shù)據(jù)量的分析性能。第一代平臺總結起來就是,技術上主要滿足離線計算需求,技術挑戰(zhàn)主要在不斷擴展和優(yōu)化集群規(guī)模,單集群規(guī)模從幾十臺到幾百臺,再到幾千臺不斷突破。
▲圖2 第一代離線計算平臺架構
第二代架構從2012~2014年,在承載離線計算的基礎上,擴展了平臺能力,支持實時計算的需求,如圖3所示。
▲圖3 第二代實時計算平臺架構
在第一代離線計算平臺基礎之上,我們融合Storm和Spark構建了第二代實時計算平臺。主要的演進如下。
1)集成Spark,離線計算比Hadoop性能更高。
2)引入Storm,支持秒級/毫秒級的流式計算任務。
3)建設了實時采集系統(tǒng)TDBank,數(shù)據(jù)采集實現(xiàn)從天級(T+1)到秒級的飛躍。
4)支持資源和任務調度方面,平臺支持離線與在線混合部署,任務容器化,資源管理的維度支持CPU、內存,以及網絡與I/O,進一步提升了平臺輕量化、敏捷性與靈活性,極大提升了平臺利用率,降低了成本。
第三代架構從2015~2019年,在通用大數(shù)據(jù)計算外,開始支持機器學習、深度學習等AI場景,Big Data與AI在平臺層面逐步融合,如圖4所示。
▲圖4 第三代機器學習計算平臺
在第二代實時計算平臺基礎上,自主研發(fā)了機器學習平臺Angel,并以Angel為核心構建第三代機器學習計算平臺生態(tài)。主要演進如下。
1)我們與北京大學合作,自主研發(fā)了高性能分布式機器學習平臺。該平臺支持十億至百億維度模型,支持數(shù)據(jù)并行及模型并行,支持在線訓練。同時,它除了支持傳統(tǒng)的機器學習之外,還擴展支持深度學習、圖計算等功能,具有全棧的AI能力。它具有友好的編程接口、豐富的算法庫,并在上層構建了一站式開發(fā)運營環(huán)境,支持業(yè)界多種流行計算框架。Angel于2017年6月全面開源,2018年捐獻給Linux基金會,2019年12月20日從Linux基金會旗下AI領域頂級基金會—LF AI基金會(Linux Foundation Artificial Intelligence Foundation)正式畢業(yè),成為中國首個從LF AI基金會畢業(yè)的開源項目,意味著Angel得到全球技術專家的認可,成為世界頂級的AI開源項目之一。
2)資源管理層面,除了CPU,還支持GPU、FPGA等異構設備。我們是國內比較早實現(xiàn)GPU虛擬化且技術比較領先的(見我們在IEEE ISPA2018發(fā)布的論文“GaiaGPU: Sharing GPUs in Container Clouds”)。
3)大數(shù)據(jù)與數(shù)據(jù)庫緊密結合,使用基于PostgreSQL的分布式數(shù)據(jù)庫PGXZ(后改名為TBase,并于2019年對外開源),支持HTAP(Hybrid Transaction and Analytical Processing,混合事務和分析處理),使得TDW更好地支持OLTP(On-Line Transaction Processing,聯(lián)機事務處理過程)的計算。
截至2019年,騰訊大數(shù)據(jù)走過十年,并且還在不斷演進中,我們正在探尋下一代計算平臺之路,我們在探索批流融合,我們在探索云原生大數(shù)據(jù),我們也在嘗試AI、大數(shù)據(jù)及云計算結合和軟硬件結合,我們還在研究數(shù)據(jù)湖和隱私計算等前沿技術……大數(shù)據(jù)、人工智能和云計算,正在成為支撐業(yè)務發(fā)展的基礎設施,下一代,會更精彩。
本文摘編于《騰訊大數(shù)據(jù)構建之道》,經出版方授權發(fā)布。(書號:9787111710769)轉載請保留文章來源。