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