1. 写在前头
大家好,我是方圆
。这篇到了异步实现削峰,对应代码分支是increae_mq
,借助的MQ我选择的是Kafka,没什么道理,只是想学习、应用一下,当然大家自己也可以嵌入自己喜欢的MQ。
它的流程图如下
用户下单时会先对下单许可进行扣减,扣减成功后,Kafka提交下单任务,之后异步执行下单操作,至于秒杀结果则由用户去订单中查看。
下单许可是对异步下单的一次优化,许可生成的数量是在库存数量的基础上乘以一个比例系数,比如我们的库存量是100,系数为1.5,那么将生成150个下单许可,最多将有150个用户的请求真正的能在异步下单中被处理,它能避免将过多的无效请求全部丢进消息队列中,减少了计算资源浪费。
另外为什么要异步实现削峰,为了应对瞬时的压力,将部分请求写入消息队列,再由具体的下单操作进行处理,整体的处理时间被拉长,异步处理不需要等待消费端的响应,直接返回结果,吞吐量提高,而且也实现了消费者和生产者的解耦。消费端对消息进行消费时,完全