`
aa8945163
  • 浏览: 275183 次
  • 性别: 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

    用于分布式系统管理的应用软件.pdf

    2. **去中心化控制**:在分布式系统中,没有一个单独的控制点。所有模块都相互独立,共同合作以完成任务。 3. **容错性**:分布式系统通过冗余设计和数据备份来实现高可用性和容错能力。 4. **水平扩展**:可以...

    基于JAVA EE的工单管理系统

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

    ferry工单系统 v1.0.zip

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

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

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

    Python写的IT运维工单管理系统源码.zip

    本篇文章将深入探讨一个由Python编写的IT运维工单管理系统,帮助读者理解其背后的实现原理和功能特性。 首先,我们来看这个系统的核心语言——Python。Python是一种高级编程语言,以其简洁明了的语法、丰富的库支持...

    哈尔滨工业大学分布式系统T15.WebSearchTechnologies.pptx

    * 算法问题:效率和质量、如何快速收集有用的网页、如何选择下一个URL、如何避免过载的子网络 3. Indexer * 选择关键词对文档进行索引 * 需要网页作者的合作通过Meta标签来指示特定的关键词 * 算法问题:如何选择...

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

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

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

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

    SAP09-拆解工单CO07操作.docx

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

    thinkphp工单系统

    总的来说,ThinkPHP工单系统提供了一个全面的售后服务平台,通过高效的工单处理流程、便捷的通知机制以及良好的扩展性,帮助企业提升客户服务质量,增强客户满意度。对于熟悉PHP和ThinkPHP的开发者来说,这个系统...

    运维工单系统修正版2.pdf

    本文将详细阐述一个典型的运维工单系统的工作流程以及页面介绍,这对运维人员尤其是一些初入行的小白来说非常有帮助。 ### 运维工单系统的工作流程 运维工单系统的流程通常包括以下四个步骤: 1. **创建工单**:...

    工业蒸汽锅炉分布式控制系统设计.pdf

    分布式控制系统利用现场总线技术,将控制功能分散到多个节点,实现对工业燃煤锅炉的高效管理。 1. **概述** 节能与提高热能利用率是全球关注的焦点,而工业锅炉作为能源转换的主要设备,其能耗高、效率低和污染...

    PESCMS TICKET客服工单系统 1.3.5源码.zip

    PESMCS Ticket(下称PT)是一款基于GPLv2...1.1.0为PT第一个正式版,必然存在各种不足,我们会尽心倾听用户的心声,细心打磨好PT,让她成为大家心目中所喜爱的工单系统!运行环境:PHP 5.6及以上版本Mysql 5.5及以上版本

    分布式与实时操作系统

    分布式与实时操作系统是计算机科学中的两个重要领域,它们在现代信息技术中扮演着不可或缺的角色。分布式系统是由多个相互协作的计算节点组成,通过网络通信来共享资源和完成任务,而实时操作系统则是强调对时间约束...

    北邮软件工程分布式系统中需求定义领域建模用例建模

    总的来说,这个资料包提供了从需求分析到系统设计的全面视角,包括了需求定义、领域建模和用例建模的关键实践,对于理解如何构建一个分布式软件系统,特别是温控系统的实现,具有很高的学习价值。学习这些知识可以...

    分布式温控系统.rar

    Qt的使用让这个分布式系统具备了良好的可移植性和用户体验。在Server端,开发者可以利用Qt的网络编程模块来实现TCP/IP通信,与各个Client端建立连接并交换数据。同时,Qt的信号槽机制使得事件处理变得简单,当接收到...

Global site tag (gtag.js) - Google Analytics