`
aa8945163
  • 浏览: 277205 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一个工单引发的分布式系统调用的改造

 
阅读更多

        本文借用部门的小事改编的一博文。

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. 后记

      坑是无处不在的,但是天网也是恢恢的,群众看钱的眼睛是雪亮的,所以针对钱的系统你不要存在侥幸心理蒙混过关,到时候发现了,你会很尴尬的。

 

  • 大小: 13.9 KB
  • 大小: 38 KB
  • 大小: 20.4 KB
  • 大小: 14.5 KB
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    探究分布式系统在工业机器人领域中的应用.pdf

    分布式系统使这三个部分能够独立工作,增强了工业机器人的灵活性和自适应性,降低了系统故障的风险。 **二、工业机器人的设计考虑** 1. **结构设计**:工业机器人的设计通常包括感应、处理和驱动三大模块。它们...

    PHP工单管理系统|在线提交工单管理系统基于THINKPHP二次开发免费开源

    PHP工单管理系统|在线提交工单管理系统基于THINKPHP二次开发免费开源 源码简介:PHP工单管理系统|在线提交工单...适用范围:工单管理系统源码|在线提交工单管理系统基于THINKPHP|完美使用源码 运行环境:php+mysql

    分布式系统课件-01

    - **参考书4**:《分布式系统:原理与范型》,Andrew S. Tanenbaum等著,杨建峰等译,清华大学出版社,2004年 ### 三、课程基础知识 - **所需基础**: - 高级程序设计 - 计算机网络 (TCP/IP) - 操作系统 (UNIX和...

    基于JAVA EE的工单管理系统

    【基于JAVA EE的工单管理系统】是一个典型的Web应用程序,它主要使用Java EE(Java Platform, Enterprise Edition)技术栈来开发,旨在实现对电信业务的高效管理。Java EE平台提供了丰富的服务和组件,使得开发者...

    ferry工单系统 v1.0.zip

    9. **数据库设计**:工单系统通常需要一个数据库来存储工单信息、用户信息、处理历史等数据,可能是关系型数据库如MySQL或非关系型数据库如MongoDB。 10. **安全性**:系统需要确保数据的安全,包括用户隐私保护和...

    基础的Java工单系统源码.zip

    这个标题表明我们正在讨论一个基于Java编程语言构建的工单系统。工单系统通常用于处理用户请求、问题报告或服务申请,是许多企业和组织内部流程自动化的重要组成部分。它允许用户提交工单,然后由相应的支持团队进行...

    工单管理系统前端练手全套源码bootstrap+layer+jquery

    此套工单管理系统,使用bootstrap+layer+jquery写成 页面有,登陆页 工单首页,首页含有工单的仪表盘,通告,动态等 工单管理,含工单增删改查等页面,重要的是工单的筛选,和搜索 工单处理页面,主要有工单的新建,...

    PHP开源客服工单系统

    登入系统后台–工单模型–创建工单。创建完毕后,点击\’生成JS\’按钮。将JS文件保存到本地。最后在任意的页面中,引入如下代码,则可实现您的工单系统。 1、新增自动分单。 2、自动关闭工单支持2个状态设定。 3、...

    springboot工单管理系统 (源码+数据库)964158

    工单管理系统主要功能模块包括员工管理、工地信息管理、工单中心管理等,采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实际使用的需求,完善了对应的软体架设以及程序编码的工作,采取MySQL作为...

    空分系统的氧透分布式控制系统改造.pdf

    为解决这一问题,该公司决定对系统进行升级改造,以确保设备的稳定运行。在改造方案中,该厂决定更换主机电脑、升级中控SUPCON JX-300XP系统构架,包括操作站、通讯网络、控制站和控制柜,并优化自动控制。 在实施...

    PHP工单管理系统在线提交二次开发免费开源.zip

    工单系统是一种专业名词,是指用于记录、处理、跟踪一项工作的完成情况。工单系统分为两大类:一是企业内部部门工作任务传达的系统;二是专门用于售后安装维修类的系统,这种是把工单派给外勤人员上门去维护的软件。

    西北工业大学分布式实验内容

    分布式系统是计算机科学中的一个重要领域,它涉及到多台计算机通过网络进行协同工作,共同完成一个任务。西北工业大学的这个实验内容旨在让学生深入理解和掌握分布式系统的原理与实践,通过实际操作来提升理论知识的...

    自主创作的工单管理系统.zip

    无编程基础请勿购买本源码,本源码是...源码介绍:可自适应的独立工单管理系统,拥有完整的工单处理流程,具备提交工单、管理工单、跟进工单等功能。 服务器环境:linux+nginx或者linux+apahce,php7.2版本,mysql5.5+

    工单管理系统源码

    这个系统通常包括用户界面,让员工或客户可以提交工单,以及一个管理后台,供管理员跟踪、处理和解决这些工单。在提供的描述中,我们得到了一个完整的工单管理系统源码,它已经进行了THINKPHP框架的二次开发,并且是...

    免费IDC 工单系统

    当客户或内部员工提交一个问题或请求时,系统会自动生成一个工单,记录问题详情、优先级和状态等信息。这个工单随后会被分配给相应的处理人员,他们可以通过系统跟踪工单的进展,进行沟通和协作,直至问题解决。在...

    PESCMS Ticket客服工单系统 v1.3.6 新增支持微信小程序+跨域工单提交

    实现在任何系统、任何页面,只需要调用一句Javascript代码,即可生成工单系统! PESCMS Ticket客服工单系统运行环境: PHP 5.6及以上版本 Mysql 5.5及以上版本 IE浏览器不保证兼容 PESCMS Ticket客服工单系统安装...

    工单系统 v3.2

    THINKPHP内核的工单系统,非常适合于售后客户服务,二开后对接到网站系统是非常不错的哦,可以添加客户和售后人员,支持短信和邮件提醒,只需要在后台配置好就行了,还是非常简单的。1、系统管理1.1:客户管理:可...

    计算机分布式系统教学资料

    分布式系统是计算机科学中的一个重要领域,它涉及到多个独立的计算机节点通过网络连接,共同协作以完成一项任务,对外表现出单一系统的特性。用户在使用时,感觉就像在操作一台大型计算机,而无需关心底层的分布式...

    SAP09-拆解工单CO07操作.docx

    1. 创建拆解工单:在SAP系统中,需要创建一个新的拆解工单,输入相应的工单信息,包括工单编号、工单名称、创建日期等。 2. 输入工单组件:在创建拆解工单后,需要输入工单的组件信息,包括零部件编号、数量、单位...

Global site tag (gtag.js) - Google Analytics