概述
在物流系統(tǒng)相關(guān)的大屏中,供應(yīng)鏈大屏復(fù)雜度較高,數(shù)據(jù)鏈路較長,穩(wěn)定性要求較高,當(dāng)前大屏已經(jīng)經(jīng)過2年時間的打磨,整體表現(xiàn)已經(jīng)相對比較成熟穩(wěn)定。
本文描述了物流供應(yīng)鏈業(yè)務(wù)較復(fù)雜的業(yè)務(wù)場景下,結(jié)合了大數(shù)據(jù)計算相關(guān)技術(shù),總結(jié)了實時監(jiān)控大屏指標(biāo)建設(shè)和服務(wù)構(gòu)建的框架和經(jīng)驗,為后續(xù)其他核心大屏的高可用和高實時性建設(shè)提供建設(shè)思路。以下幾點(diǎn)需要重點(diǎn)關(guān)注:
1、基于Flink的數(shù)據(jù)加工鏈路和OLAP的數(shù)據(jù)分析引擎
基于目前較為成熟的實時計算Flink,結(jié)合ClickHouse搭建基礎(chǔ)模型,借助雙流和EasyData實現(xiàn)一鍵切換。
2、指標(biāo)的一致性
加工和展示分離,可基于單倉原子指標(biāo)進(jìn)行區(qū)域和品類上卷,既保障了指標(biāo)的維度一致性(單倉-區(qū)域-全國),又保障了同一個數(shù)據(jù)版本的時間一致性。
同時借助緩存庫/表,來滿足不同的業(yè)務(wù)場景。
3、穩(wěn)定性建設(shè)
?數(shù)據(jù)鏈路的穩(wěn)定性
?接口服務(wù)的兜底
?指標(biāo)準(zhǔn)確性的驗證機(jī)制
?重算機(jī)制
本文內(nèi)容有限,很多設(shè)計的小細(xì)節(jié)未能體現(xiàn),感興趣的可隨時與我交流,希望上述內(nèi)容對正在從事大屏建設(shè)的同學(xué)有一些新的啟發(fā)和思考。
一、背景
供應(yīng)鏈大屏是供應(yīng)鏈?zhǔn)聵I(yè)部重要的看數(shù)工具,尤其在大促期間,為業(yè)務(wù)管理層掌握大促實時動態(tài)提供了支撐,為事業(yè)部的目標(biāo)達(dá)成、排產(chǎn)提供重要的數(shù)據(jù)支持。
特點(diǎn):
?指標(biāo)較多,170+;
?刷新頻率,1分鐘;
?數(shù)據(jù)來源較多,大件、逆向、冷鏈、服務(wù)+、Udata、離線等;
?鏈路長:10+個計算傳輸節(jié)點(diǎn)
?重要性高,穩(wěn)定性要求高,準(zhǔn)確性要求高;
二、方案
2.1 數(shù)據(jù)模型存儲選型
供應(yīng)鏈大屏涉及模型較多,消息量較大,對寫入性能和查詢性能要求較高,主要基于Elasticsearch和ClickHouse進(jìn)行對比選型,對比項如下:
比較項 | Elasticsearch | ClickHouse |
實現(xiàn)原理 | 基于Lucene的分布式搜索引擎,ES通過分布式技術(shù),利用分片與副本機(jī)制,解決了集群下搜索性能與高可用的問題。 | 基于MPP(Massively Parallel Processing)架構(gòu)的分布式ROLAP(關(guān)系OLAP)分析引擎,擁有完備的管理功能,是列式數(shù)據(jù)庫管理系統(tǒng)(DBMS)。通過使用日志合并樹,稀疏索引和向量化執(zhí)行引擎(CPU的SIMD單指令多數(shù)據(jù))充分發(fā)揮了硬件優(yōu)勢,實現(xiàn)高效的計算。 |
寫入性能 | 中等,有寫入延遲問題 | 較高,吞吐量大,經(jīng)測試是ES的5倍以上 |
查詢性能 | 中等 | 高,經(jīng)測試查詢速度比ES快5-30倍以上 |
多表聯(lián)合查詢 | 不支持 | 支持 |
服務(wù)器成本 | 高 | 相同數(shù)據(jù)占用的磁盤空間只有ES的1/3到1/30,節(jié)省了磁盤空間的同時,也能有效的減少磁盤IO;另一方面ClickHouse比ES占用更少的內(nèi)存,消耗更少的CPU資源 |
SQL查詢 | 不支持 | 支持 |
高并發(fā)支持 | 較好,經(jīng)過優(yōu)化可以支持上萬QPS | 官方建議qps為100 |
全文檢索 | 支持 | 不支持 |
由上面的比較可以看出,作為OLAP數(shù)據(jù)庫,CH的寫入,查詢性能都優(yōu)于ES,但是唯一的問題是高并發(fā)支持問題。所以對于不需要高并發(fā)和全文檢索的場景,選擇CH是更合適的。針對某些需要高并發(fā)的場景,可以選擇ES,或者CH+緩存層實現(xiàn)。
?
2.2 整體架構(gòu)
?
由于數(shù)據(jù)來源多、復(fù)雜度高,為了提升指標(biāo)服務(wù)的穩(wěn)定性,降低代碼復(fù)雜度提升可維護(hù)性,提升指標(biāo)的復(fù)用性,整體架構(gòu)分5層,包括模型加工層、數(shù)據(jù)處理層、單倉指標(biāo)加工層、區(qū)域指標(biāo)加工層和展示層。各層的職責(zé)如上圖所示。
2.3 指標(biāo)分層及一致性設(shè)計
以倉訂單相關(guān)指標(biāo)為例,所有指標(biāo)加工保持1套邏輯,同一主任務(wù)觸發(fā),加工完成之后,基于單倉指標(biāo)上卷加工區(qū)域等更高維度的指標(biāo),保證指標(biāo)數(shù)據(jù)的一致性。
針對不同的業(yè)務(wù)報表,根據(jù)不同的場景,進(jìn)行指標(biāo)查詢,通過指標(biāo)緩存表的方式,減少數(shù)據(jù)量,提升指標(biāo)的查詢性能。
?
2.4 穩(wěn)定性設(shè)計
由于數(shù)據(jù)鏈路長,穩(wěn)定性較差,問題主要集中在Flink、CH環(huán)節(jié),恢復(fù)周期長。對于大屏等核心任務(wù),數(shù)據(jù)的實時性和準(zhǔn)確性要求較高,以下是歷史發(fā)生過的問題:
?CK分區(qū)太多,寫入阻塞
?CK rename操作,節(jié)點(diǎn)太多,表結(jié)構(gòu)同步慢,導(dǎo)致寫入報錯,大量消息積壓,丟消息
?Flink機(jī)房網(wǎng)絡(luò)故障
?flink 偶發(fā)丟消息,未定位到原因
?checkpoint失敗
?jdq分片不均,單個分區(qū)消息增加400倍,消息積壓
?維表數(shù)據(jù)未更新,導(dǎo)致丟失字段
?上游運(yùn)單模型積壓,丟失部分字段
?數(shù)據(jù)積壓
?加工邏輯復(fù)雜,偶發(fā)亂序問題
?state未保存,丟數(shù)據(jù)
?CK跨分區(qū)字段查詢明細(xì),性能較低
?代碼編寫使用了Flink序列化未支持的格式、循環(huán)過多,導(dǎo)致算子背壓嚴(yán)重
?邏輯復(fù)雜,上線風(fēng)險高且回滾困難
從整個鏈路中,針對易出問題的flink-CK鏈路進(jìn)行雙流,物理隔離,遇到問題可一鍵切換至備流。
?
?
?
2.5 擴(kuò)展性設(shè)計
基于UCC配置,通過配置靈活適配業(yè)務(wù)訴求,節(jié)約開發(fā)成本,方便定位問題和恢復(fù);
包括4H/24H/28H、同環(huán)比日期配置、預(yù)測日期配置、單倉兜底配置、展示配置等;
(1)28小時模式配置化:可通過配置將任意一天切換為28小時、4小時模式,為業(yè)務(wù)和研發(fā)側(cè)提供了充分的線上驗證機(jī)會;
(2)閾值開關(guān)配置化:可通過閾值開關(guān)進(jìn)行數(shù)據(jù)兜底邏輯管控,確保數(shù)據(jù)平穩(wěn);
(3)自動刷新白名單配置化:靈活配置大屏自動刷新白名單,支持封版期間人員白名單權(quán)限控制;
(4)歷史日期配置化:計算預(yù)測全天指標(biāo)使用指定歷史日期的單量占比作為對比項,數(shù)據(jù)庫里包含部分歷史大促日單量數(shù)據(jù),可靈活配置修改對比的歷史日期;
(5)重算機(jī)制:可基于某一時間段進(jìn)行數(shù)據(jù)重算。
?
參數(shù)配置:
?
{ "thresholdEnable": "false", //大促預(yù)測上下線是否開啟,開啟后upperLimit與lowerLimit生效, "upperLimit": "1.6d", //上限 "lowerLimit": "0.6d", //下限 "zyShowFlag": true, //中小件產(chǎn)品維度-自營是否展示開關(guān) "swShowFlag": true, //中小件產(chǎn)品維度-商務(wù)是否展示開關(guān) "jjShowFlag": true, //中小件產(chǎn)品維度-經(jīng)濟(jì)是否展示開關(guān) "wdShowFlag": true, //中小件產(chǎn)品維度-外單是否展示開關(guān) "todayTradeCleanRateShowFlag": true, //今日交易清理率展示開關(guān) "promotionTradeCleanRateShowFlag": true,//大促交易清理率展示開關(guān) "isDebug": true, //是否debug,目前還沒使用 "isCacheOn": true, //是否打開緩存,默認(rèn)開 "isWriteMinuteAndHour": true, //是否雙寫分鐘表和小時表,代表是否寫 wms_order_analysis_report_minute_2023 和 wms_order_analysis_report_hour_2023 "isMinuteWrite": true, //是否寫分鐘表wms_order_analysis_report_minute_2023 開關(guān) "isHourWrite": true, //是否寫wms_order_analysis_report_hour_2023 開關(guān) "isMinuteNotice": false, //是否分鐘表寫完發(fā)mq "isHourNotice": false,//是否小時表寫完發(fā)咚咚推送mq }
?
對比策略配置:
{ "sTime": "2023-06-17 00:00:00", // 大屏策略時間開始 "eTime": "2023-06-17 19:59:59", // 大屏策略時間結(jié)束 "tbSTime": "2022-06-17 00:00:00", //同比開始 "tbETime": "2022-06-17 19:59:59",//同比結(jié)束 "hbSTime": "2022-11-10 00:00:00",//環(huán)比開始 "hbETime": "2022-11-10 19:59:59",//環(huán)比結(jié)束 "showType": "24h",//類型,24h同20h小時,都可以 "special24hCompDateStr": "2022-06-17",//大促24h特殊對比日期,(4h,28h不使用) 主要影響預(yù)測;主要用作非 4h/28h 的預(yù)測不使用昨日了; "specialCompDateStr": "" //大促4h/28h預(yù)測對比天數(shù) }
2.6 數(shù)據(jù)監(jiān)控
多種驗證及監(jiān)控手段組合保證數(shù)據(jù)準(zhǔn)確性
1)前端自動化模型,定時截取每個大屏關(guān)鍵節(jié)點(diǎn)截圖。
2)自動化抓包,分鐘級記錄接口調(diào)用情況,結(jié)合定時截圖,便用問題排查及定位。
3)大屏結(jié)果分鐘級落庫,并通過Grafana,創(chuàng)建大屏數(shù)據(jù)監(jiān)控看板,持續(xù)監(jiān)控大屏數(shù)據(jù),通過異常拐點(diǎn)發(fā)現(xiàn)問題點(diǎn),避免遺漏問題。并結(jié)合不同看板分析數(shù)據(jù)趨勢及變化原因。
4)結(jié)合大屏計算邏輯,通過京東動力搭建測試模型,做到自由指定時間計算大屏指標(biāo)明細(xì),驗證分析大屏數(shù)據(jù)。
?審核編輯 黃宇
-
監(jiān)控
+關(guān)注
關(guān)注
6文章
2219瀏覽量
55280 -
供應(yīng)鏈
+關(guān)注
關(guān)注
3文章
1681瀏覽量
38958 -
數(shù)據(jù)鏈
+關(guān)注
關(guān)注
2文章
39瀏覽量
15807
發(fā)布評論請先 登錄
相關(guān)推薦
評論