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

news2024/11/15 21:31:18

一、背景

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

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

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

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

来源:京东云开发者社区

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/815178.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Chrome浏览器中的vue插件devtools的下载方式(使用Chrome应用商店/科学上网情况下)

目录 devtools对前端来说的好处——开发预览、远程调试、性能调优、Bug跟踪、断点调试等 下载步骤: 测试阶段: 最近做项目要使用devtools这个vue插件。 devtools对前端来说的好处——开发预览、远程调试、性能调优、Bug跟踪、断点调试等 下载步骤…

灭蚊灯上架亚马逊美国站UL1559测试报告办理

近年来,随着全球气候变暖和环境变化,蚊虫成为了世界各地人们的头疼问题。为了解决这一困扰,我司研发出一款创新的昆虫控制设备——灭蚊灯,并成功将其上架亚马逊美国站。为了满足亚马逊站对产品的要求,我们积极办理了UL…

寒假作业(蓝桥杯2016年省赛C++A组第6题 )

题目: 注:蓝桥杯2016年省赛C++A组第6题 请填写表示方案数目的整数。 题解: 由题可知这是一道全排列问题,因此我们可以使用c++的next_permutation函数对于1-13的数字进行全排列即可,并每次排列判断是否满足题意。 注意:你提交的应该是一个整数,不要填写任何多余的内…

测试|Selenium介绍及环境搭建

测试|Selenium介绍及环境搭建 1.Selenium是什么 Selenium是用来做web网站 UI自动化的测试工具/测试框架。 我们这里说的Selenium是Selenium2.0,它由Selenium IDE,Webdriver, Selenium Grid组成。 Selenium IDE是用于Selenium测试的完成集成开发环境&…

小程序反馈与投诉混淆官方修改指引

根据《微信小程序平台运营规范》5.14“混淆行为:5.14.1 恶意混淆腾讯官方功能”,相关违规类型包括但不限于以下类型。 官方“反馈与投诉”入口与样式: 违规类型1:混淆官方投诉入口 小程序中的投诉入口样式与官方投诉入口icon名称…

边缘检测(Canny算子)实现原理

当前,边缘检测算法在实际应用中越加广泛,技术趋势也是快速发展,热火朝天。很多朋友或多或少了解,需要实现各类功能,尤其是一些复杂的需求,实现更好的滤波、满足更佳的提取效果,一时半会儿无从下手。 下面小编就带大家了解关于边缘检测算子的实现原理。由于边缘检测算子常…

相约脑暴会,共创大未来——动态实时三维人体重建脑暴会

今夏我们召集江湖中的有识之士,共同探讨动态实时三维人体重建制作容积视频的方案,展开一场别开生面的脑暴会。在此,我们向全球开发者发出诚挚邀请,邀请您加入我们周三(8月2日)晚上八点通过腾讯会议进行的脑…

多重背包二进制优化

可以将混合背包看作是一个特殊的多重背包,只要转化一下即可,将s-1转为1s0转化为m/v(最大可能装下的货物); 二进制优化的精髓就在于选择物品的次数,比如有s7,我们可以分为1,2 ,4(二进制形式),1就代表选择一个…

HTTP协议+GET/POST区别

1. web开发流程 (1) HTML、CSS、JS、图片等资源通过浏览器进行整合,最终渲染出所需画面。 (2)浏览器对Web服务器进行资源请求 浏览器通过url请求资源。【HTTP协议、URL:确定唯一的一个资源】 浏览器请求…

DeepVO 论文阅读

论文信息 题目:DeepVO Towards End-to-End Visual Odometry with Deep Recurrent Convolutional Neural Networks 作者:Sen Wang, Ronald Clark, Hongkai Wen and Niki Trigoni 代码地址:http://senwang.gitlab.io/DeepVO/ (原作者并没有开源…

驶向专业:嵌入式开发在自动驾驶中的学习之道

导语: 自动驾驶技术在汽车行业中的快速发展为嵌入式开发领域带来了巨大的机遇。作为自动驾驶的核心组成部分,嵌入式开发在驱动汽车的智能化和自主性方面发挥着至关重要的作用。本文将探讨嵌入式开发的学习方向、途径以及未来在自动驾驶领域中的展望。 一、学习方向:…

备战携程面试:Redis Master-Slave异步同步进度独家解析!

Hello 大家好,我是你们的小米!今天我要和大家分享一道来自携程的面试题:Redis Master-Slave异步同步的话怎么判断Slave同步进度? Redis,作为一款非常火热的内存数据库,提供了Master-Slave的异步复制机制&a…

什么是嵌入式软件开发?

嵌入式软件一般是在交叉的开发环境下进行的,这样的运行环境能够让软件开发过程中更加稳定、可靠和安全,在很大程度上提升了软件开发的质量和效率,同时也使得软件开发的难度和程度大大降低。 嵌入式软件的交叉开发环境,反映了用于…

【数据结构篇C++实现】- 特殊的线性表 - 串

友情链接:C/C系列系统学习目录 文章目录 串🚀一、串的定义🚀二、串的存储结构🛴(一)串的顺序存储结构1、定长顺序存储表示2、堆分配存储表示 🛴(二)串的链式存储结构3、块…

ES6 - Iterator迭代器和for...of 循环

文章目录 前言一、Iterator介绍二、Iterator原理三、实现Iterator接口的原生对象有五、默认调用 Iterator 接口的场合六,for... of 循环七,总结 前言 JavaScript 原有的表示“集合”的数据结构,主要是数组(Array)和对…

【每天40分钟,我们一起用50天刷完 (剑指Offer)】第四十二天 42/50【unordered_set】【双指针处理连续】【翻转字符串】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…

优思学院|企业遇到瓶颈期怎么办?六西格玛管用吗?

企业遇到瓶颈期应该分析一下原因,企业内部应该和各级一起思考如何解决、如何舒缓,即使找管理咨询公司同样也是这样做的,关键是企业是否连一个领导者也没有呢? 企业每天都会遇到新的问题,是否每次都要找管理咨询公司&a…

第七篇:k8s集群使用helm3安装Prometheus Operator

安装Prometheus Operator 目前网上主要有两种安装方式,分别为:1. 使用kubectl基于manifest进行安装 2. 基于helm3进行安装。第一种方式比较繁琐,需要手动配置yaml文件,特别是需要配置pvc相关内容时,涉及到的yaml文件太…

iOS--frame和bounds

坐标系 首先,我们来看一下iOS特有的坐标系,在iOS坐标系中以左上角为坐标原点,往右为X正方向,往下是Y正方向如下图: bounds和frame都是属于CGRect类型的结构体,系统的定义如下,包含一个CGPoint…

卡片布局 可左右上删除,可向下拉出上一个 支持复用

效果 支持左右上 三个方向删除内容,支持下拉显示上一个。支持adapter 支持复用。 使用 myLayout.setAdapter(new StackAdapter() {final int[] bgColorsnew int[]{Color.RED,Color.GREEN,Color.BLUE};Overridepublic View getView(int position, LayoutInflater …