竞速榜实时离线对数方案演进介绍 | 京东云技术团队

京东云开发者
• 阅读 353

一、背景

竞速榜是大促期间各采销群提供的基于京东实时销售数据的排行榜,同样应对大促流量洪峰场景,通过榜单撬动品牌在京东增加资源投入。竞速榜基于用户配置规则进行实时数据计算,榜单排名在大促期间实时变化,相关排名数据在微博、朋友圈广泛传播,相关计算以及排名的准确性至关重要。

竞速榜的每个榜单配置规则都会有差异,为保障榜单数据计算准确,需要在大促开始前对榜单实时排名数据进行核对,主要验证方案为在第二天取前一天的实时排名数据,另外根据榜单规则配置信息,计算相关的离线数据,进行实时离线数据对比,验证数据的一致性。

单个榜单规则有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手动编写问题。但是,该方案仍然存在以下问题:

  1. SQL需要人工介入:SQL的生成还存在多次人工操作,中间需要人工对生成的SQL进行调整

  2. 规则变化引发SQL调整:在大促前,用户会持续调整规则,这样就导致之前配置好的SQL 和用户规则不一致,进而导致对应榜单对数失败,需要重新生成对应SQL,配置调度任务并重新执行对数操作。

在22年618和双11期间,主要是研发同学使用进行相关SQL调整和数据验证,需要3个开发人员持续3周,整体消耗人力45人日。

2.3、全自动化 - 解放人力

为了进一步解放人力消耗,将对数操作从半自动化升级到全自动化,需要实现以下内容

  1. 无需人工介入,自动生成SQL,自动执行SQL

  2. 执行用的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期间投入使用,恰逢研发团队交接,新团队毫无对数经验,且有其他业务同步进行,无法投入全量人力。通过全自动化对数,解放了研发人力投入,极大提高了大促备战效率。需要人力主要是测试同学对整个链路的调度任务进行维护性处理。

作者:京东零售 王恒蕾、戚琪

来源:京东云开发者社区

点赞
收藏
评论区
推荐文章
Stella981 Stella981
3年前
MongoDB凭什么跻身数据库排行前五?
DBEngines 数据库流行度排行榜发布了5 月份的数据,前六名的排名“千年不变”,分别是:Oracle、MySQL、MicrosoftSQLServer、PostgreSQL、MongoDB 和IBMDb2。而其中,MongoDB以比去年同期超出65.96分的成绩继续雄踞榜单前五,这个增幅在全榜仅次于PostgreSQL的77.99,而其相对于4
Wesley13 Wesley13
3年前
QQ玩一玩好友排行榜与世界排行榜
QQ玩一玩好友排行榜与世界排行榜1、开发环境CocosCreatorV2.0.5手Q版本V7.9.0.3820(目前市场中最新版本)qqPlayCore.jsbuildTime:'FriNov09201813:20:45GMT0800(GMT08:00)'上出现,
Wesley13 Wesley13
3年前
MongoDB经典故障系列六:CPU利用率太高怎么办?
每逢电商大促,全民狂欢,但热闹是属于疯狂剁手的人们。而开发者们有的缺是“高流量、高访问、高并发”三高下带来的种种问题。为了应对大促期间的高I/O情况,企业会选择MongoDB云数据库应对。可是,在使用MongoDB云数据库的时候,可能经常遇到一个问题:MongoDBCPU利用率很高,都快跑满了,这该怎么办?别担心,我们有菊长呢。你看,菊长来了…!(
00后如何组织双十一大促看这一篇就够了! | 京东云技术团队
引言大家好,我是王蒙恩,一名“整顿职场”的00后。作为一名去年刚刚加入京东的校招生,我有幸成为本次CDP平台的11.11备战负责人。虽然早在实习的时候就经历过大促,但是真正组织整个部门的备战还是很难忘的。于是提起笔,给自己做一个大促总结,记录下11.11大
京东云开发者 京东云开发者
8个月前
对号入座,快看看你的应用系统用了哪些高并发技术?
一系统简介百舸流量运营平台承接着京东金融APP核心资源位和京东APP部分重要资源位,大促单接口QPS达到10w,压测单接口到20w,典型的c端读链路高并发场景。接下来,聊聊我们的系统都有哪些应对高并发的“武功秘籍”。二“武功秘籍”1缓存(redis缓存
京东云开发者 京东云开发者
5个月前
记一次大库大表的治理过程
一、背景部门中一核心应用,因为各种原因其依赖的MySQL数据库一直处于高水位运行,无论是硬件资源,还是磁盘使用率或者QPS等都处于较高水位,急需在大促前完成对应的治理,降低各项指标,以保障在大促期间平稳运行,以期更好的支撑前端业务。二、基本情况2.1、数据
京东云开发者 京东云开发者
4个月前
大促高并发系统性能优化实战--京东联盟广告推荐系统
当一个推荐系统面临高频、瞬时、大幅的流量突变时,如何在维持稳定性的同时,最小化推荐效果损失?背景618对京东来说是一场重要的营销盛会,大促将为业务各个层面带来爆发式增长。然而,超大规模的流量洪峰也对京东各系统提出了严峻考验。京东联盟是京东的联盟营销平台,主
京东云开发者 京东云开发者
2个月前
大数据实时链路备战——数据双流高保真压测
作者:京东零售京东零售一、大数据双流建设1.1数据双流大数据时代,越来越多的业务依赖实时数据用于决策,比如促销调整,点击率预估、广告分佣等。为了保障业务的顺利开展,也为了保证整体大数据链路的高可用性,越来越多的0级系统建设双流,以保证日常及大促期间数据流的
618技术揭秘:探究竞速榜页面核心前端技术 | 京东云技术团队
本文将探究京东竞速榜H5页面的核心前端技术,包括动画、样式配置化、皮肤切换、海报技术、调试技巧等方面,希望能够为广大前端开发者提供一些有用的参考和思路。
大数据实时链路备战——数据双流高保真压测 | 京东云技术团队
大数据时代,越来越多的业务依赖实时数据用于决策,比如促销调整,点击率预估、广告分佣等。为了保障业务的顺利开展,也为了保证整体大数据链路的高可用性,越来越多的0级系统建设双流,以保证日常及大促期间数据流的稳定性。