`
donlianli
  • 浏览: 336976 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Group-logo
Elasticsearch...
浏览量:216883
社区版块
存档分类
最新评论

记一次自动恢复的支付故障

 
阅读更多

故障描述

作为一个老牌OTA公司,公司早些年订单主要来源是PC网站和呼叫中心。我在入职公司大约半年后,遇到一次非常诡异的故障。有一天早上,大概也是这个季节,阳光明媚,程序猿刚起床,洗洗涮涮,准备去上班,却突然收到一大堆报警,线上消息队列大量积压;当然,我还是一如既往的非常勤奋地在9点之前就到公司的;但是作为一名新员工,环视四周,组内其他员工都还没到公司,运维也都在路上,故障就这样突然降临了。我赶紧开机登录堡垒机,连接线上机器,tail 错误日志。但是线上10几个系统,我看了好几个系统,都没有发现有什么错误,这就尴尬了。但是统计消息队列,超过好几千的消息待消费。我当时就在想,这些消息都是什么鬼。截图如下:

图一

看到这里,你一定会问数量为604和881个的消息是做什么?知道这些消息的逻辑不就解决问题了么?话说当时我也是这么想的,可是当时我作为一名新人,才开始接触业务不到3个月,还完全没有这么深的业务积累(这个时候知道业务是多么重要)。

既然系统看不到任何错误,我也没有什么办法了,当时因为刚入职没多久,还有点寄希望于领导来解决。转眼间半个小时已经过去,故障仍然没有恢复,从业务反馈来看,微信支付宝等支付方式不受影响。受影响的只是信用卡支付(其实当时信用卡量占比挺高)和分销支付(后来了解到,其实这两种模式都是信用卡支付模式)。领导还在堵车,运维也只是到了几个小兵,我找运维把几个机器的stack打印了一下,也没有发现什么问题;运维也陆续到岗,运维准备出大招,重启系统。但是就在此时,突然系统自动恢复了。所有积压的消息自动被消费,信用卡支付也可以了。好,系统竟然有自我修复功能,佩服;

 

故障原因分析

后来,经过一番努力,还是找到一点蛛丝马迹,我发现系统的一个消费消息的定时任务,在故障期间一直在报错,因为是高可用的job机制,4台机器,只有抢占到锁的服务器才能获取到访问数据库消息权利,所以报错信息比较分散,4台机器都有。

图二

 

可以判定,这个sql一直异常导致job根本无法获取到消息,而另外的生产者又不断的往队列放消息,进而导致消息积压。两个系统关系如下:

图三

 

虽然故障总结了,但是我们心里也不踏实,如何找到系统故障的根本原因,以防止以后再次出现这种故障呢?

方法有两种:

1、去查代码,所有跟这个表相关的sql,都需要仔细review一下,但是你也不一定能查到原因,因为这个场景肯定是不好复现的,要不然早就发现这个问题了。

2、借助外力,从DB层面查导致这个sql无法执行成功的原因;

 

方法1看似简单,其实非常不可行。首先,虽然跟这个表相关的sql,只有几十个,但是都是正常的sql,没有使用for update锁死表的sql。也没有存在未关闭的事务,因为事务是通过AOP配置的;

所以只能寄希望于方法2了,让DBA去查;

好歹我们的DBA足够给力,只用了1天多的时间就查出来了。

DBA回复如下:

1、有事务没有及时提交,且连接也没有关闭,导致该事务一直处于开启状态并持有锁,后续update操作是全表扫描,因此会有锁等待。

2、最后该连接后续一直没有操作,达到空闲超时3600秒(我们的故障时间正好也是1小时)后被mysql server断开,锁才被释放。(mysql设置:wait_timeout = 3600)

最牛B的是DBA贴出了没有提交事务的SQL;sql我就不贴出来了,我们根据DBA提供的线索,找到了代码的问题;

 

故障根本原因

后来我们查看代码,如上面DBA所说,消息没有被消费处理,是因为有一个mysql客户端,即我们的支付应用程序,在进行快捷支付的时候,向队列插入一条记录,然后在事务中向第三方发起了调用。使用的是httpclient工具发起的调用,但是设置超时时,只设置了连接超时时间(connectionTimeout)为30秒,没有设置响应超时时间(soTimeout),这样当出现网络问题时,程序就会一直等第三方响应,然后事务也一直没有提交。而在job程序中,需要将这个queue的所有记录给更新,但是又取不到表锁(见图三),就不断的报lock wait timeout的错误;其实对使用spring AOP框架的研发,很容易犯这种错误。我们从 https://tech.meituan.com/2018/04/19/trade-high-availability-in-action.html 这篇总结里面的1.5段也能看出,美团支付也在这块也栽过坑;

图四

 

到这里,其实故障原因已经很清楚了,我们在代码层面也确实查到了问题。因为DBA提供的sql中,连insert sql的主机名也列了出来,并且现场没有被破坏,我们使用jstack应该还能找到正在等待的线程才对;于是在时隔故障2天后,我们又让运维把那台机器的jvm stack给打印了一下,果然发现等待的线程仍然存在

堆栈如下:

图五

 

与之对应的代码,我就不贴了;

 

解决方法

1、临时解决方法,将响应超时时间设置上,但这无法根除问题,只是降低再次出现问题的概率;

2、长久解决方案,修改框架,使用编程式事务,将所有远程调用从事务中剥离出来。

 

 

知识点

1、事务,spring AOP

2、httpclient,超时设置

 

 求关注“猿界汪汪队”

分享到:
评论

相关推荐

    SQL_Server2005群集实现方案

    服务器群集是一组协同工作并运行 Microsoft Cluster Service ...群集服务可以对应用程序和资源进行监控,并能够自动识别和恢复众多故障状况。这为在群集中管理工作负荷提供了灵活性。另外,还提高了整个系统的可用性。

    Windows Server 2003 服务器群集创建和配置指南

    服务器群集是一组协同工作并运行 Microsoft Cluster Service ...群集服务可以对应用程序和资源进行监控,并能够自动识别和恢复众多故障状况。这为在群集中管理工作负荷提供了灵活性。另外,还提高了整个系统的可用性。

    Windows Server 2003服务器群集创建和配置指南

    Windows Server 2003服务器群集创建和配置指南 ...群集服务可以对应用程序和资源进行监控,并能够自动识别和恢复众多故障状况。这为在群集中管理工作负荷提供了灵活性。另外,还提高了整个系统的可用性。

    Windows_Server_2003服务器群集创建和配置指南

    服务器群集是一组协同工作并运行Microsoft群集服务(Microsoft ...群集服务可以对应用程序和资源进行监控,并能够自动识别和恢复众多故障状况。这为在群集中管理工作负荷提供了灵活性。另外,还提高了整个系统的可用性

    美发会员管理系统 绿色安全版

    恢复到最近一次的有效备份. (3).使用系统的管理员不可轻易将用户名密码告知无关人员,自己需要保管好密码. 四.硬件加密: 加密锁简介: 我司WEB互联网版连锁会员管理系统和商家联盟会员管理系统可进行硬件加密,只要...

    架构即未来 现代企业可扩展的Web架构流程和组织 原书第2版

    要确保任何你所开发的系统在发生故障时,至少有一个冗余的实例。 一个实例确实很危险,当这个实例出现不明原因的问题不能对外服务,需要debug的时候,如果优先debug,那当前实例就要暂停服务直到你找到问题为止。...

    蓝芒5.0主机管理系统破解版 含主控端 被控端和机器码

    在因硬件故障、黑客入侵或其他原因数据损毁、系统崩溃的情况下,都能够迅速自动恢复站点配置,将灾难损失减至最低。 ICP备案管理网站备案 支持运营商统一备案,也支持用户自行备案; 客户自主管理和升级主机 ...

    视易神通夜总会5.0安装包

    54.增加日报表、帐单查询、营业收入、酒水销售、出品查询报表自定义设置,右键点击网格标题栏可以自定义日报表内容(注意:第一次使用前请先点右键选择"保存标题栏"). 55.增加结帐单显示补打次数. 56.增加包厢点单,...

    雨过天晴电脑保护系统

    雨过天晴电脑保护系统的实用,灵活和易于操作使电脑用户,不论其水平高低,都可以在数秒之内轻松、快捷地修复存在的电脑故障。不论你是谁,一位英语老师,一个小企业的经理,还是掌管数千台电脑的网络管理员,或是...

    服务器选择方案对比.docx

    内置冗余的共享存储和智能备份,重装系统只需要简单几步,物理服务器失败后可在几分钟内自动恢复。同时服务环境采用高端服务器进行部署,集中的管理与监控,从而确保业务稳定可靠。 服务器选择方案对比全文共7页,...

    酒店管理软件|辰星酒店管理软件 星级版

    差异性备份机制,采用系统多级的备份技术以及系统自动化的恢复手段,系统在最快时间内恢复工作,保障稳定安全的运行环境。 4、操作灵活实用 图形化房态界面,可以一目了然状态情况,系统自动过房费,动态实时的客房...

    软件工程需求文档

    3.6. 故障处理要求 ......................................................................................................... 14 3.7. 其他专门要求 .........................................................

    朋科PECU-ERP企业资源管理系统 v14051701.zip

    正是由于数据是对等分布存储在不同主机上,任何一台主机发生故障,故障修复后都可通过网络从其它主机获取完整用户数据,从而快速恢复系统运行,使用户业务能不间断正常运作。 7. 独有单据网络数字签名功能,网络...

    MyWifiAP_2.3.1.221

    此时可使用本软件的“修复网络共享”功能以自动修复,操作如下图, 点击软件图标→“工具”→“修复网络共享”,软件将会在后台默默地为您 执行此项工作却不会蹦出来求赏半辆玛莎拉蒂,不过它也不会喊干爹。 10....

    Shopex网上商店系统V4.8 服务器安装包

    在购物过程中,遇到电脑断线、重启等故障,待电脑恢复后,还能继续购物。 12:引入站点cms功能模块 采用cms体系对商店页面内容进行配置和管理,使站点内容表现力更加丰富,内容管理也更加强大和便捷。 13:与中国...

    德力西产品说明.pdf

    不正确的使用可能会造成变频器运行不正常、发生故障或降低使用寿命,乃至发生人身伤害事故。因此使用前应认真阅读本说明书,严格按说明使用。本手册为标准附件,务必请您阅读后妥善保管,以备今后对变频器进行检修和...

    realplayer

    消息中心根据默认设置,可以每周一次或两次检查消息,并在消息到达时显示消息的标题部分。 您可以通过以下步骤更改“消息中心”显示消息的方式以及检查新消息的频率:在“视图”菜单中依次选择“消息中心”、“选项...

    智能铁路大数据应用.pdf

    1 安全风险的辨识 2 安全管控综合评估及控制 3 安全风险自动预警 4 安全人员和资源的合理分配 5 事故故障关联分析 铁路行车安全大数据面临的挑战 数 据 挑 战 业 务 挑 战 0 50 100 150 200 250 300 2016....

    安卓版大蜘蛛防病毒软件 Dr.Web Security Space PRO 12.6.2 中文多.zip

    •保护 SD 卡免受自动运行文件和 Exploit.Cpllnk 的感染,这两种文件都可能对运行Windows的设备造成危险。 •将检测到的威胁移至隔离区。恢复隔离的文件。 •对系统性能的影响最小。 •节省电池资源。 •由于病毒...

    SiteTeam自助建站平台源代码版 v4.7

    SiteTeam企业自助建站软件是一部专业为搜索引擎营销(网站优化/SEO)而设计,操作极简单,网站极稳定、故障自动修复、在线升级维护、建站速度极快、专为大众上网营销而设计的完全免费开源企业建站系统! SiteTeam企业...

Global site tag (gtag.js) - Google Analytics