01 | 为什么需要消息队列?

 

 对于对于这 5 个步骤来说,能否决定秒杀成功,实际上只有风险控制和库存锁定这 2 个步骤。只要用户的秒杀请求通过风险控制,并在服务端完成库存锁定,就可以给用户返回秒杀结果了,对于后续的生成订单、短信通知和更新统计数据等步骤,并不一定要在秒杀请求中处理完成。

 

 

 对于超时的请求可以直接丢弃,APP 将超时无响应的请求处理为秒杀失败即可。

 

 实现的方式也很简单,不需要破坏原有的调用链,只要网关在处理 APP 请求时增加一个获取令牌的逻辑。

令牌发生器按照预估的处理能力,匀速生产令牌并放入令牌队列(如果队列满了则丢弃令牌)

网关在收到请求时去令牌队列消费一个令牌,获取到令牌则继续调用后端秒杀服务,如果获取不到令牌则直接返回秒杀失败。

 

消息队列的另外一个作用,就是实现系统应用之间的解耦

消息队列最常被使用的三种场景:异步处理、流量控制和服务解耦

当然,消息队列的适用范围不仅仅局限于这些场景,还有包括:

作为发布 / 订阅系统实现一个微服务级系统间的观察者模式;

连接流计算任务和数据;

用于将消息广播给大量接收者。

同时我们也要认识到,消息队列也有它自身的一些问题和局限性,包括:

引入消息队列带来的延迟问题;

增加了系统的复杂度;

可能产生数据不一致的问题。 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2020-02-10 16:28  lakeslove  阅读(161)  评论(0编辑  收藏  举报