1. 程式人生 > >專注於網際網路架構技術,努力成為一名架構師

專注於網際網路架構技術,努力成為一名架構師

騰訊業務產品線眾多,擁有海量的活躍使用者,每天線上產生的資料超乎想象,必然會成為資料大戶。特別是隨著傳統業務增長放緩,以及移動網際網路時代的精細化運營,對於大資料分析和挖掘的重視程度高於以往任何時候,如何從大資料中獲取高價值,已經成為大家關心的焦點問題。在這樣的大背景下,為了公司各業務產品能夠使用更豐富優質的資料服務,近年騰訊大資料平臺得到迅猛發展。

從上圖可以看出,騰訊大資料平臺有如下核心模組:TDWTRCTDBankGaia。簡單來說,TDW用來做批量的離線計算,TRC負責做流式的實時計算,TDBank則作為統一的資料採集入口,而底層的Gaia則負責整個叢集的資源排程和管理。接下來,本文會針對這四塊內容進行整體介紹。

TDWTencent distributed Data Warehouse):騰訊分散式資料倉庫。它支援百PB級資料的離線儲存和計算,為業務提供海量、高效、穩定的大資料平臺支撐和決策支援。目前,TDW叢集總裝置8400臺,單叢集最大規模5600,總儲存資料超過100PB,日均計算量超過5PB,日均Job數達到100萬個。

為了降低使用者從傳統商業資料庫遷移門檻,TDW基於開源Hive進行了大量定製開發。在功能擴充方面,SQL語法相容Oracle,實現了基於角色的許可權管理、分割槽功能、視窗函式、多維分析功能、公用表表達式-CTEDML-update/delete、入庫資料校驗等。在易用性方面,增加了基於

python的過程語言介面,以及命令列工具PL Client,並提供視覺化的IDE整合開發環境,使得開發效率大幅度提升。另外,在效能優化方面也做了大量工作,包括Hash Join、按行splitOrder by limit優化、查詢計劃並行優化等,特別是針對Hive元資料的重構,去掉了低效的JDO層,並實現元資料叢集化,使系統擴充套件性提升明顯。

為了儘可能促進資料共享和提升計算資源利用率,實施構建高效穩定的大叢集戰略,TDW針對Hadoop原有架構進行了深度改造。首先,通過JobTracker/NameNode分散化和容災,解決了Master單點問題,使得叢集的可擴充套件性和穩定性得到大幅度提升。其次,優化公平資源排程策略,以支撐上千併發

job(現網3k+)同時執行,並且歸屬不同業務的任務之間不會互相影響。同時,根據資料使用頻率實施差異化壓縮策略,比如熱資料lzo、溫資料gz、冷資料gz+hdfs raid,總壓縮率相對文字可以達到10-20倍。

另外,為了彌補Hadoop天然在update/delete操作上的不足,TDW引入postgresql作為輔助,適用於較小資料集的高效分析。當前,TDW正在向著實時化發展,通過引入HBase提供了千億級實時查詢服務,並開始投入Spark研發為大資料分析加速。

TDBankTencent Data Bank):資料實時收集與分發平臺。構建資料來源和資料處理系統間的橋樑,將資料處理系統同資料來源解耦,為離線計算TDW和線上計算TRC平臺提供資料支援。

從架構上來看,TBank可以劃分為前端採集、訊息接入、訊息儲存和訊息分揀等模組。前端模組主要針對各種資料形式(普通檔案,DB增量/全量,Socket訊息,共享記憶體等)提供實時採集元件,提供了主動且實時的資料獲取方式。中間模組則是具備日接入量萬億級的基於“釋出-訂閱”模型的分散式訊息中介軟體,它起到了很好的快取和緩衝作用,避免了因後端系統繁忙或故障從而導致的處理阻塞或訊息丟失。針對不同應用場景,TDBank提供資料的主動訂閱模式,以及不同的資料分發支援(分發到TDW資料倉庫,檔案,DBHBaseSocket等)。整個資料通路透明化,只需簡單配置,即可實現一點接入,整個大資料平臺可用。

另外,為了減少大量資料進行跨城網路傳輸,TDBank在資料傳輸的過程中進行資料壓縮,並提供公網/內網自動識別模式,極大的降低了專線頻寬成本。為了保障資料的完整性,TDBank提供定製化的失敗重發和濾重機制,保障在複雜網路情況下資料的高可用。TDBank基於流式的資料處理過程,保障了資料的實時性,為TRC實時計算平臺提供實時的資料支援。目前,TDBank實時採集的資料超過150+TB/日(約5000+億條/日),這個數字一直在持續增長中,預計年底將超過2萬億條/日。

TRCTencent Real-time Computing):騰訊實時計算平臺。作為海量資料處理的另一利器,專門為對時間延敏感的業務提供海量資料實時處理服務。通過海量資料的實時採集、實時計算,實時感知外界變化,從事件發生、到感知變化、到輸出計算結果,整個過程中秒級完成。

TRC是基於開源的Storm深度定製的流式處理引擎,用JAVA重寫了Storm的核心程式碼。為了解決了資源利用率和叢集規模的問題,重構了底層排程模組,實現了任務級別的許可權管理、資源分配、資源隔離,通過和Gaia這樣的資源管理框架相結合,做到了根據線上業務實際利用資源的狀況,動態擴容&縮容,單叢集輕鬆超過1000臺規模。為了提高平臺的易用性和可運維性,提供了類SQLPiglatin這樣的過程化語言擴充套件,方便使用者提交業務,提升接入效率,同時提供系統級的指標度量,支援使用者程式碼對其擴充套件,實時監控整個系統運營環節。另外將TRC的功能服務化,通過RESTAPI提供PAAS級別的開放,使用者無需瞭解底層實現細節就能方便的申請許可權,資源和提交任務。

目前,TRC日計算次數超過2萬億次,在騰訊已經有很多業務正在使用TRC提供的實時資料處理服務。比如,對於廣點通廣告推薦而言,使用者在網際網路上的行為能實時的影響其廣告推送內容,在使用者下一次重新整理頁面時,就提供給使用者精準的廣告;對於線上視訊,新聞而言,使用者的每一次收藏、點選、瀏覽行為,都能被快速的歸入他的個人模型中,立刻修正視訊和新聞推薦。

Gaia統一資源排程平臺。Gaia,希臘神話中的大地之神,是眾神之母,取名寓意各種業務型別和計算框架都能植根於“大地”之上。它能夠讓應用開發者像使用一臺超級計算機一樣使用整個叢集,極大地簡化了開發者的資源管理邏輯。Gaia提供高併發任務排程和資源管理,實現叢集資源共享,具有很高的可伸縮性和可靠性,它不僅支援MR等離線業務,還可以支援實時計算,甚至線上service業務。

為了支撐單叢集8800臺甚至更大規模,Gaia基於開源社群Yarn之上自研Sfair (Scalable fair scheduler)排程器,優化排程邏輯,提供更好的可擴充套件性,並進一步增強排程的公平性,提升可定製化,將排程吞吐提升10倍以上。為了滿足上層多樣化的計算框架穩定執行,Gaia除了CpuMem的資源管理之外,新增了Network IODisk spaceDisk IO等資源管理維度,提高了隔離性,為業務提供了更好的資源保證和隔離。同時,Gaia開發了自己的核心版本,調整和優化CpuMem資源管理策略,在相容執行緒監控的前提下,利用cgroups,實現了hardlimit+softlimit結合的方式,充分利用整機資源,將container oom kill機率大幅降低。另外,豐富的api也為業務提供了更便捷的容災、擴容、縮容、升級等方式。

基於以上幾大基礎平臺的組合聯動,可以打造出了很多的資料產品及服務,如上面提到的精準推薦就是其中之一,另外還有諸如實時多維分析、秒級監控、騰訊分析、信鴿等等。除了一些相對成熟的平臺之外,我們還在不斷嘗試,針對新的需求進行更合理的技術探索,如更快速的互動式分析、針對複雜關係鏈的圖式計算。此外,騰訊大資料平臺的各種能力及服務,還將通過TODTencent OpenData)產品開放給外部第三方開發者。