背景
團(tuán)隊(duì)目前在做一個(gè)用戶數(shù)據(jù)看板(下面簡稱看板),基本覆蓋用戶的所有行為數(shù)據(jù)萝勤,并生成分析數(shù)據(jù)露筒,用戶行為數(shù)據(jù)來源于多個(gè)數(shù)據(jù)源(餐飲、生活日用敌卓、充值消費(fèi)慎式、交通出行、通訊物流趟径、交通出行瘪吏、醫(yī)療保健、住房物業(yè)蜗巧、運(yùn)動(dòng)健康...)掌眠,基于對(duì)大量數(shù)據(jù)的任意請(qǐng)求、排序和統(tǒng)計(jì)幕屹,沒有辦法對(duì)原生表(原生多表查詢相對(duì)復(fù)雜)直接進(jìn)行數(shù)據(jù)采用蓝丙,所以我們?cè)诋?dāng)日的凌晨獲取前一天數(shù)據(jù),并將數(shù)據(jù)做成Json對(duì)象保存在Mongo數(shù)據(jù)庫中望拖。
所以看板最初采用得是T+1的策略渺尘,這樣就減少了實(shí)時(shí)數(shù)據(jù)計(jì)算的過程,另一方面能夠保證數(shù)據(jù)的準(zhǔn)確性说敏。但是目前很多人反饋沧烈,希望能夠?qū)崟r(shí)的獲取到看板最新的數(shù)據(jù),而且每月月底輝有消費(fèi)數(shù)據(jù)核對(duì)像云,消費(fèi)數(shù)據(jù)按照看板統(tǒng)計(jì)得出并核對(duì),如果等到第二天(也就是次月1號(hào))再輸出數(shù)據(jù)報(bào)表蚂夕,這種體驗(yàn)就太差了迅诬。
優(yōu)化方案
針對(duì)看板的原型需求和數(shù)據(jù)呈現(xiàn)形式,形成了類似 (數(shù)據(jù)(Mongo)服務(wù) - 接口服務(wù) - 前端展示頁面)的架構(gòu)模式婿牍,以T+1的策略提供數(shù)據(jù)侈贷,
來保障用戶可以高效的瀏覽到自己的行為數(shù)據(jù)結(jié)構(gòu),并給出具體得數(shù)據(jù)分析和建議等脂。
原有流程:通過設(shè)計(jì)開發(fā)控制臺(tái)調(diào)度服務(wù)俏蛮,并部署到中心服務(wù)器上,調(diào)度配置每天凌晨一點(diǎn)做服務(wù)啟動(dòng)上遥,會(huì)根據(jù)用戶新增和修改的日志做數(shù)據(jù)增量搏屑。
優(yōu)化目標(biāo):改成每次用戶行為數(shù)據(jù)的修改、刪除和保存都采用消息隊(duì)列形式實(shí)時(shí)的通知到服務(wù)去消費(fèi)粉楚,服務(wù)消費(fèi)之后立刻把Mongo的行為數(shù)據(jù)做好辣恋。
T+0 服務(wù)概要設(shè)計(jì)
核心功能實(shí)現(xiàn)設(shè)計(jì)?
1亮垫、用戶行為數(shù)據(jù)保存后實(shí)時(shí)發(fā)送MQ消息通知,解耦行為數(shù)據(jù)保存和看板數(shù)據(jù)生產(chǎn)的強(qiáng)關(guān)聯(lián)伟骨。
2饮潦、開發(fā)獨(dú)立服務(wù)消費(fèi)MQ,同步聚合看板數(shù)據(jù)携狭、輸出用戶行為數(shù)據(jù)報(bào)表继蜡,并推送通知消息給用戶進(jìn)行查看。
數(shù)據(jù)服務(wù)生成流程
時(shí)序圖/流程圖說明
1逛腿、原有是獨(dú)立服務(wù)每天凌晨進(jìn)行數(shù)據(jù)計(jì)算稀并,改成每次用戶行為完成修改之后發(fā)送MQ
2、服務(wù)端程序監(jiān)聽MQ鳄逾,消費(fèi)到數(shù)據(jù)稻轨,則調(diào)用調(diào)度服務(wù)進(jìn)行處理
3、調(diào)度服務(wù)根據(jù)配置好的調(diào)度規(guī)則雕凹,進(jìn)行控制臺(tái)服務(wù)啟動(dòng)殴俱,并將對(duì)應(yīng)的數(shù)據(jù)增量拉取到內(nèi)存中,進(jìn)行數(shù)據(jù)的篩選枚抵、排序线欲、整合,合并成目標(biāo)mongo文檔汽摹,并保存到mongo集群中
4李丰、調(diào)度服務(wù)數(shù)據(jù)處理完成之后,同步聚合看板數(shù)據(jù)逼泣、輸出用戶行為數(shù)據(jù)報(bào)表趴泌,并推送通知消息給用戶進(jìn)行查看。
數(shù)據(jù)聚合過程說明?
所有的用戶行為模塊都遵循這個(gè)規(guī)則拉庶,最后實(shí)現(xiàn)數(shù)據(jù)T+0 實(shí)時(shí)聚合的目標(biāo)