查看原文
其他

一个数据库死锁竟然被测试发现了,这你敢信

京东保险 刘佳丽 京东技术
2024-08-24


Tech

导读

在软件开发的复杂世界中,数据库死锁往往是隐藏在数据操作深处的隐患,它们可能在任何时候无声无息地破坏系统的稳定性。在最新的测试中,测试工程师竟然意外发现了一个潜伏已久的数据库死锁问题。这个发现不仅展示了细致测试的重要性,也提醒我们即使是看似不起眼的系统异常,也可能是潜在大问题的冰山一角。在本文中,我们将深入探讨这个死锁是如何被发现的,以及我们可以从中学到的宝贵经验。




01 背景

在今年的敏捷团队建设中,我通过Suite执行器实现了一键自动化单元测试。Juint除了Suite执行器还有哪些执行器呢?由此我的Runner探索之旅开始了!
测试生产监控发现数据库死锁报错:org.springframework.dao.DeadlockLoserDataAccessException:### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock found

测试是通过什么方式发现呢?


还要从前一段时间开始说起。

A:理赔系统上线后,不能进行生产验证,作为测试你要怎么避免生产问题呢

B:目前对生产的验证只能联系业务人员进行生产验证

A:那我们测试这边调研一下,看一下有什么方法

B:好的,我去看一下有没有适合的集团工具可以对生产异常数据进行统计

就是这样的一个对话,让我发现了EasyBI工具,和这个工具的缘分就开始了!

首先,给大家介绍一个这个工具,它可以做什么呢?它可以通过连接生产数据库或者接口开发的形式进行生产数据统计,以聚合表、透视表、柱状图、折线图、雷达图等进行图形化配置,并将整个数据情况都汇总到统一的监控调度中心。


02   EasyBI工具详细操作  

理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。
首先,我根据自己系统的业务类型,开发了几个接口,生产数据异常的接口、生产理赔数量统计接口、生产TOP5理赔数据统计接口等。
然后,按照EasyBI工具使用文档进行了配置,详细操作请看以下分析。
(一)数据接入

把开发的接口在EasyBI工具平台(EasyBI (jd.com))进行配置

(二)应用配置

创建应用,把配置好的接口数据以聚合表、柱状图、等进行图形化配置,以该形式展示监控数据

(三)订阅管理

配置好应用后,对此应用进行邮件订阅,定时任务推送生产数据监控的结果

(四)监控数据分析
非车核心理赔数据统计接口:目前分为三类,分别是是错误信息统计接口、周失败和成功统计接口、日失败和成功统计接口。
  • 错误信息统计接口
    • 1.1 通过对理赔不同的错误信息进行分类,统计出当天、本周、上周和上上周各个错误信息的个数,通过数据对比能够及时发现 当前系统的稳定性、理赔数据正确性、业务逻辑校验合理性
    • 1.2 理赔不同的错误信息统计通过easyBI平台明细表分类展示
    • 1.3 通过理赔错误类型及时判断是正常业务校验或者是异常问题

  • 周失败和成功统计,日成功和失败数据接口
    • 2.1 针对团险的主流产品、个险的主流产品、理赔系统进行连续一周或者当天的理赔成功数据和错误数据统计,通过对比及时发现主流产品理赔业务的正确性,保证客户理赔的时效性
    • 2.2 周数据根据商品计划在easyBI平台以柱状图展示,日数据根据商品计划在easyBI平台以条形图展示

开发过程中也会遇到一些问题,那是怎么解决的呢?
问题就是刚开始设计方案时直接通过对理赔数据库数据进行查询返回对应的结果,发现接口会出现超时情况,因为理赔错误数据统计时需要根据理赔时的保单号查询承保详情接口判断出是对应的商品计划存在,这个是第三方的接口不受自己控制。
改进方案为通过定时任务把需要的数据先存储到对应的数据库,然后根据存储到数据库的数据进行校验,以此可以解决接口超时问题。
我发现的数据库死锁就是通过错误信息统计接口发现的,看到统计出的结果出现。
org.springframework.dao.DeadlockLoserDataAccessException:
### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock found这个非正常业务异常信息

发现后和领导同步

A:哇哦!监控做的不错

B:会继续加油的


  
03 
 思考与总结 
  


理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目

基于检测到的数据库死锁问题,我发现不能实时的接收到异常数据的统计和监控,那么要怎么实时地处理呢?

一场和同事的交流就开始了B:我现在检测到的异常数据是通过EasyBI工具定时发送的,我怎么可以实时发现异常数据C:可以设定一个阈值,当异常数据超过这个阈值时,我们就判定为异常情况B:那是不是可以把这个异常情况通过京me告警发给相关人员呢C:这是个好方法有了思路以后,说干就干开发一个接口,通过异常数据的统计值与阈值进行比较,如果大于阈值,就发送告警通知,收到的告警通知如下


因为有了这个告警,发现了生产异常情况;    上游系统传输了不支持的赔付信息,及时地通知到前端系统和相关业务




推荐阅读大文件上传原理及实现方案IT工单治理野史:由每周最高150+治理到20+【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)
分库分表之拆分键设计


求分享

求点赞

求在看

打造SAAS化服务的会员徽章体系,可以作为标准的产品化方案统一对外输出。结合现有平台的通用能力,实现会员行为全路径覆盖,并能结合企业自身业务特点,规划相应的会员精准营销活动,提升会员忠诚度和业务的持续增长。底层能力:维护用户基础数据、行为数据建模、用户画像分析、精准营销策略的制定

▪功能支撑:会员成长体系、等级计算策略、权益体系、营销底层能力支持

▪用户活跃:会员关怀、用户触达、活跃活动、业务线交叉获客、拉新促活

继续滑动看下一个
京东技术
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存