这会导致瓶颈首先出现在某些数据库记录上,大量 *** 作由于无法竞争到数据库的行锁而导致等待,这些等待中的 *** 作又会占用其他资源,最终导致系统不可用。
介绍一些常用的处理办法:
1、不设置余额字段。由于对于一个稳定的计费来说,一定是会记录计费流水明细的,所以完全可以不设置余额字段,而采用根据流水明细计算的方式来获取余额。
2、合并与拆分。合并,就是对单个账号的数次请求作合并处理,再往数据库写,这样就等于降低了数倍的压力。拆分,则是把一个主账号拆分成数个子账号,然后把请求分配到各个子账号上,这样单个账号的压力就小了。然后再用其他手段把子账号的数据合并成主账号数据,返回给用户,减少行锁占用时间。
为什么要讲订单id当成url参数,从前台传过来呢?你的订单页面。应该是固定的页面,id每次在页面中随机生成,页面要增加防止提交速度过快的机制,比如点击订单提交时,页面做遮罩,一直到订单处理完毕,后台业务逻辑全都执行完了,返回给前台,告诉前台页面执行结果,然后再取消遮罩,如果一次订单服务,需要更新多个表,最好用事物处理一下,提前将这些表都锁住(只锁住单行数据),一直到都处理完毕,在解开锁,给前台提示处理完毕。现在看你的处理方法,订单id是从前台传过来的,用户完全可以用个ddos工具,反复模拟订单提交,别说百万毫秒了,一秒提交几十次你也受不了啊。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)