竞速榜实时离线对数方案演进介绍
竞速榜是大促期间各采销群提供的基于京东实时销售数据的排行榜,同样应对大促流量洪峰场景,通过榜单撬动品牌在京东增加资源投入。竞速榜基于用户配置规则进行实时数据计算,榜单排名在大促期间实时变化,相关排名数据在微博、朋友圈广泛传播,相关计算以及排名的准确性至关重要。小米的卢伟冰每次大促都会晒出榜单数据:
竞速榜的每个榜单配置规则都会有差异,为保障榜单数据计算准确,需要在大促开始前对榜单实时排名数据进行核对,主要验证方案为在第二天取前一天的实时排名数据,另外根据榜单规则配置信息,计算相关的离线数据,进行实时离线数据对比,验证数据的一致性。
单个榜单规则有20+个不同配置项,每个配置都相互独立,需要针对每个规则分别进行数据验证。
实时数据:每天23:59 定时读取榜单数据接口,记录对应榜单数据。 离线数据:根据榜单规则手动编写离线SQL脚本,通过数据查询执行SQL获取榜单排名数据。
SQL需要人工介入:SQL的生成还存在多次人工操作,中间需要人工对生成的SQL进行调整。
规则变化引发SQL调整:在大促前,用户会持续调整规则,这样就导致之前配置好的SQL 和用户规则不一致,进而导致对应榜单对数失败,需要重新生成对应SQL,配置调度任务并重新执行对数操作。
在22年618和双11期间,主要是研发同学使用进行相关SQL调整和数据验证,需要3个开发人员持续3周,整体消耗人力45人日。
【3. 全自动化 - 解放人力】
无需人工介入,自动生成SQL,自动执行SQL。 执行用的SQL根据规则变化每日自动调整,保证SQL可以自动持续更新。
每天自动更新并存储SQL:榜单规则从手动页面导出变为每天自动抽取规则数据到HIVE中,进而每天自动更新目标SQL并将SQL存储到HIVE表中。 自动获取目标SQL并执行:将执行的目标SQL从HIVE中获取到后再执行SQL(使用了hive命令的一些特殊方法,预先获取到SQL再执行)。
#HiveTask增加run_shell_cmd_out函数只返回标准流的内容在标准客户端执行如下python脚本from HiveTask import HiveTaskht = HiveTask()ht.run_shell_cmd_out(shellcmd='hive -e "select * from table;"')