在數(shù)字化浪潮中,用戶行為數(shù)據(jù)已成為企業(yè)精細(xì)化運(yùn)營(yíng)、產(chǎn)品優(yōu)化和智能推薦的核心驅(qū)動(dòng)力。作為國(guó)內(nèi)領(lǐng)先的在線旅行服務(wù)平臺(tái),攜程面臨著海量、高并發(fā)的用戶行為數(shù)據(jù)處理挑戰(zhàn)。本文將深入剖析攜程如何構(gòu)建一個(gè)日處理能力高達(dá)20億條數(shù)據(jù)的實(shí)時(shí)用戶行為服務(wù)系統(tǒng),并分享其數(shù)據(jù)處理服務(wù)的關(guān)鍵架構(gòu)實(shí)踐。
一、系統(tǒng)核心挑戰(zhàn)與設(shè)計(jì)目標(biāo)
攜程實(shí)時(shí)用戶行為服務(wù)系統(tǒng)主要承載著用戶點(diǎn)擊、搜索、瀏覽、預(yù)訂等全鏈路行為日志的實(shí)時(shí)采集、處理與分發(fā)。其面臨的核心挑戰(zhàn)包括:
- 數(shù)據(jù)規(guī)模巨大:日均處理數(shù)據(jù)量達(dá)20億條,高峰時(shí)段QPS超過(guò)百萬(wàn)。
- 實(shí)時(shí)性要求高:行為數(shù)據(jù)需在秒級(jí)甚至毫秒級(jí)內(nèi)完成處理,以支持實(shí)時(shí)風(fēng)控、個(gè)性化推薦等場(chǎng)景。
- 數(shù)據(jù)可靠性保障:必須保證數(shù)據(jù)不丟失、不重復(fù),確保下游業(yè)務(wù)分析的準(zhǔn)確性。
- 系統(tǒng)可擴(kuò)展性:需能靈活應(yīng)對(duì)業(yè)務(wù)量增長(zhǎng)和突發(fā)流量。
- 多維度數(shù)據(jù)處理:需支持對(duì)復(fù)雜、嵌套的JSON格式日志進(jìn)行高效解析與豐富。
基于此,系統(tǒng)的設(shè)計(jì)目標(biāo)聚焦于:高吞吐、低延遲、高可用、易擴(kuò)展和準(zhǔn)確一致。
二、整體系統(tǒng)架構(gòu)概覽
攜程實(shí)時(shí)用戶行為服務(wù)系統(tǒng)采用分層、解耦的流式處理架構(gòu),核心模塊包括:數(shù)據(jù)采集層、實(shí)時(shí)處理層、存儲(chǔ)層與服務(wù)層。
1. 數(shù)據(jù)采集層:統(tǒng)一接入與緩沖
- 客戶端SDK與埋點(diǎn):在App、H5、小程序等終端部署統(tǒng)一埋點(diǎn)SDK,負(fù)責(zé)行為日志的規(guī)范化生成與初步壓縮。
- 網(wǎng)關(guān)集群:接收來(lái)自全網(wǎng)終端的日志數(shù)據(jù),進(jìn)行輕量級(jí)校驗(yàn)(如格式、必填字段)、協(xié)議轉(zhuǎn)換與負(fù)載均衡。
- 消息隊(duì)列緩沖:選用高吞吐、低延遲的Kafka作為統(tǒng)一日志總線。采集層將數(shù)據(jù)寫入不同的Kafka Topic,實(shí)現(xiàn)了生產(chǎn)與消費(fèi)的解耦,并能有效應(yīng)對(duì)流量峰值,為下游處理提供緩沖。
2. 實(shí)時(shí)處理層:流計(jì)算核心引擎
這是系統(tǒng)的“大腦”,主要負(fù)責(zé)數(shù)據(jù)的清洗、豐富、聚合與分發(fā)。
- 技術(shù)選型:采用Apache Flink作為核心流處理引擎。Flink憑借其精確一次(Exactly-Once)的語(yǔ)義保障、高吞吐、低延遲的特性以及豐富的狀態(tài)管理能力,完美契合實(shí)時(shí)處理需求。
- 處理流程:
- 數(shù)據(jù)解析與清洗:消費(fèi)Kafka原始數(shù)據(jù),解析JSON,過(guò)濾無(wú)效數(shù)據(jù)(如格式錯(cuò)誤、測(cè)試數(shù)據(jù)),補(bǔ)全基礎(chǔ)字段。
- 數(shù)據(jù)豐富(Enrichment):通過(guò)查詢維表(如用戶畫像、產(chǎn)品信息)或?qū)崟r(shí)計(jì)算,為行為事件打上豐富的上下文標(biāo)簽(如用戶等級(jí)、產(chǎn)品類別、地理位置信息)。維表數(shù)據(jù)通常存儲(chǔ)在Redis或HBase中,通過(guò)異步I/O或查詢緩存優(yōu)化性能。
- 關(guān)鍵指標(biāo)實(shí)時(shí)聚合:利用Flink的窗口(如滾動(dòng)窗口、滑動(dòng)窗口)功能,實(shí)時(shí)計(jì)算如頁(yè)面PV/UV、搜索熱詞、轉(zhuǎn)化漏斗等核心業(yè)務(wù)指標(biāo),結(jié)果直接輸出至實(shí)時(shí)OLAP數(shù)據(jù)庫(kù)或監(jiān)控大屏。
- 數(shù)據(jù)分發(fā):將處理后的標(biāo)準(zhǔn)化行為事件流,根據(jù)下游業(yè)務(wù)需求,實(shí)時(shí)寫入多個(gè)目標(biāo)系統(tǒng),如:
- 實(shí)時(shí)數(shù)倉(cāng)/OLAP:寫入ClickHouse、Doris等,支持實(shí)時(shí)多維分析。
- 推薦與風(fēng)控系統(tǒng):通過(guò)消息隊(duì)列或RPC接口直接推送。
- 離線數(shù)倉(cāng):同時(shí)歸檔一份至HDFS,供后續(xù)離線深度分析與模型訓(xùn)練。
3. 存儲(chǔ)層:多模存儲(chǔ)應(yīng)對(duì)多元場(chǎng)景
根據(jù)數(shù)據(jù)的使用特點(diǎn),采用不同的存儲(chǔ)方案:
- 實(shí)時(shí)明細(xì)與查詢:使用ClickHouse,其列式存儲(chǔ)與向量化引擎非常適合對(duì)海量行為明細(xì)進(jìn)行快速即席查詢。
- 用戶畫像與維度數(shù)據(jù):使用Redis(熱數(shù)據(jù))和HBase(全量數(shù)據(jù)),提供高并發(fā)的點(diǎn)查服務(wù)。
- 長(zhǎng)期歸檔與批量分析:使用HDFS,結(jié)合Hive/Spark進(jìn)行T+1的離線作業(yè)。
4. 服務(wù)層:統(tǒng)一數(shù)據(jù)服務(wù)出口
構(gòu)建統(tǒng)一的實(shí)時(shí)用戶行為數(shù)據(jù)服務(wù)API,對(duì)下游業(yè)務(wù)方(如推薦、營(yíng)銷、風(fēng)控)提供標(biāo)準(zhǔn)化的數(shù)據(jù)查詢與訂閱服務(wù),屏蔽底層存儲(chǔ)與系統(tǒng)的復(fù)雜性。
三、數(shù)據(jù)處理服務(wù)的關(guān)鍵實(shí)踐
- Exactly-Once語(yǔ)義保障:在整個(gè)處理鏈路(Kafka -> Flink -> 下游存儲(chǔ))中,通過(guò)Flink的Checkpoint機(jī)制、兩階段提交(2PC)Sink以及事務(wù)性寫入,確保了端到端的數(shù)據(jù)精確一次處理,這是數(shù)據(jù)準(zhǔn)確性的基石。
- 動(dòng)態(tài)資源與彈性伸縮:基于Kubernetes容器平臺(tái)部署Flink Job,可根據(jù)流量負(fù)載自動(dòng)擴(kuò)縮容TaskManager實(shí)例,實(shí)現(xiàn)資源利用率最大化與成本優(yōu)化。
- 多租戶與資源隔離:通過(guò)Flink的集群模式和隊(duì)列管理,將不同重要等級(jí)的業(yè)務(wù)處理Job進(jìn)行資源隔離,避免相互影響。
- 全鏈路監(jiān)控與告警:建立從數(shù)據(jù)采集、隊(duì)列堆積、Flink作業(yè)延遲與反壓、到下游存儲(chǔ)健康度的全方位監(jiān)控體系,并設(shè)置智能告警,確保系統(tǒng)SLA。
- Schema管理與數(shù)據(jù)治理:制定統(tǒng)一的行為數(shù)據(jù)Schema規(guī)范,并建立中心化的元數(shù)據(jù)管理,確保數(shù)據(jù)口徑一致,便于維護(hù)和追溯。
四、與展望
攜程的實(shí)時(shí)用戶行為服務(wù)系統(tǒng)通過(guò)以Kafka為中樞、Flink為計(jì)算核心的分層架構(gòu),成功應(yīng)對(duì)了日均20億級(jí)數(shù)據(jù)的實(shí)時(shí)處理挑戰(zhàn)。其成功的關(guān)鍵在于對(duì)高可靠流處理技術(shù)的深入應(yīng)用、合理的多模存儲(chǔ)選型以及貫穿始終的數(shù)據(jù)治理與運(yùn)維體系。
隨著實(shí)時(shí)計(jì)算需求的進(jìn)一步深化,該架構(gòu)將持續(xù)演進(jìn),例如:探索流批一體技術(shù)以簡(jiǎn)化架構(gòu),引入機(jī)器學(xué)習(xí)平臺(tái)實(shí)現(xiàn)實(shí)時(shí)行為數(shù)據(jù)的在線推理與預(yù)測(cè),從而更好地賦能業(yè)務(wù)智能決策,提升用戶體驗(yàn)與平臺(tái)價(jià)值。