服务器高并发的时候mysql扣款失败

服务器高并发的时候mysql扣款失败,第1张

这类问题源自对某些高频账号,大量的并发访问而产生。

这会导致瓶颈首先出现在某些数据库记录上,大量 *** 作由于无法竞争到数据库的行锁而导致等待,这些等待中的 *** 作又会占用其他资源,最终导致系统不可用。

介绍一些常用的处理办法:

1、不设置余额字段。由于对于一个稳定的计费来说,一定是会记录计费流水明细的,所以完全可以不设置余额字段,而采用根据流水明细计算的方式来获取余额。

2、合并与拆分。合并,就是对单个账号的数次请求作合并处理,再往数据库写,这样就等于降低了数倍的压力。拆分,则是把一个主账号拆分成数个子账号,然后把请求分配到各个子账号上,这样单个账号的压力就小了。然后再用其他手段把子账号的数据合并成主账号数据,返回给用户,减少行锁占用时间。

为什么要讲订单id当成url参数,从前台传过来呢?你的订单页面。应该是固定的页面,id每次在页面中随机生成,页面要增加防止提交速度过快的机制,比如点击订单提交时,页面做遮罩,一直到订单处理完毕,后台业务逻辑全都执行完了,返回给前台,告诉前台页面执行结果,然后再取消遮罩,如果一次订单服务,需要更新多个表,最好用事物处理一下,提前将这些表都锁住(只锁住单行数据),一直到都处理完毕,在解开锁,给前台提示处理完毕。

现在看你的处理方法,订单id是从前台传过来的,用户完全可以用个ddos工具,反复模拟订单提交,别说百万毫秒了,一秒提交几十次你也受不了啊。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7351658.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存