axure9数据统计插件_WMDA:大数据技术栈的综合实践
一、概述
WMDA是58自主開(kāi)發(fā)的用戶行為分析產(chǎn)品,同時(shí)也是一款支持無(wú)埋點(diǎn)的數(shù)據(jù)采集產(chǎn)品,只需要在第一次使用的時(shí)候加載一段SDK代碼,即可采集全量、實(shí)時(shí)的PC、M、APP三端以及小程序的用戶行為數(shù)據(jù)。同時(shí),為了滿足用戶個(gè)性化的數(shù)據(jù)采集需求,在無(wú)埋點(diǎn)之上,WMDA又提供了手動(dòng)埋點(diǎn)的數(shù)據(jù)采集方式。
WMDA支持的統(tǒng)計(jì)、分析功能主要包括:
- “概覽”和“實(shí)時(shí)”模塊用來(lái)監(jiān)控網(wǎng)站的流量情況;
- “圈選”定義重要的指標(biāo);
- “單圖”和“看板”可以統(tǒng)計(jì)不同維度、時(shí)間下指標(biāo)的頁(yè)面訪問(wèn)量和用戶量等數(shù)據(jù);
- “漏斗”和“智能路徑”用于分析不同指標(biāo)下的轉(zhuǎn)化率;
- “留存”可以基于不同維度、分群來(lái)考察網(wǎng)站的用戶流失率,分析用戶的忠誠(chéng)度;
- “用戶細(xì)查”和“用戶分群”用于分析所關(guān)心條件下的用戶群體以及相關(guān)的用戶行為明細(xì)。
以上簡(jiǎn)單的介紹了WMDA功能模塊,接下來(lái)側(cè)重于WMDA數(shù)據(jù)端的架構(gòu)以及相關(guān)大數(shù)據(jù)技術(shù)棧的實(shí)踐。
二、架構(gòu)設(shè)計(jì)
在架構(gòu)上,WMDA遵循標(biāo)準(zhǔn)的數(shù)據(jù)分析模型,將整體的架構(gòu)分成數(shù)據(jù)采集、數(shù)據(jù)傳輸、數(shù)據(jù)建模/存儲(chǔ)、數(shù)據(jù)統(tǒng)計(jì)/分析和數(shù)據(jù)可視化五個(gè)部分。架構(gòu)如下圖所示:
數(shù)據(jù)采集:58的業(yè)務(wù)方覆蓋PC、M、APP三端以及小程序。WMDA在數(shù)據(jù)收集階段為PC、M、H5、提供SDK完成數(shù)據(jù)采集,在APP端提供IOS SDK和Android SDK完成數(shù)據(jù)采集,小程序也有相應(yīng)的SDK來(lái)完成數(shù)據(jù)采集。
數(shù)據(jù)傳輸:主要包括數(shù)據(jù)收集服務(wù)完成前端上報(bào)數(shù)據(jù)的信息補(bǔ)全、臟數(shù)據(jù)過(guò)濾、設(shè)備標(biāo)識(shí)等,最后將數(shù)據(jù)格式化之后落地存儲(chǔ),通過(guò)Flume收集到Kafka中,完成實(shí)時(shí)總線和離線總線的拆分。
數(shù)據(jù)建模/存儲(chǔ):后端收集上來(lái)的數(shù)據(jù)經(jīng)過(guò)ETL的清洗,將上報(bào)的數(shù)據(jù)格式化之后保存在HDFS上,供后續(xù)分析使用。同時(shí)Kafka分發(fā)一份數(shù)據(jù)到Spark Streaming中,進(jìn)行實(shí)時(shí)數(shù)據(jù)分析。
數(shù)據(jù)統(tǒng)計(jì)/分析:除了Spark Streaming的實(shí)時(shí)分析外,落地到HDFS上的數(shù)據(jù)在Kettle的調(diào)度下,由OLAP子系統(tǒng)、Bitmap子系統(tǒng)、分群計(jì)算子系統(tǒng)、智能路徑計(jì)算子系統(tǒng)完成單圖、漏斗、留存、分群、智能路徑的最終計(jì)算。
三、實(shí)時(shí)分析系統(tǒng)
實(shí)時(shí)分析系統(tǒng)用于解決用戶監(jiān)控網(wǎng)站、APP實(shí)時(shí)流量需求,采用SparkStreaming+Druid來(lái)實(shí)現(xiàn)。實(shí)時(shí)ETL程序中設(shè)置5s為Spark Streaming處理批次間隔,同時(shí)將圈選配置信息在實(shí)時(shí)ETL程序中定義為廣播變量,完成指標(biāo)id的實(shí)時(shí)匹配,最后將數(shù)據(jù)通過(guò)緩沖kafka攝入到Druid中。
四、離線分析系統(tǒng)
離線分析系統(tǒng)主要完成單圖、漏斗、留存、智能路徑、分群等數(shù)據(jù)分析工作,是WMDA的核心組成,也是數(shù)據(jù)建模/存儲(chǔ),數(shù)據(jù)統(tǒng)計(jì)/分析的具體實(shí)踐。
基礎(chǔ)數(shù)倉(cāng):使用HDFS作為存儲(chǔ)系統(tǒng),DW+DM+DA是標(biāo)準(zhǔn)的數(shù)據(jù)中臺(tái)角度的數(shù)倉(cāng)分層,同時(shí)基于基礎(chǔ)事件模型(Event)搭建基礎(chǔ)數(shù)倉(cāng)。
Hive:完成基礎(chǔ)數(shù)倉(cāng)的核心ETL。
Spark+ETL:完成數(shù)據(jù)圈選規(guī)則匹配、臟數(shù)據(jù)的過(guò)濾和標(biāo)準(zhǔn)日志格式化。
離線計(jì)算集群:包括OLAP系統(tǒng)、Bitmap計(jì)算系統(tǒng)、分群計(jì)算系統(tǒng)、智能路徑計(jì)算系統(tǒng),主要完成單圖、漏斗、留存、分群、智能路徑相關(guān)計(jì)算工作。
Kettle:負(fù)責(zé)離線計(jì)算集群的調(diào)度。
TaskServer:任務(wù)執(zhí)行系統(tǒng),負(fù)責(zé)執(zhí)行由Kettle調(diào)度的Hive sql任務(wù)、MapReduce任務(wù)。
數(shù)據(jù)服務(wù)接口層+回溯接口層:供可視化服務(wù)獲取數(shù)據(jù)和指標(biāo)變更回溯任務(wù)的觸發(fā)。
離線計(jì)算邏輯復(fù)雜,保證系統(tǒng)容錯(cuò)性尤為關(guān)鍵,WMDA離線和實(shí)時(shí)數(shù)據(jù)系統(tǒng)都遵循Lambda架構(gòu),保證了系統(tǒng)較好的容錯(cuò)特性。
4.1 基于Kettle的任務(wù)調(diào)度系統(tǒng)
Kettle是基于java開(kāi)源的ETL工具集,可以在windows、Linux、Unix上運(yùn)行,數(shù)據(jù)抽取高效穩(wěn)定。通過(guò)可視化界面設(shè)計(jì)ETL流程,無(wú)需代碼去實(shí)現(xiàn)。在Kettle中,有兩種基本的腳本文件job和transformation,job是完成整個(gè)工作流的控制,transformation完成針對(duì)數(shù)據(jù)的基礎(chǔ)轉(zhuǎn)換。在job下的start模塊,有一個(gè)定時(shí)功能,可以每日、每周等方式實(shí)現(xiàn)對(duì)ETL任務(wù)的定時(shí)調(diào)度。
Kettle體系結(jié)構(gòu)分為Kettle平臺(tái)、各類插件,其中Kettle平臺(tái)是整個(gè)系統(tǒng)的基礎(chǔ),包括UI、插件管理、元數(shù)據(jù)管理和數(shù)據(jù)集成引擎。UI顯示Spoon這個(gè)核心組件的界面,通過(guò)xul實(shí)現(xiàn)菜單欄、工具欄的定制化,顯示插件界面接口元素。元數(shù)據(jù)管理引擎kjb、ktr以及一些元數(shù)據(jù)信息,插件通過(guò)該引擎獲取基本信息。插件管理引擎主要負(fù)責(zé)插件的注冊(cè)。數(shù)據(jù)集成引擎負(fù)責(zé)調(diào)用插件,并返回相應(yīng)信息。
Kettle是眾多“可供插入的地方”(擴(kuò)展點(diǎn))和“可插入的東西”(擴(kuò)展)共同組成的集合體。在Kettle中不管是以后的擴(kuò)展還是系統(tǒng)集成的功能,本質(zhì)上都是插件,管理的方式和運(yùn)行機(jī)制是一致的。系統(tǒng)集成的功能也均是實(shí)現(xiàn)了對(duì)應(yīng)的擴(kuò)展接口,只是插接的方式略有不同。
Kettle的擴(kuò)展點(diǎn)包括step插件、job entry插件、Database插件、Partioner插件、debugging插件等。
在Kettle中一個(gè)job代表ETL控制流中的一項(xiàng)邏輯任務(wù)。Job會(huì)按照連線的方式順序執(zhí)行,每個(gè)job產(chǎn)生一個(gè)執(zhí)行結(jié)果,作為其他分支上job的條件。同時(shí)數(shù)據(jù)會(huì)從一個(gè)entry組件傳遞到另一個(gè)entry組件,并在entry組件中進(jìn)行相應(yīng)的處理。
在Kettle負(fù)責(zé)調(diào)度各個(gè)子計(jì)算系統(tǒng)ETL任務(wù)的同時(shí),TaskServer負(fù)責(zé)任務(wù)的執(zhí)行,這樣使得任務(wù)的調(diào)度與任務(wù)的執(zhí)行完全分離,方便任務(wù)的管理以及任務(wù)執(zhí)行的靈活性。在Kettle中集成TaskSever相關(guān)的組件,需要關(guān)注Kettle中的兩個(gè)接口:JobEntryInterface和JobEntryDialogInterface。JobEntryInterface是Job Entry插件的主要實(shí)現(xiàn)接口,主要的功能如下:
- 保存Job Entry設(shè)置
實(shí)現(xiàn)類使用私有變量保存設(shè)置的參數(shù),通過(guò)get、set方法獲取和設(shè)置。Dialog實(shí)現(xiàn)類會(huì)通過(guò)這些方法設(shè)置界面上的參數(shù)。同時(shí),需要提供一個(gè)深度拷貝的方法,在保存的參數(shù)被修改時(shí)進(jìn)行調(diào)用。
- 序列化插件
- 輸出信息提供
一個(gè)Job Entry支持三種類型的輸出:true、false和無(wú)條件。這三種情況不是所有的Job Entry都會(huì)同時(shí)支持,例如dummy job entry僅支持true和false。通過(guò)JobEntryInterface接口的evaluates()方法可以設(shè)置一個(gè)Job Entry的輸出結(jié)果是否支持true和false,isUnconditional()方法則是設(shè)置是否支持無(wú)條件執(zhí)行。
- 執(zhí)行任務(wù)
JobEntryDialogInterface接口負(fù)責(zé)構(gòu)建和打開(kāi)參數(shù)設(shè)置對(duì)話框。
4.2 基于TaskServer的任務(wù)執(zhí)行系統(tǒng)
TaskServer是一個(gè)高可用的、可擴(kuò)展性強(qiáng)的分布式任務(wù)執(zhí)行系統(tǒng)。整體架構(gòu)采用Master-Slave的設(shè)計(jì)模式,支持橫向擴(kuò)展,兼?zhèn)滟Y源隔離、服務(wù)容災(zāi)等功能,為線上任務(wù)的運(yùn)行提供可靠的執(zhí)行環(huán)境。WMDA各個(gè)子計(jì)算系統(tǒng)中的Hive sql和MapReduce都在TaskServer上執(zhí)行,極大的確保WMDA離線任務(wù)的穩(wěn)定性。
TaskServer主要包括三個(gè)部分:JobTracker集群、TaskTracker集群和Zookeeper集群。
- JobTracker:負(fù)責(zé)任務(wù)接受、資源計(jì)算和任務(wù)分配。
- TaskTracker:負(fù)責(zé)任務(wù)執(zhí)行和保持心跳。
- TaskQueue:任務(wù)隊(duì)列。
- Zookeeper:協(xié)同調(diào)度。
在JobTracker中主要是資源的計(jì)算和任務(wù)分發(fā),一個(gè)任務(wù)被提交之后會(huì)由JobTracker中的任務(wù)分發(fā)器(Dispatcher)發(fā)給對(duì)應(yīng)的事件處理器(EventHadler),事件處理器完成之后會(huì)將任務(wù)相關(guān)的元數(shù)據(jù)信息寫入到Zookeeper中。TaskTracker監(jiān)聽(tīng)并拉取Zookeeper中新增的任務(wù)信息,抽象成TaskRunner放到線程池中運(yùn)行,同時(shí)TaskTracker中任務(wù)調(diào)度器(TaskScheduler)跟JobTracker保持心跳用來(lái)更新機(jī)器信息。如果JobTracker監(jiān)聽(tīng)到某一個(gè)TaskTracker宕機(jī)會(huì)重新進(jìn)行任務(wù)分配,由其他的TaskTracker來(lái)執(zhí)行。資源的隔離方面,TaskTracker中采用硬性資源劃分機(jī)制和分時(shí)資源擴(kuò)容機(jī)制。硬性資源是指資源被某種方式劃分之后,就只會(huì)接受這一類任務(wù)。在TaskServer中就為WMDA的任務(wù)劃分出來(lái)了WMDA Tier,只服務(wù)于WMDA提交的任務(wù)。分時(shí)資源擴(kuò)容是指可以按照不同時(shí)間段來(lái)分擔(dān)其他Tier的任務(wù)。比如,在9點(diǎn)到10點(diǎn)是WMDA任務(wù)量的高峰,劃分的WMDA Tier不足以滿足當(dāng)前任務(wù)所需要的計(jì)算資源,此時(shí)利用分時(shí)資源擴(kuò)容機(jī)制從Share Tier中擴(kuò)容一些Tier來(lái)滿足當(dāng)前任務(wù)對(duì)計(jì)算資源的需求。
4.3 Druid在OLAP計(jì)算系統(tǒng)的實(shí)踐
WMDA中主要涉及OLAP場(chǎng)景模塊有概覽、單圖、即席圈選7日數(shù)據(jù)預(yù)覽、熱圖、維度閱覽以及用戶行為統(tǒng)計(jì)。OLAP引擎在選擇上嘗試過(guò)kylin和Druid。Kylin采用預(yù)計(jì)算,因?yàn)閿?shù)據(jù)已經(jīng)提前計(jì)算好,所以在前端查詢展示的時(shí)候相對(duì)較快。但是,因?yàn)閃MDA支持多個(gè)維度任意組合,所以采用Kylin需要根據(jù)不同組合情況進(jìn)行計(jì)算,這就使得隨著維度的增加,計(jì)算量增大。Druid則需要根據(jù)查詢條件即時(shí)計(jì)算,查詢相比Kylin慢,但是優(yōu)化后基本在1秒以內(nèi)。WMDA最終基于Druid實(shí)現(xiàn)OLAP模塊,其包括的角色有:
- Real-Time Nodes:負(fù)責(zé)實(shí)時(shí)數(shù)據(jù)處理;
- Historical Nodes:負(fù)責(zé)加載非實(shí)時(shí)窗口內(nèi)滿足加載規(guī)則的所有歷史數(shù)據(jù)Segment;
- Coordinator Nodes:負(fù)責(zé)Druid集群中Segment的管理與發(fā)布,包括加載新Segment,丟棄不符合規(guī)則的Segment,管理Segment副本以及Segment負(fù)載均衡;
- Broker Nodes:整個(gè)集群的查詢?nèi)肟?#xff0c;提供查詢路由和結(jié)果組裝;
- Indexing Service:負(fù)責(zé)“生產(chǎn)”Segment的高可用、分布式、Master/Slave架構(gòu)服務(wù)。
Druid將數(shù)據(jù)的索引節(jié)點(diǎn)劃分為HistoricalNodes和Real-Time Nodes,切割了歷史數(shù)據(jù)的加載與實(shí)時(shí)流數(shù)據(jù)處理,因?yàn)槎叨夹枰加么罅績(jī)?nèi)存與CPU;另一方面,劃分Coordinator Nodes和Broker Nodes,切割了查詢需求與數(shù)據(jù)如何在集群內(nèi)分布的需求,確保用戶的查詢請(qǐng)求不會(huì)影響數(shù)據(jù)在集群內(nèi)的分布情況。
在時(shí)間窗口內(nèi)的數(shù)據(jù)會(huì)停留在Real-Time Nodes內(nèi)存中,而時(shí)間窗口外的數(shù)據(jù)會(huì)組織成Segment存儲(chǔ)到Deep Storage中;批量數(shù)據(jù)經(jīng)過(guò)Indexing Service也會(huì)被組織成Segment存儲(chǔ)到Deep Storage中,WMDA使用HDFS作為Druid的Deep Storage,同時(shí)Segment的元信息都會(huì)被注冊(cè)到元信息庫(kù)中,Coordinator Nodes會(huì)定期(默認(rèn)為1分鐘)去同步元信息庫(kù),感知新生成的Segment,并通知在線的Historical Node去加載Segment,Zookeeper也會(huì)更新整個(gè)集群內(nèi)部數(shù)據(jù)分布拓?fù)鋱D。
當(dāng)用戶需要查詢信息時(shí),會(huì)將請(qǐng)求提交給Broker Nodes,BrokerNodes會(huì)請(qǐng)求Zookeeper獲取集群內(nèi)數(shù)據(jù)分布拓?fù)鋱D,從而知曉請(qǐng)求應(yīng)該發(fā)給哪些Historical Nodes以及Real-Time Nodes,匯總各節(jié)點(diǎn)的返回?cái)?shù)據(jù)并將最終結(jié)果返回給用戶。
4.4 Bitmap計(jì)算系統(tǒng)在WMDA中的實(shí)踐
Bitmap是漏斗、留存和分群數(shù)據(jù)分析中,用來(lái)較快計(jì)算滿足某些條件下用戶數(shù)量的數(shù)據(jù)結(jié)構(gòu)。Bitmap計(jì)算系統(tǒng)分為Bitmap計(jì)算模塊和Bitmap檢索模塊,Bitmap計(jì)算模塊通過(guò)MapReduce從基礎(chǔ)日志中計(jì)算出指標(biāo)Bitmap、維度Bitmap和分群Bitmap,并提交至WTable中。Bitmap檢索模塊則是通過(guò)BitMapEngine查詢出符合查詢條件的用戶包。
五、總結(jié)
本文主要闡述了WMDA數(shù)據(jù)端的架構(gòu)設(shè)計(jì),主要從數(shù)據(jù)采集、數(shù)據(jù)計(jì)算、數(shù)據(jù)應(yīng)用、調(diào)度系統(tǒng)等方面逐一進(jìn)行了介紹。當(dāng)然,大數(shù)據(jù)處理相關(guān)的架構(gòu)以及技術(shù)選型并不是本文介紹的這一個(gè)方向,好的架構(gòu)應(yīng)該是根據(jù)具體的業(yè)務(wù)來(lái)設(shè)計(jì)的,而且是隨著業(yè)務(wù)的拓展不斷演變的。
歡迎大家關(guān)注“58架構(gòu)師”微信公眾號(hào),定期分享云計(jì)算、AI、區(qū)塊鏈、大數(shù)據(jù)、搜索、推薦、存儲(chǔ)、中間件、移動(dòng)、前端、運(yùn)維等方面的前沿技術(shù)和實(shí)踐經(jīng)驗(yàn)。
總結(jié)
以上是生活随笔為你收集整理的axure9数据统计插件_WMDA:大数据技术栈的综合实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: nginx mysql 查询系统_ngi
- 下一篇: oracle清理告警日志,Oracle