并发冲突导致流量放大的线上问题解决

这篇具有很好参考价值的文章主要介绍了并发冲突导致流量放大的线上问题解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

事故现象

生产环境,转账相关请求失败量暴增。

直接原因

现网多个重试请求同时到达 svr,导致内存数据库大量返回时间戳冲突。业务方收到时间戳冲突,自动进行业务重试,服务内部也存在重试,导致流量放大。

转账

首先我们一起了解一下转账。转账请求在支付场景中的应用频率非常高,它是现代金融系统中的一个核心功能。在日常生活中,个人和企业都需要进行各种不同类型的转账:

个人间转账:朋友、家人之间进行的转账,如还款、借款、生日礼物赠送等。
工资支付:企业向员工支付工资、奖金等。
税费缴纳:向政府缴纳所得税、增值税等税费、政府退回多征收的税费等。
跨境汇款:向国外的个人或企业进行的转账,如国际贸易、留学生汇款等。
投资与理财:向股票、基金、保险等金融产品进行的投资转账。
退款与赔付:商家或金融机构向客户退还购物款项、保险理赔等。
...

随着移动支付、网上银行等数字金融服务的普及,转账请求在支付场景中的应用频率越来越高。人们可以随时随地进行转账,这背后离不开金融科技的发展带来的更加便捷、安全、高效的转账过程。

业务背景介绍

背景一:转账流程

转账常见流程

并发冲突导致流量放大的线上问题解决,性能测试,数据库,自动化测试,性能测试


转账异常处理

当支付渠道系统内部出现异常,比如给转入方转钱时遇到被调系统返回超时时:

1、系统自动重试: 在大多数情况下,支付渠道系统会在短时间内自动重试转账操作,以确保交易成功。通常,系统会在一定时间内尝试多次,直到转账成功或达到重试次数上限。

2、转账暂停: 如果系统在多次重试后仍然无法完成转账,支付渠道可能会暂停该笔转账。在这种情况下,会通知转出方关于转账暂停的原因,并可能建议转出方稍后再次尝试转账。

3、** 资金退回:** 如果系统在尝试一定次数后仍无法完成转账,支付渠道可能会将资金退回到转出方的账户。转出方可以选择在支付渠道系统恢复正常后重新发起转账。

4、客户通知: 在上述情况下,银行会通过短信、电话或电子邮件等方式通知转出方关于转账失败的原因。客户可以根据银行的建议采取相应措施。

5、……

总之,渠道会尽力确保交易的顺利进行。

转账异常处理流程图

并发冲突导致流量放大的线上问题解决,性能测试,数据库,自动化测试,性能测试

背景二:账户系统合并

因为公司账户系统存在多套,同一个服务商在不同的业务都存在商业合作时,账户归属不同的系统。降本增效大背景下,相关业务完成了业务账户的融合,将同一个商户在两个系统上的商户信息进行整合,融合到同一个账户,方便客户更好的维护,也方便客户账户资金共享,保证业务不中断。

改造后上层调用方会传递迁移前后两套 uin 的参数来进行调用,账户系统通过查询 uin 的映射关系和关系中的迁移状态判断实际操作的账户。

即两个不同入口的请求都需要先查询一次迁移关系,如果账户已经迁移,则使用迁移后的账户进行操作,这个逻辑同时适用于转出方 和 转入方, 所以流程图上加上了查询关系的逻辑 蓝色部分。

如果操作过程中,账户状态发生了变化,则内部进行重试。

并发冲突导致流量放大的线上问题解决,性能测试,数据库,自动化测试,性能测试

实际全流程:

并发冲突导致流量放大的线上问题解决,性能测试,数据库,自动化测试,性能测试

背景三:扣内存数据库逻辑

为了支持高并发的需求,账户系统使用的是一个自研的缓存数据库,数据库内部有诸多逻辑,其中操作账户时,会先 get 数据,再 set 数据, get 的时候会拿到当前数据的的时间戳 和更新序列号,set 的时候,数据库会校验这个时间戳的合法性。

所以在请求出现并发时会出现这样的情况:

并发冲突导致流量放大的线上问题解决,性能测试,数据库,自动化测试,性能测试

背景四:调用方重试逻辑

调用方除非遇到订单重复、余额不足等明确错误,不然会推送 MQ 进行重试。

问题定位

相信大家看完上面的背景和前面的现象描述已经知道了问题的原因:业务的重试和系统内部的重试逻辑出现了重叠,导致了绝对并发(内存数据库的getset逻辑极快),但是因为涉及到多个系统,每次请求的 uuid 又完全一致,导致了定位链路过长,定位难度增大。最后在测试环境复现了很多次才复现出来。

总结

针对这个问题给我总结了以下几点:

测试环境和生产环境的差异:测试环境很难完全模拟生产环境的各种情况,特别是在并发、性能和压力测试方面。因此,我们需要更加关注这些方面的测试,并尽量使测试环境接近生产环境。

完善的测试用例:在设计测试用例时,需要考虑各种异常情况和边缘条件,包括系统之间的相互调用、失败重试等情况。这样可以提高测试的覆盖率,降低类似问题的发生概率。

强化并发和压力测试:在软件测试过程中,应该重点关注并发和压力测试,模拟大量用户同时访问和操作,以便发现潜在的性能瓶颈和冲突问题。(常态化性能测试是一个非常好的切入点。后续会专门写一篇博客介绍如何进行常态化性能压测。)

监控和日志分析:在生产环境中,应该加强对系统的监控和日志分析,以便及时发现并定位问题。同时,测试人员可以通过分析生产环境的监控和日志数据,了解系统在实际运行中的表现,从而改进测试策略。

以下是一些避免类似问题的发生的改进措施:

  • 测试同学需要与开发团队紧密合作,了解系统架构和相互调用的关系,以便更好地设计测试用例。
  • 在系统设计和开发阶段,可以引入容错和熔断机制,以应对失败重试和请求放大等问题。测试工程师需要关注这些机制的实现,并在测试中验证其有效性。
  • 在测试计划中明确测试范围,包括并发测试、压力测试和性能测试,确保测试环境尽量接近生产环境,有条件的可以使用真实的数据和场景进行测试(现网引流)。
  • 对于失败重试等可能会放大流量的逻辑,进行专项测试,模拟各种异常和故障情况(后续会专门写一篇博客介绍如何进行混沌注入),验证系统的稳定性和健壮性。

文中可能存在描述不正确,欢迎大神们指正补充!

实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

并发冲突导致流量放大的线上问题解决,性能测试,数据库,自动化测试,性能测试并发冲突导致流量放大的线上问题解决,性能测试,数据库,自动化测试,性能测试

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

测试开发视频教程、学习笔记领取传送门!!!
并发冲突导致流量放大的线上问题解决,性能测试,数据库,自动化测试,性能测试文章来源地址https://www.toymoban.com/news/detail-644932.html

到了这里,关于并发冲突导致流量放大的线上问题解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决在使用 Elasticsearch(ES)多线程批量操作时导致并发一致性的问题!!

    先说一下什么是数据库数据库中 并发一致性 问题! 1、在并发环境下,事务的隔离性很难保证,因此会出现很多并发一致性问题。 数据丢失 T1 和 T2 两个事务都对一个数据进行修改,T1 先修改,T2 随后修改,T2 的修改覆盖了 T1 的修改。 读脏数据 T1 修改一个数据,T2 随后读取

    2024年02月04日
    浏览(42)
  • Java基于SpringBoot的线上考试系统

    基于 SpringBoot 的在线考试系统网站,功能模块具有课程管理、成绩管理、教师管理、学生管理、考试管理以及基本信息的管理等,通过将系统分为管理员、授课教师以及学生,从不同的身份角度来对用户提供便利,将科技与教学模式结合所带来的优势更加普遍化,不断得到发

    2024年02月06日
    浏览(30)
  • 串口和鼠标冲突,导致鼠标异常问题

            工业电脑上使用串口设备通讯时,发现鼠标移动异常(不受控制),原因是Windows将串口设备误认为鼠标,电脑串口在启动时但串口软件还没启动,串口数据大量的涌向PC,导致PC通过“sermouse.sys”将串口识别为USB驱动从而与USB触摸驱动冲突使得的鼠标移动异常(不受

    2024年02月11日
    浏览(31)
  • 基于springboot+vue的线上教育系统(源码+论文)

    目录 前言 一、功能设计 二、功能实现 三、库表设计 四、论文         现在大家的生活方式正在被计算机的发展慢慢改变着,学习方式也逐渐由书本走向荧幕,我认为这并不是不能避免的,但说实话,现在的生活方式与以往相比有太大的改变,人们的娱乐方式不仅仅再是吃完

    2024年03月13日
    浏览(36)
  • 基于ssm的线上旅游体验系统+vue论文

    目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3.1.3 经济可行性 5 3.1.4 法律可行性 5 3.2 系统

    2024年01月16日
    浏览(43)
  • springboot基于微信小程序的线上租房平台小程序

    一、项目介绍 对于本线上租房平台小程序的设计来说,它主要是采用后台采用java语言、springboot框架,它是应用mysql数据库、微信小程序等技术动态编程以及数据库进行努力学习和大量实践,并运用到了微信小程序的建设中在整个系统的设计当中,具体根据网上线上租房平台

    2024年02月01日
    浏览(37)
  • springboot引入minio导致的okhttp、kotlin的版本冲突问题

    问题背景 项目中需要引入minio,添加了如下依赖 结果运行报错: 解决过程 1. 看到 Unsupported OkHttp library found. Must use okhttp = 4.8.1 ,以为是之前引入的okhttp的版本太低,于是将   okhttp  升到   4.8.1  ,还是报同样错误 2. 上网查了一下,说需要在minio的依赖中排除okhttp依赖,再引

    2024年04月26日
    浏览(23)
  • Elasticsearch并发写入版本冲突解决方案

    搜索公众号, AmCoder 干货及时送达👇  众所周知,es经常被用于存储日志数据,其中在某些场景下,日志产生的时机不同,并且需要将多类具备关联关系的日志写入同一个document,就会带来同一个文档可能会被其它文档覆盖,或者missing等问题。 大家都知道es是不支持事务的,

    2023年04月19日
    浏览(41)
  • ip地址冲突导致ping时通时断显示超时问题处理过程

    目录 1 现象     2 Ping的过程:    3 可能的原因: 4 排查过程 类似问题:ip冲突问题解决和复现过程_wj31932的博客-CSDN博客 无法上网故障排查过程及复现过程系ip冲突造成_wj31932的博客-CSDN博客_arp获取不到网关mac地址        一天,同事反馈他的pc出现ping外网时通时断,一会

    2024年01月21日
    浏览(35)
  • nodejs前端项目部署到k8s,导致线上故障的排查与解决方法

    因我们的前后端项目都部署在k8s集群中,前端项目采用npm和node管理 事故背景: 某天前端同事在测试环境更新完一个前端服务后,访问正常,然后按照正常流程上线到生产环境,但是,在生产环境更新完成后,测试同事反馈访问报502错误,我就去服务器排查刚才发布的服务,检查pod状态

    2024年02月02日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包