还记得上次的文章提到技术经理离职了,目前为止,我在代理技术经理的工作,包括评审,周会等,最头疼的是要面对老板开周会,自己一个人面对需求的评审,技术设计,发版,解决方案,线上问题排查,疑难问题解决方案设计,这让我应接不暇。
人虽然走了,bug倒给我留了两个,咱也不是没见过大世面的人,虽说不是大厂boy,但也是经历过用户高峰和紧急攻坚的人,什么名场面没见过,但走之前给我留两个bug这事,我是真没想到。
蜜汁bug之偶发丢数据
最初发现丢数据是在6月初应该是,偶发性的会有几条数据丢失,一开始不是很多,经历多次日志查找以及业务复盘后,还是没有找到,就手动修复了几条数据,但是近期经过多次数据同步以及切仓后,出现率增高,之所以没有花心思去找实在是因为需求近排期重,没有时间,经过短暂修整,花了2天时间进行日志排查和逻辑猜测,终于初有眉目,在一个定时任务中调用了数据删除操作,但是没有区分是否是定时调用,导致日志打印没有区分,明明每日凌晨执行的定时任务却在早上6,7点等业务高峰期进行了数据删除操作, 经过测试猜测后又进行排除,因为定时任务执行时间不符,但真相只有一个,在进行数据删除的时候,没有进行条件的判断,进行了只要是某个条件就进行删除的逻辑,之所以没有复现是因为过往逻辑没做控制,bug总算找到,主流程走完后不在出现。
网络抖动产生的重复提交
本以为丢数据的问题解决就可以暂时摸摸鱼歇一歇了,但是数据中心找过来,我们业务数据存在大量重复数据,导致他们数据清洗的时候无法进行费用结算,一开始就想自己不会去重???跟我有毛关系,但是想归想,因为重复数据还是要在业务上解决的 ,重复数据首先想到要不要做幂等,是因为并发还是数据不一致造成的,经过多次复现后,还是因为网络抖动发生的短时间内的重复提交,和模拟并发造成的,解决方案一是做乐观锁,二是做redis分布式锁,由于业务涉及数据量较大,不适合频繁数据库查库操作,每次比对可能还是会对主表造成等待超时,因为业务上的并发,决定用redis来控制,参考监控数据来控制过期时间,单次请求最快为4S,最慢为6秒,但是考虑到存在下游业务调用以及多单处理,将超时时间定位1分钟,经过短暂的模拟和测试后,暂定此方案通过。
我就不信作为技术经理不会对此事进行复盘和业务场景复现,存在业务数据丢失重复的场景时,只修数据不找原因,这绝对不是第一解决方案,回头想来,怕不是欺负我新来业务不熟悉,能改的bug就不改了,但没想到,菜鸡也有春天,也能在压迫中让我找到bug并改正,并大肆宣扬,让我立了功,只能说如果你的工作我能轻松代替,我只是业务暂时不熟悉,回头想想那些所作所为,功能全放我身上,有事我处理,原来是因为要跑路了?无所谓了已经,自己能做到的就是让自己更轻松,业务更熟练即可。
网络抖动是一种常见的互联网问题,其对重复提交造成的影响不可忽视。本文旨在通过分析网络抖动产生的重复提交问题,探讨其对互联网应用和系统的影响,并提出一些解决方案来减少或避免重复提交。
引言
网络抖动是指在互联网传输过程中,数据包在网络中传输时出现的不稳定现象。它可能由网络拥堵、传输距离远、网络故障等多种原因引起,这会导致数据包的延迟、丢失和重新排序等问题。在互联网应用中,网络抖动可能引发用户重复提交操作,给系统带来额外的负荷并影响用户体验。网络抖动对重复提交的影响
2.1 增加服务器负荷
网络抖动可能导致客户端误认为请求未成功,从而多次发送请求到服务器。这样一来,服务器需要处理多个重复请求,增加了服务器的负荷。如果网络抖动严重,服务器可能会陷入处理请求的死循环中,导致系统崩溃。
2.2 数据一致性问题
在涉及到写操作的互联网应用中,网络抖动可能导致重复提交的数据不一致。比如,在在线支付系统中,用户多次点击支付按钮可能导致重复扣款。这会给用户和商家带来混淆和不便。
2.3 用户体验下降
网络抖动引发重复提交会增加用户等待时间,降低用户体验。尤其是在需要用户等待服务器响应的场景下,如文件上传、在线游戏等,用户可能会因为连续多次点击而导致等待时间的延长,进而产生不满和流失。
- 解决方案
3.1 幂等性设计
通过在互联网应用中引入幂等性设计,可以有效避免重复提交带来的问题。幂等性是指对同一个操作的多次执行所产生的影响与一次执行的影响相同。通过在服务端为每一次请求生成唯一标识符,并在处理请求时校验这个标识符,可以避免重复提交的操作被多次执行。
3.2 前端防抖动
在前端页面的设计中,可以通过引入防抖动机制来减少用户的误操作。通过设置合理的时间间隔,在用户操作后的一段时间内忽略重复的操作请求,从而避免触发重复提交。
3.3 提示机制
互联网应用可以在用户进行操作时给出相应的提示,告知用户避免重复提交。例如,在用户提交订单后,页面可以显示一个加载动画,同时给出文字提示“订单信息正在处理中,请勿重复提交”,从而引导用户等待并避免重复操作。
3.4 后台请求的幂等性处理
在服务端接收到请求后,可以进行幂等性处理。通过记录已经处理的请求信息,对于重复提交的请求,服务器可以进行去重操作,以避免重复执行相同的任务。
3.5 事务和锁机制
对于涉及到写操作的互联网应用,可以通过引入事务和锁机制来保证数据的一致性。在第一次接收到请求时开启事务,执行相应的写操作,并且将数据的状态锁定。这样,在接收到重复提交的请求时,服务端可以通过锁机制判断数据是否已经处理完成,从而避免重复执行写操作。
- 结论
网络抖动对重复提交造成的影响是不可忽视的,对互联网应用的性能和用户体验有着直接的影响。通过合理的设计和技术手段,可以降低网络抖动带来的重复提交问题。在未来,我们还需要在网络架构和优化方面进一步研究,以提供更好的解决方案来应对网络抖动。