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