首页 > 其他 > 详细

消息队列使用场景分析

时间:2020-02-03 20:53:52      阅读:78      评论:0      收藏:0      [点我收藏+]

1. 异步处理

           可以更快地返回结果;减少等待时间,提升系统总体的性能。

    sp: 秒杀系统

  秒杀系统需要解决的核心问题是,如何利用有限的服务器资源,尽可多的处理短时间内的海量请求。处理一个秒杀请求包含很多的步骤,我们就用以下的步骤进行分析。

  风险控制=>库存锁定=>生成订单=>短信通知=>更新统计数据

如果没有任何优化,正常的处理流程是:App 将请求发送给网关,依次调用上述5个流程。然后结果返回给APP。

对于对于这 5 个步骤来说,能否决定秒杀成功,实际上只有风险控制和库存锁定两个步骤,对于后续的步骤,并不一定要在秒杀请求中处理完成。所以当前两个步骤完成后就可以马上给用户返回响应,然后把请求的数据放到消息队列中,由消息队列进行后续的操作。这样不仅响应速度更快,并且在秒杀期间还可以集中服务器资源处理秒杀请求。

2.削峰

要对流量进行削峰,最容易想到的解决方案就是用消息队列来缓冲瞬时流量,把同步的直接调用转换成异步的间接推送,中间通过一个队列在一端承接瞬时的流量洪峰,在另端平滑地将消息推送出去。

在这里,消息队列就像“水库”一样,拦蓄上游的洪水,削减进入下游河道的洪峰流量,从而达到减免洪水灾害的目的

这样就可以根据下游的处理能力自动调节流量,但是这样做也是有代价的。

  •  增加了系统调用链环节,导致总体的响应时延变长。
  • 上下游系统都要将同步调用改为异步消息,增加了系统大额复杂度。

3.服务解耦

场景说明:用户下单后,订单系统需要通知库存系统。传统的做法是,订单系统调用库存系统的接口。如下图

 技术分享图片

传统模式的缺点:

 

  • 假如库存系统无法访问,则订单减库存将失败,从而导致订单失败

 

  • 订单系统与库存系统耦合

引入消息队列后的方案,如下图:

 技术分享图片

  • 订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功

  • 库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作

  • 假如:在下单时库存系统不能正常使用。也不影响正常下单,因为下单后,订单系统写入消息队列就不再关心其他的后续操作了。实现订单系统与库存系统的应用解耦

 

消息队列使用场景分析

原文:https://www.cnblogs.com/jinyd/p/12256942.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!