競速榜是大促期間各採銷群提供的基於京東實時銷售數據的排行榜,同樣應對大促流量洪峰場景,通過榜單撬動品牌在京東增加資源投入。競速榜基於用戶配置規則進行實時數據計算,榜單排名在大促期間實時變化,相關排名數據在微博、朋友圈廣泛傳播,相關計算以及排名的準確性至關重要。 ...
一、背景
競速榜是大促期間各採銷群提供的基於京東實時銷售數據的排行榜,同樣應對大促流量洪峰場景,通過榜單撬動品牌在京東增加資源投入。競速榜基於用戶配置規則進行實時數據計算,榜單排名在大促期間實時變化,相關排名數據在微博、朋友圈廣泛傳播,相關計算以及排名的準確性至關重要。
競速榜的每個榜單配置規則都會有差異,為保障榜單數據計算準確,需要在大促開始前對榜單實時排名數據進行核對,主要驗證方案為在第二天取前一天的實時排名數據,另外根據榜單規則配置信息,計算相關的離線數據,進行實時離線數據對比,驗證數據的一致性。
單個榜單規則有20+個不同配置項,每個配置都相互獨立,需要針對每個規則分別進行數據驗證
二、對數方案演進過程
2.1、純人工 - 成本高且無法完整覆蓋
最初階段為純人工對數,分別獲取對應競速榜的實時和離線數據,進行人工比對
1)實時數據:每天23:59 定時讀取榜單數據介面,記錄對應榜單數據
2)離線數據:根據榜單規則手動編寫離線SQL腳本,通過數據查詢執行SQL獲取榜單排名數據
整個操作過程消耗時間較長,SQL編寫需要1小時,單SQL執行0.5小時,為覆蓋所有規則,一次需要完成100多個規則的配置和SQL編寫以及數據驗證,在規則不變情況下,預計需要消耗20人日才能完成一次完整測試, 且腳本編寫需要對業務規則深入瞭解,對測試人員SQL水平要求也較高。
2.2、半自動化 - 持續消耗人力
競速榜主要在大促期間使用,除功能測試覆蓋規則外,在大促前還要對業務方配置的規則進行數據驗證,確保用戶配置規則的計算準確性,以23年618為例,共有5000+榜單規則,如果仍然使用純人工驗證數據的方案,需要900+天,完全不可行。因此實現了半自動化對數方案,和人工對數方案相比,解決了離線SQL的自動化生成,實時數據的自動獲取等問題。
具體方案如下:
1、實時數據獲取:基於榜單快照功能,自動記錄榜單每日快照數據並寫入資料庫,
2、離線SQL生成和數據計算:
2.1、規則配置入庫:通過系統自帶的榜單規則導出功能,將榜單規則導出到excel,進而導入到hive表中;同時將榜單規則依賴的其他配置數據也導入到hive
2.2、規則化生成SQL:根據榜單規則配置信息,使用case when的方法,針對不同情況分別生成對應SQL片段,最後人工組合為上述SQL
2.3、合併SQL執行計算任務:將多個組合生成的SQL合併為1個,並配置離線調度任務,通過任務執行分別計算不同榜單的離線數據
2.4、數據推送到對數MySQL:將生成的離線榜單數據推送到實時數據存儲的MySQL
3、實時離線數據對比:將實時和離線數據全部推送入資料庫後,直接查詢資料庫,進行數據對比,並對超過閾值的數據進行高亮提示。
通過以上方法,完成了半自動化的實時離線對數,解決了人工對數中最消耗人力的SQL手動編寫問題。但是,該方案仍然存在以下問題:
-
SQL需要人工介入:SQL的生成還存在多次人工操作,中間需要人工對生成的SQL進行調整
-
規則變化引發SQL調整:在大促前,用戶會持續調整規則,這樣就導致之前配置好的SQL 和用戶規則不一致,進而導致對應榜單對數失敗,需要重新生成對應SQL,配置調度任務並重新執行對數操作。
在22年618和雙11期間,主要是研發同學使用進行相關SQL調整和數據驗證,需要3個開發人員持續3周,整體消耗人力45人日。
2.3、全自動化 - 解放人力
為了進一步解放人力消耗,將對數操作從半自動化升級到全自動化,需要實現以下內容
-
無需人工介入,自動生成SQL,自動執行SQL
-
執行用的SQL根據規則變化每日自動調整,保證SQL可以自動持續更新
完整的自動化對數方案如下圖所示:
優化點細節:
1. 每天自動更新並存儲SQL:榜單規則從手動頁面導出變為每天自動抽取規則數據到HIVE中,進而每天自動更新目標SQL並將SQL存儲到HIVE表中
2. 自動獲取目標SQL並執行:將執行的目標SQL從HIVE中獲取到後再執行SQL(使用了hive命令的一些特殊方法,預先獲取到SQL再執行)
#HiveTask增加run_shell_cmd_out函數只返回標準流的內容在標準客戶端執行如下python腳本
from HiveTask import HiveTask
ht = HiveTask()
ht.run_shell_cmd_out(shellcmd='hive -e "select * from table;"')
該方案在23年618期間投入使用,恰逢研發團隊交接,新團隊毫無對數經驗,且有其他業務同步進行,無法投入全量人力。通過全自動化對數,解放了研發人力投入,極大提高了大促備戰效率。需要人力主要是測試同學對整個鏈路的調度任務進行維護性處理。
作者:京東零售 王恆蕾、戚琪
來源:京東雲開發者社區