本文借用部门的小事改编的一博文。
1. 工单
客服很着急的带着一袋子投诉工单找到我们研发部门:
“你们怎么搞的,怎么这么退款不成功的?”
其他的业务部门也纷纷来电致贺:‘’你们系统是不是挂了!”
2. 懵逼
小编一下子就懵逼了,因为今天是小编值班,没有想到这么悲剧的事情发生了。小编的第一反应就是速度登录到后台,看看系统运行,没有问题。然后又迅速的电脑sgm监控系统,看看biz系统是不是稳定。
不上不知道,以上吓一跳,tp99都是3000以上,我大叫一声不好,迅速在群里问谁在操作系统运营的升级、打包之类的。这时候小黄弱弱的说这个,现在正在让dba执行一个删除操作,是昨天基金公司收益推错了,现在删掉,重新推送收益。但是为什么一个删除操作就会出现这么大问题那?拿着菜刀找DBA去!
3. BDA解释
DBA速度查看啦下监控,CPU间歇性打满。最终分析出来原来是分表分库操作中间件执行sql工具的问题。问题找到了,好吧,速度停掉,换种方式删除数据吧!
事情到这个时间的时候,应该是解决了,我舒舒服服的做到啦工位上。
4 事情远没有结束
这个时候工单开始躲起来了,尤其是退款的的工单和冻结、解冻的工单,大部分工单都是支付系统成功,台账系统成功,账务系统调账成功,为什么我们系统显示的是处理中那?上下游系统都成功了,为啥你一个中游系统在处理中。下面开始通过系统和日志分析问题。
5.分析
DBA执行数据库操作导致数据库的性能问题,这段时间的数据库的压力很大,一些插入和更新响应非常慢,导致平时不常见的并发更新问题,这个工单时消费退款的,具体体现为退款接口调用失败,原因是对应的原消费单状态是处理中,不是成功状态。在查询日志时发现了消费接口第一次调用时调账失败,异步重试的第二次调用是全部都处理成功,并且返回成功结果,订单此时不应该是处理中状态。
下图是第一次调用,因为调账失败(调账失败也是因为并发导致,这里不分析),在18:40:41.461开始更新订单状态为处理中。
下图是第二次调用,这次调账成功,在18:40:41.144开始更新订单状态为成功。
根据两次更新时间可以看出,由于数据库插入和更新非常慢,导致接口调用超时,调用方异步发起的mq重试操作到更新时,时间比第一次请求的更新早了500ms,导致其更新成了成功状态后,又被第一次更新改回了处理中状态。
6. 处理
针对这里更新并发问题,可以通过卡订单前置状态或乐观锁方式解决。本系统各类订单表都有version字段,需要各位在开发更新功能时,使用version字段实现乐观锁,如下图。
7. 改造
因为这个系统是我们半路接的系统,系统以前有些没有做完整的幂等性和并发性,下面我们要全面加上乐观锁,反之系统的请求的幂等性和数据的一致性出现错误。
8. 后记
坑是无处不在的,但是天网也是恢恢的,群众看钱的眼睛是雪亮的,所以针对钱的系统你不要存在侥幸心理蒙混过关,到时候发现了,你会很尴尬的。
相关推荐
PHP工单管理系统|在线提交工单管理系统基于THINKPHP二次开发免费开源 源码简介:PHP工单管理系统|在线提交工单...适用范围:工单管理系统源码|在线提交工单管理系统基于THINKPHP|完美使用源码 运行环境:php+mysql
此套工单管理系统,使用bootstrap+layer+jquery写成 页面有,登陆页 工单首页,首页含有工单的仪表盘,通告,动态等 工单管理,含工单增删改查等页面,重要的是工单的筛选,和搜索 工单处理页面,主要有工单的新建,...
开源软件ferry是集工单统计、任务钩子、权限管理、灵活配置流程与模版等等于一身的开源工单系统,当然也可以称之为工作流引擎。 致力于减少跨部门之间的沟通,自动任务的执行,提升工作效率与工作质量,减少不必要的...
工单管理系统主要功能模块包括员工管理、工地信息管理、工单中心管理等,采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实际使用的需求,完善了对应的软体架设以及程序编码的工作,采取MySQL作为...
哈尔滨工业大学分布式系统T15.WebSearchTechnologies.pptx
西北工业大学分布式实验内容,3个Exercise,以及《分布式系统原理与范型》
工单系统Ticket system又称为工单管理系统(还可以称为问题工单系统,事务工单系统,事务追踪系统issue tracking system,支持工单系统support ticket system)),它是...一个完善功能的工单系统又可以称为帮助台系统。
实现在任何系统、任何页面,只需要调用一句Javascript代码,即可生成工单系统! PESCMS Ticket客服工单系统运行环境: PHP 5.6及以上版本 Mysql 5.5及以上版本 IE浏览器不保证兼容 PESCMS Ticket客服工单系统安装...
PHP程序开发在线工单管理系统源码 安装环境要求: 服务器空间需要支持 php5.6-7.1 + mysql 1、源码包完整上传至空间,并解压 2、执行 http://域名/ install 根据提示完成安装 3、安装完成,其它的自己调整和设置 ...
基础的Java工单系统源码.zip
Python写的IT运维工单管理系统,用来做IT运维工单的指派和完成情况的统计。
#资源达人分享计划#
基于Gin + Vue + Element UI前后端分离的工单系统 基于Gin + Vue + Element UI前后端分离的工单系统 基于Gin + Vue + Element UI前后端分离的工单系统 基于Gin + Vue + Element UI前后端分离的工单系统 基于Gin ...
企业工单管理系统原型案例介绍: 工单中心 钉钉登录 我的工单 提交工单 我受理的工单 帮助中心 用户中心 管理中心 组织架构 用户管理 角色权限管理 问题分类管理 工单派送管理 帮助中心内容管理 质检管理
PESMCS Ticket(下称PT)是一款基于GPLv2...1.1.0为PT第一个正式版,必然存在各种不足,我们会尽心倾听用户的心声,细心打磨好PT,让她成为大家心目中所喜爱的工单系统!运行环境:PHP 5.6及以上版本Mysql 5.5及以上版本
系统运维工单模板
SAP 工单批量更新工单工序,用于在已生成的生产订单中批量增加工序,自动获取工单中最大的工序号,自动加到工单工序中
支持微信模板消息通知、短信通知、飞蛾小票机打印(每个工单可以独立配置一个小票机)。 word模板插件 支持自定义上传任何docx格式模板,可替换文本类型,应用场景包括表格,窗口行业在线打印,协议,报名表格,派工...
登入系统后台–工单模型–创建工单。创建完毕后,点击\’生成JS\’按钮。将JS文件保存到本地。最后在任意的页面中,引入如下代码,则可实现您的工单系统。 1、新增自动分单。 2、自动关闭工单支持2个状态设定。 3、...
#资源达人分享计划#