IT运维中,如何快速进行故障排查?(以银行APP交易故障为例)

news2024/12/24 19:46:04

一、事件背景

正值"五一"黄金周旅游高峰期,某城商行的手机APP突然出现大面积交易失败和严重卡顿现象。据初步统计,从上午10点开始APP的交易成功率从正常的99%骤降至75%左右,用户反馈的交易失败投诉量在短短2小时内激增了500%。与此同时,APP的响应时间也从平均2秒延长至8秒以上,导致大量用户无法顺利完成转账、支付等操作。

这一事故影响范围不断扩大,截至中午12点已有超过50万用户受到不同程度的影响,其中约20万用户完全无法使用APP进行任何交易操作。

二、定位问题根源

首先,运维团队利用银行现有的APM(应用性能管理)工具对整个交易链路进行全面监控。通过分析交易链路上各个节点的响应时间,发现多个核心系统服务的处理时间都出现了明显的延长。

其次,使用链路追踪进行深入分析。通过对大量失败交易的调用链进行采样和分析,注意到一个共同特征:绝大多数超时或失败的交易都在访问支付结算业务的相关微服务时出现了异常,这个发现将故障的范围初步缩小。

为了进一步确认根因,团队使用了日志分析工具(如ELK stack)对系统日志进行了深入挖掘。通过设置关键字过滤和时间范围筛选,发现在支付结算业务相关微服务的MQ(消息队列)网关中出现了大量的错误日志,这些日志显示MQ网关在处理消息时频繁出现超时和连接断开的情况。

初步判断问题可能出在以下两个方面

1. 支付结算业务的相关微服务处于各系统交互链路的下游,可能成为整个交易流程的瓶颈。

2. 支付结算业务的相关微服务相关的MQ网关存在异常,导致消息处理出现问题。

经过进一步缩小范围推测,可能是由于假期期间交易量激增,导致支付结算业务的相关微服务和MQ网关无法承受如此大的并发压力,从而引发了整个系统的连锁反应。

应急处置

为了缓解系统压力,运维团队决定临时提高支付结算业务相关微服务的资源配置。通过云平台的弹性伸缩功能,将服务器的CPU核心数进行扩展。同时,增加了数据库连接池的最大连接数,从原来的200提升到500,以应对高并发情况。

其次,针对MQ网关的问题,团队采取了以下措施:

1. 增加MQ服务器节点,从原有的3个节点扩展到6个节点,以分散消息处理压力。

2. 调整MQ的消息处理策略,将部分非关键消息的处理优先级降低,确保核心业务消息能够优先处理。

3. 优化MQ网关的错误重试机制,将原本的固定间隔重试改为指数退避算法,以避免在网络波动时造成的大量无效重试。

除此之外,运维团队还部署更为细致的监控措施:

1. 在支付结算业务的相关微服务服务器上部署了专门的资源监控agent,实时监控CPU使用率、内存占用、I/O等待时间等关键指标。

2. 对MQ网关增加了消息堆积量、消息处理延迟时间等特定指标的监控。

3. 在应用层面,增加了更多的日志埋点,特别是在与支付结算业务的相关微服务和MQ交互的关键节点,以便更快速地定位潜在问题。

随着这些措施的实施,系统性能开始逐步恢复,支付结算业务相关微服务的平均查询时间从原本的500ms降低到了150ms以下,MQ网关的消息处理成功率从85%提升到了99%以上。APP的整体交易成功率在处置措施实施后的2小时内逐渐回升到了95%,响应时间也恢复到了正常水平。

三、擎创建议

根据上述案例,擎创认为在一些特殊时期,系统的承载能力预估不足是导致此次事故的根本原因。因此,从整体来看需要:

1. 建立更加完善的容量规划模型

结合历史数据和机器学习算法,更准确地预测未来的业务增长和系统负载。

2. 优化系统的弹性伸缩机制,实现更快速、更智能的资源动态调配。

3.相关业务系统方面

1) 重构访问逻辑,将非实时查询需求转移到专门的数据仓库中,减轻主支付结算业务的相关微服务的压力。

2)引入分布式缓存系统(如Redis集群),缓存热点数据,减少对支付结算业务的相关微服务的直接访问。

3)实施数据分片策略,根据业务特性将历史数据分散到多个物理节点,提高并行处理能力。

4.MQ网管方面

1)升级MQ系统,选用更高性能、更强大的消息中间件。

2)优化消息路由策略,实现更智能的负载均衡。

3)建立消息处理的降级机制,在系统压力过大时能够自动启动轻量级处理模式。

5.监控和预警方面

1)引入更先进的AIOps平台,利用机器学习算法实现更精准的异常检测和根因分析。

2)建立端到端的全链路监控体系,实现从用户端到后台系统的全面可观测性。

3)优化告警策略,实现更精准的告警触发和自动化的事件关联分析。

6.应急响应机制方面

1)建立更完善的应急预案库,针对不同类型的故障制定详细的处置流程。

2)强化跨部门协作机制,提高应急响应的效率和协同性。

3)定期组织大规模的故障演练,提高团队的实战能力。

通过这次事故,可以看出在业务快速发展的金融科技时代,系统的稳定性和可扩展性至关重要。将每一次的事故经验转化为推动技术革新的动力,全面提升IT基础设施的现代化水平,为用户提供更加稳定、高效的金融服务,是当下金融行业的使命之一。

擎创正不断深入优化金融智能运维解决方案,希望能够与更多行业客户携手,打造数智化的运维平台,为业务运营保驾护航!

擎创科技,Gartner连续推荐的AIOps领域标杆供应商。公司专注于通过提升企业客户对运维数据的洞见能力,为运维降本增效,充分体现科技运维对业务运营的影响力。

 行业龙头客户的共同选择

了解更多运维干货与行业前沿动态

可以右上角一键关注

我们是深耕智能运维领域近十年的

连续多年获Gartner推荐的AIOps标杆供应商

下期我们不见不散~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1969927.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

volatile 关键字的两层语义

volatile 关键字的两层语义 1、可见性2、禁止指令重排序3、工作机制4、总结 💖The Begin💖点点关注,收藏不迷路💖 volatile 关键字在Java并发编程中扮演着重要角色,它主要用于保证变量的可见性和禁止指令重排序。 1、…

《最新出炉》系列初窥篇-Python+Playwright自动化测试-63 - Canvas和SVG元素定位

软件测试微信群:https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 1.简介 今天宏哥分享的在实际测试工作中很少遇到,比较生僻,如果突然遇到我们可能会脑大、懵逼,一时之间不知道怎么办?所以宏哥这里提供…

redis高持久化、RDB、AOF

redis高可用 redis当中,高可用概念会更宽泛一些。 除了正常服务以外,数据量的扩容,数据安全。 实现高可用的方式: 1、持久化 最简单的高可用方法 主要功能:备份数据 把内存的数据保存到硬盘当中。 2、主从复制 3、…

【CAN通讯系列8】如何准确接收数据?

在 【CAN通讯系列7】波特率是什么?已经介绍了CAN位时间和采样点等概念,每1位由同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2)四个段组成,这个也成为位时序,采样点位置处于PBS1和PBS2的交界处,如…

开源跨平台SQL编辑器:Beekeeper Studio

Beekeeper Studio: 简化SQL体验,提升数据库效率。- 精选真开源,释放新价值。 概览 Beekeeper Studio,一款为现代数据库管理而生的跨平台SQL客户端,以其简洁直观的界面和强大的功能,赢得了开发者和数据库管…

betterzip免费版 betterzip破解版 betterzip注册码密钥 betterzip解压缩软件下载安装教程

基于Mac开发的解压缩软件就那么几款,BetterZip解压缩软件估计是Mac上非常受欢迎的压缩工具。苹果Mac电脑上虽然有自带的归档实用工具,但是功能过于单一,对很多格式的压缩文件无能为力,特别像使用Windows电脑的朋友压缩文件习惯使用…

搜索型和XX型注入

"Pikachu"通常是指一个安全漏洞学习平台,它模拟了各种Web应用中的安全漏洞,以便于学习者实践和了解这些漏洞的工作原理。在这个平台上,你可以找到不同类型的SQL注入漏洞来练习和学习如何利用与防御它们。 搜索型注入(也…

同步交互与异步交互:深入解析与选择

同步交互与异步交互:深入解析与选择 1、同步交互2、异步交互3、选择策略 💖The Begin💖点点关注,收藏不迷路💖 在软件开发的世界里,交互方式主要分为两大类:同步与异步。下面是对这两种方式的解…

AGI思考探究过程中的意义、价值与乐趣Ⅲ

「融合RL与LLM思想,探寻世界模型以迈向AGI」这篇文章也探究了思维系统的两种推理模式:系统Ⅰ(快思考)和系统Ⅱ(慢思考)在推理过程的本质普遍性及表象差异性,以及尝试挖掘快慢思考是否与两类学习…

用于自动驾驶的基于立体视觉的语义 3D 对象和自我运动跟踪

Stereo Vision-based Semantic 3D Object and Ego-motion Tracking for Autonomous Driving 论文 摘要: 我们提出了一种基于立体视觉的方法,用于在动态自动驾驶场景中跟踪相机自我运动和 3D 语义对象。我们建议使用易于标记的 2D 检测和离散视点分类以及…

【SQL Server】网络通信基础

目录 网络通信基础 网络协议概述 TCP/IP 协议栈 端口和地址绑定 网络通信基础 网络协议概述 网络协议是一组规则和标准,定义了数据在网络中的传输方式。这些协议确保不同设备之间的通信顺畅且高效。网络协议分为多个层次,每个层次负责特定的任务。…

直播狂欢下的隐忧|专题报告集

原文链接:https://tecdat.cn/?p37200 从草根逆袭的烤摊主郭有才,仅用9天便突破千万粉丝,日入惊人的380万,到菏泽因直播热潮连夜紧急修路,这一切看似光鲜的背后,实则暗流涌动。 模仿“反诈老陈”、“保安…

Yearning-MYSQL 审计平台部署

目录 一. 环境准备 二. 部署安装 三. 基础使用 1.用户管理 2. 创建SQL审计流程 3. 自定义审核规则 4. 导入数据源 5. 创建权限组 6. 登录用户申请工单 1. 创建一个DDL工单提交 2. SQL审核执行 3. SQL执行 4. 数据验证 Yearning 是一个开源的 MySQL SQL 审计平台…

CTFHUB-文件上传-文件头检查

开启题目 1.php内容&#xff1a; <?php eval($_POST[cmd]);?> 截屏截一个很小很小的图片&#xff0c;保存为 png 格式&#xff0c;把 1.png 和 1.php 放在同一文件夹&#xff0c;在此目录打开 cmd&#xff0c; 使用以下命令把 1.png 和 1.php 合成为图片马 copy 1.pn…

内存池化技术详解:提升C++程序性能的关键

目录 一. 引言 内存池化技术的概念与重要性 内存池化在现代C开发中的应用 二. 内存池化的基本原理 内存池化的工作机制 常见的内存池实现策略 三. 最新的内存池化技术 C23标准中的新特性 第三方库的最新进展 jemalloc和tcmalloc的使用和改进 四. 内存池化在多线程环…

ThreadLocal:线程本地变量的作用与应用

ThreadLocal&#xff1a;线程本地变量的作用与应用 1、简介2、作用3、应用场景4、注意事项 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、简介 ThreadLocal 是Java中一个强大的工具类&#xff0c;用于创建线程局部变量。它为每个使用该…

Python教程(十):面向对象编程(OOP)

目录 专栏列表前言一、面向对象编程概述1.1 类和对象1.2 继承1.3 多态1.4 封装 二、Python 中的类和对象2.1 定义类2.2 __init__ 函数解释2.3 创建对象 三、继承3.1 基本继承3.2 创建子类对象 四、多态五、封装六. 访问限制七、综合实例结语 专栏列表 Python教程&#xff08;一…

MySQL~SQL语法

SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是用于管理和操作关系数据库管理系统&#xff08;RDBMS&#xff09;的标准化语言。 SQL 在标识符&#xff08;如表名、列名、函数名等&#xff09;的处理上通常是不区分大小写的&#xff0c;这…

如何手写一个SpringBoot框架

你好&#xff0c;我是柳岸花开。 在这篇文章中&#xff0c;我们将手写模拟SpringBoot的核心流程&#xff0c;让大家能够以一种简单的方式了解SpringBoot的大概工作原理。 项目结构 我们创建一个工程&#xff0c;包含两个模块&#xff1a; springboot模块&#xff0c;表示Spring…

Redis 有关列表的命令

List 也叫列表&#xff0c;一般用来操作和存储一组有顺序的数据&#xff1b; 索引与数组类似&#xff0c;从 0 开始&#xff1b; 1. 从列表头部添加 LPUSH 2. 获取列表内容 LRANGE LRANGE 键名称 起始位置 结束位置 注意&#xff1a; LPUSH 命令将添加的元素依次添加到列…