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

一、背景

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

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

单个榜单规则有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.mzph.cn/news/18869.shtml

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

相关文章

【雕爷学编程】Arduino动手做(181)---Maixduino AI开发板2

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

roop 视频换脸

roop: one click face swap. 只用一张人脸图片,就能完成视频换脸。 项目地址: https://github.com/s0md3v/roopColab 部署: https://github.com/dream80/roop_colab 本文是本地部署的实践记录。 环境基础 OS: Ubuntu 22.04.2 LTSKernel: 5…

操作系统专栏2-文件系统from小林coding

文件系统 文件系统构成虚拟文件系统文件的使用文件的存储连续存储非连续空间存放方式链表方式索引方式 Linux文件的实现方式 空闲分区的管理文件系统结构目录的存储软链接和硬链接 文件系统构成 Linux的设计哲学有一点很重要:一切皆文件,不仅仅是普通的文件和目录,就连块设备,…

程序员面试金典17.*

文章目录 17.01 不用加号的加法17.04 消失的数字17.05字母与数字17.06 2出现的次数17.07 婴儿名字17.08 马戏团人塔17.09 第k个数17.10 主要元素17.11 单词距离17.12 BiNode17.13 恢复空格(未做,字典树dp)17.14 最小K个数17.15 最长单词17.16…

webpack基础知识一:说说你对webpack的理解?解决了什么问题?

一、背景 Webpack 最初的目标是实现前端项目的模块化,旨在更高效地管理和维护项目中的每一个资源 模块化 最早的时候,我们会通过文件划分的形式实现模块化,也就是将每个功能及其相关状态数据各自单独放到不同的JS 文件中 约定每个文件是一…

数字孪生的「三张皮」问题:数据隐私、安全与伦理挑战

引言 随着数字化时代的来临,数据成为了当今社会的宝贵资源。然而,数据的广泛使用也带来了一系列隐私、安全与伦理挑战。数字孪生作为一种虚拟的数字化实体,通过收集和分析大量数据,模拟和预测现实世界中的各种情境,为…

windows美化任务栏,不使用软件

1.任务栏透明: 效果图: (1).winr打开命令行 输入regedit回车打开注册表 regedit (2).在注册表中打开 \HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced 这个路径 \HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explore…

(自控原理)自动控制的分类与基本要求

一、分类 1、线性连续控制系统 2、非线性控制系统 判断是时变时不变看的是系数,判断线性还是非线性看的是变量 二、基本要求 三、自动控制的分析方法

C++库函数——String类的模拟实现

目录 ①String类的主体 ②String类的具体实现 1.构造函数、拷贝构造函数、赋值运算符、析构函数 ⑴构造函数 ⑵拷贝构造函数 ⑶赋值运算符 ⑷析构函数 2.迭代器(范围for的实现原理) 3.修改:push_back, apppend, , clear, swap, c_str ⑴push_b…

如何设计一个自动化测试框架?

一个成熟的测试框架主要由 4 部分组成:基础模块、管理模块、运行模块和统计模块 基础模块 底层核心库 一般指用于操作被测试应用程序的第三方库,例如在 Web 端的 Selenium/WebDriver。如API端的Requests 对象库 PO模式中的页面对象 可重用组件 如一些…

Spring系列二:基于注解配置bean【建议收藏】

文章目录 💗通过注解配置bean🍝基本介绍🍝快速入门🍝注意事项和细节 💗自己实现Spring注解配置Bean机制🍝需求说明🍝思路分析🍝注意事项和细节 💗自动装配 Autowired&…

特性快闪:使用 Databend 玩转 Iceberg

作者:尚卓燃(PsiACE)澳门科技大学在读硕士,Databend 研发工程师实习生 Apache OpenDAL(Incubating) Committer https://github.com/PsiACE 几周前,Databricks 和 Snowflake 召开了各自的年度大会,除了今年一…

【WebRTC---序篇】(七)RTC多人连麦方案

服务端可以选择mediasoup,作为SFU服务器,只负责转发数据 下图举例三个Client (browser或者客户端)同时加入一个房间,每个app同时发布一路视频和一路音频,并且接受来自其他app的音视频流,mediasoup内部的结构如下&…

python爬虫基础

文章目录 前言爬虫简介urllib库的使用如何获取网页的源码一个类型六个方法一个类型六个方法1、read()方法2、readline()方法3、readlines()方法4、getcode()5、geturl()6、getheaders() urllib下载下载网页下载图片下载视频 请求对象的定制 未完待续 前言 爬虫爬的好牢饭吃的早…

Linux编辑器 - vim使用

1.vim的基本概念 Vim是一个广泛使用的文本编辑器,它是在Unix和Linux系统中常用的命令行文本编辑器之一。 vim的主要三种模式 ( 其实有好多模式,目前掌握这 3 种即可 ), 分别是 命令模式 ( command mode )、 插入模式 &#xff0…

/bin/bash: Resource temporarily unavailable

有现场反馈plsql无法连接数据库了,登录环境查看时发现从root切换到grid时报错/bin/bash: Resource temporarily unavailable [rootdb1 ~]# su - grid Last login: Thu Jul 27 18:45:04 CST 2023 su: failed to execute /bin/bash: Resource temporarily unavailab…

瑞吉外卖项目----(2)缓存优化

1 缓存优化 1.0 问题说明 1.1 环境搭建 将项目推送到远程仓库里,教程在git 提交远程仓库前建议取消代码检查 创建新的分支v1.0(用于实现缓存优化)并推送到远程仓库 1.1.1 maven坐标 导入spring-data-redis的maven坐标: &l…

2023年DevOps和云趋势报告!

要点 ●云创新已从革命性阶段转变为演进性阶段,重点是迁移和重新架构工作负载。云空间已发展为提供对可扩展资源和托管服务的按需访问,强调简化交互并减少团队的认知负担。 ●人工智能 (AI) 和大型语言模型 (LLM) 可以通过解决认知过载问题并支持即时管…

【ChatGLM_01】ChatGLM2-6B本地安装与部署(大语言模型)

基于本地知识库的问答 1、简介(1)ChatGLM2-6B(2)LangChain(3)基于单一文档问答的实现原理(4)大规模语言模型系列技术:以GLM-130B为例(5)新建知识库…

AgileBoot - 全栈项目启动

AgileBoot-Back-End: 基于Ruoyi做了大量重构优化的基础快速开发框架。采用Springboot Vue 3 Mybatis Plus 更面向对象的业务建模 面向生产的项目。(非玩具项目) 首先克隆代码,同是克隆前端和后端的代码。 前端代码启动: np…