1. 异步处理
可以更快地返回结果;减少等待时间,提升系统总体的性能。
sp: 秒杀系统
秒杀系统需要解决的核心问题是,如何利用有限的服务器资源,尽可多的处理短时间内的海量请求。处理一个秒杀请求包含很多的步骤,我们就用以下的步骤进行分析。
风险控制=>库存锁定=>生成订单=>短信通知=>更新统计数据
如果没有任何优化,正常的处理流程是:App 将请求发送给网关,依次调用上述5个流程。然后结果返回给APP。
对于对于这 5 个步骤来说,能否决定秒杀成功,实际上只有风险控制和库存锁定两个步骤,对于后续的步骤,并不一定要在秒杀请求中处理完成。所以当前两个步骤完成后就可以马上给用户返回响应,然后把请求的数据放到消息队列中,由消息队列进行后续的操作。这样不仅响应速度更快,并且在秒杀期间还可以集中服务器资源处理秒杀请求。
2.削峰
要对流量进行削峰,最容易想到的解决方案就是用消息队列来缓冲瞬时流量,把同步的直接调用转换成异步的间接推送,中间通过一个队列在一端承接瞬时的流量洪峰,在另端平滑地将消息推送出去。
在这里,消息队列就像“水库”一样,拦蓄上游的洪水,削减进入下游河道的洪峰流量,从而达到减免洪水灾害的目的
这样就可以根据下游的处理能力自动调节流量,但是这样做也是有代价的。
3.服务解耦
场景说明:用户下单后,订单系统需要通知库存系统。传统的做法是,订单系统调用库存系统的接口。如下图
传统模式的缺点:
订单系统与库存系统耦合
引入消息队列后的方案,如下图:
订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功
库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作
假如:在下单时库存系统不能正常使用。也不影响正常下单,因为下单后,订单系统写入消息队列就不再关心其他的后续操作了。实现订单系统与库存系统的应用解耦
原文:https://www.cnblogs.com/jinyd/p/12256942.html