酷家樂大數(shù)據(jù)體系沉淀了諸多主題數(shù)據(jù),例如:C端用戶行為流量數(shù)據(jù),B端用戶賬號等使用數(shù)據(jù),行業(yè)報(bào)告相關(guān)的數(shù)據(jù)等。
由于數(shù)據(jù)膨脹,尤其是酷家樂設(shè)計(jì)工具使用場景下產(chǎn)生的模型/方案/渲染使用明細(xì)數(shù)據(jù),離線實(shí)時(shí)計(jì)算任務(wù)需要對TB級別的數(shù)據(jù)進(jìn)行調(diào)度、聚合、計(jì)算,在數(shù)倉里沉淀出大量明細(xì)表、聚合表和最終的數(shù)據(jù)報(bào)表。
數(shù)據(jù)服務(wù)層的愿景是開放數(shù)倉能力,建立統(tǒng)一的數(shù)據(jù)服務(wù)出口,針對不同的查數(shù)場景(數(shù)據(jù)規(guī)模、QPS、UDF支持、運(yùn)維成本等),在底層引擎上的選型:
·大數(shù)據(jù)量、低QPS:使用Hive+Presto等基于Hadoop生態(tài)的離線批任務(wù)計(jì)算框架和MPP數(shù)據(jù)庫來解決。
·小數(shù)據(jù)量、高QPS:使用MySQL、ElasticSearch、HBase、MongoDB等關(guān)系型/非關(guān)系型TP數(shù)據(jù)庫來解決。
在目前的數(shù)據(jù)架構(gòu)下,我們遇到如下問題和挑戰(zhàn):
·離線/實(shí)時(shí)ETL任務(wù)過多,處理邏輯大部分為簡單聚合/去重,導(dǎo)致聚合表數(shù)量龐大,導(dǎo)致運(yùn)營和運(yùn)維上的成本增加;
·針對中等數(shù)據(jù)量、中等QPS的查詢場景,如何能兼顧數(shù)據(jù)規(guī)模的同時(shí),有較友好的查詢的耗時(shí)響應(yīng),耗時(shí)小于200ms;
·大數(shù)據(jù)量下插入、更新的實(shí)時(shí)數(shù)據(jù)場景的支持,例如:用戶畫像、實(shí)時(shí)DMP、用戶路徑、監(jiān)控?cái)?shù)據(jù)大盤等。
新引擎的引入
針對如上的問題和挑戰(zhàn),我們的目標(biāo)是尋求盡可能少的ROLAP引擎,利用在明細(xì)表上現(xiàn)場計(jì)算來解決ETL任務(wù)、數(shù)倉表過多問題,同時(shí)需要兼顧在數(shù)據(jù)規(guī)模、查詢QPS、響應(yīng)耗時(shí)、查詢場景方面的權(quán)衡。
目前市面上ROLAP引擎百花齊放,諸如Impala、Druid、ClickHouse、DorisDB。經(jīng)過一番調(diào)研,我們最終選擇了DorisDB。DorisDB是基于MPP架構(gòu)的分析型數(shù)據(jù)庫,自帶數(shù)據(jù)存儲,整合了大數(shù)據(jù)框架的優(yōu)勢,支持主鍵更新、支持現(xiàn)代化物化視圖、支持高并發(fā)和高吞吐的即席查詢等諸多優(yōu)點(diǎn),天然能解決我們上述的問題。
應(yīng)用實(shí)踐
DorisDB上生產(chǎn)環(huán)境主要作為離線/實(shí)時(shí)數(shù)據(jù)的ROLAP數(shù)據(jù)庫使用。離線數(shù)據(jù)主要存儲于ODPS,通過DataX任務(wù)批量同步數(shù)據(jù),實(shí)時(shí)數(shù)據(jù)主要存儲于Kafka中,基于Kafka的流式處理任務(wù)寫入。DataX任務(wù)和Flink任務(wù)統(tǒng)一寫Doris Proxy服務(wù),由代理控制器通過HTTP Stream Load的方式控制數(shù)據(jù)寫入周期和批次大小。基于DorisDB重構(gòu)原有分析平臺對數(shù)倉內(nèi)現(xiàn)有存在痛點(diǎn)數(shù)據(jù)業(yè)務(wù)進(jìn)行梳理:
·每日的數(shù)據(jù)增量在上億規(guī)模的超大明細(xì)表,需要統(tǒng)計(jì)日、周、月、季、年等統(tǒng)計(jì)數(shù)據(jù);
·商家賬號使用、模型使用、方案渲染在任意日期區(qū)間的聚合值、累計(jì)值、去重值。
這些需求在前端查詢,都需要保證低延遲。在沒有引入DorisDB之前,我們使用的底層引擎是MySQL或者Presto on HDFS存儲存明細(xì)表/聚合表進(jìn)行查詢。MySQL處理上億規(guī)模的數(shù)據(jù),無論使用分庫分表、分區(qū)表、集群化部署的PolarDB方案,都會存在慢查詢、數(shù)據(jù)庫扛不住、運(yùn)維困難的窘境;Presto on HDFS的方案更偏向于分析型數(shù)據(jù)業(yè)務(wù),雖然能存儲海量的數(shù)據(jù),計(jì)算能力不錯,唯一致命的在于無法滿足在線業(yè)務(wù)的高吞吐QPS,查詢比較難做到毫秒級。引入DorisDB帶來的業(yè)務(wù)效果如下:
·支撐了在線數(shù)據(jù)查詢+數(shù)據(jù)分析業(yè)務(wù),服務(wù)于對內(nèi)運(yùn)營+對外商業(yè)化數(shù)據(jù)產(chǎn)品,在線業(yè)務(wù)查詢P95耗時(shí)在毫秒級別,分析型業(yè)務(wù)查詢P95耗時(shí)在秒級別;
·支持10億規(guī)模的明細(xì)表查詢,月、季、年度統(tǒng)計(jì)數(shù)據(jù)現(xiàn)場算聚合統(tǒng)計(jì)、去重,查詢耗時(shí)能控制在500ms;
·千萬級別的多表的join和union查詢,經(jīng)過Colocate Join特性優(yōu)化,查詢響應(yīng)在秒級。
實(shí)時(shí)鏈路的探索
在探索實(shí)時(shí)數(shù)據(jù)鏈路方案時(shí)候,我們主要考慮到了DorisDB的如下優(yōu)勢:
·實(shí)時(shí)寫入性能:目前DorisDB支持HTTP Stream Load自定義的分鐘級別微批寫入和Kafka To DorisDB的秒級延遲,完全能滿足T+m實(shí)時(shí)數(shù)據(jù)業(yè)務(wù);
·統(tǒng)一離線和實(shí)時(shí)分析:實(shí)時(shí)數(shù)據(jù)和離線數(shù)據(jù)更好的在DorisDB中進(jìn)行融合,靈活支撐應(yīng)用,數(shù)據(jù)存儲策略通過DorisDB動態(tài)分區(qū)的功能進(jìn)行清理;
·SQL Online Serving:高效的SQL即席查詢能力,能夠兼容業(yè)界流行的SQL規(guī)范,支撐業(yè)務(wù)靈活復(fù)雜的訪問,提高取數(shù)開發(fā)的效率。
總結(jié)和規(guī)劃
酷家樂大數(shù)據(jù)團(tuán)隊(duì)引入DorisDB生產(chǎn)集群,解決了數(shù)據(jù)服務(wù)層單表億級別規(guī)模、高QPS數(shù)據(jù)場景下引擎的空白,直接開放明細(xì)表準(zhǔn)實(shí)時(shí)查詢的能力,給上層數(shù)據(jù)業(yè)務(wù)和BI系統(tǒng)提供了更多的選擇和自由度,同時(shí)將大大減少數(shù)倉中大量ETL任務(wù)、聚合表、報(bào)表,降低了數(shù)倉ETL的運(yùn)維壓力和維護(hù)成本。未來的我們在DorisDB的應(yīng)用和實(shí)踐上還有不少規(guī)劃:
·除了unique和duplicate數(shù)據(jù)模型,未來會將符合的數(shù)據(jù)場景遷移至aggregation模型和物化視圖表,進(jìn)一步降低數(shù)倉開發(fā)維護(hù)成本,降低查詢延遲;
·DorisDB on ES的功能值得我們深挖和探索,解決了原生ES集群無法支持跨索引join的能力;
·更多數(shù)據(jù)應(yīng)用層的場景接入DorisDB,例如人群更新、用戶畫像服務(wù)、用戶行為路徑分析等,將進(jìn)一步拓展DorisDB在實(shí)時(shí)數(shù)據(jù)寫入、批量數(shù)據(jù)更新場景中的應(yīng)用;
·和酷家樂數(shù)據(jù)集成平臺、數(shù)倉平臺深度打通,完善監(jiān)控體,作為大數(shù)據(jù)團(tuán)隊(duì)的基礎(chǔ)設(shè)施去保障穩(wěn)定性和服務(wù);
·考慮使用多云架構(gòu),自主可控的數(shù)倉架構(gòu)可以靈活的在多云間切換遷移,降低單一來云廠商的依賴,控制成本提高可用性。
·……
來源:中國資訊報(bào)道網(wǎng)