秒杀的流程
笔者做过很多业务,oms oa cms crm 金融业务 电商业务 ,,,结果发现最有挑战性的其实也就是 电商的秒杀业务,
任何处理技术,都是为了业务服务,没有最好,只有最适合而已,利用已有或者已知的技术,能够支撑现有的业务,那么就是合适的,就是合格的技术人员
概述
1.整个秒杀,无非就是先在 redis上做库存的减少,然后定时任务刷进真正的库存表中,
前端会在下单的时候,一直轮询下单是否成功的接口,下单之后的操作全部是异步的,各种原子操作也全部就是异步的,
原子操作完成后,会集体修改 Redis中下单时,设置的某一个 key 的值,当有任意的一个原子操作失败,那么将不会下单成功,
同时每个原子操作 必须提供回滚逻辑,
注意你要明确一点:秒杀 高并发的意思就是 : 肯定有一部分人就是要买不到商品,就是有一部分要失败,所以 程序里面超时,异常也是没事的,只要快速的提醒用户就行,
2.通过耗时排查发现高并发时瓶颈点主要集中在:
1.锁表
a.问题:高并发时,事务内修改同一SKU库存时,锁表造成整个事务等待耗时
b.方案:将减库存移至事务外部,先行扣除,如过事务失败再追加回来
2.事务锁
a.问题:订单队列改用分布式后,对用户加了事务锁,对同一用户压测时造成事务锁住产生竞争、等待耗时,无法充分发挥分布式优势
b.方案:压测时用户越多,越接近真实情况,改成对50个用户压测方案性能,避免大量事务锁等待
3.将可移异步处理的事务改成MQ


订单处理

具体细则

原子操作


2644

被折叠的 条评论
为什么被折叠?



