为什么要用MQ

为什么要用MQ

MQ的作用

首先在问为什么要用MQ的时候,其实就是在问MQ的作用

  • 异步:对于数据量大或者处理耗时长的操作,我们可以引入MQ 实现异步通信,减少客户端的等待,提升响应速度。
  • 解耦:对于改动影响大的系统之间,可以引入MQ 实现解耦,减少系统之间的直接依赖。
  • 削峰:对于会出现瞬间的流量峰值的系统,我们可以引入MQ 实现流量削峰,达到保护应用和数据库的目的

异步

同步:同步就是顺序执行,执行完在执行下一个,需要进行排队。

异步:异步就是彼此独立的,在等待某事件的过程中继续做自己的事,不需要等待这一事件完成后再工作。

实例

假设有以下这样的业务场景

如果采用传统模式,业务逻辑如下图:

整个业务逻辑均要走一篇,等待的时间太长。实际上短信,email这些业务并不会影响交易的状态,可以在支付成功后做异步处理,降低等待时间。这就得借助 消息中间件 来时间,加入 消息中间件 后的架构如下图示:

如上图调整架构,这样当订单支付成功后,发一个消息到 消息中间件,通知 积分,推送app,短信,email 这些服务去完成自己身的服务。 通过消息中间件,将部分同步服务转换为异步服务,降低了交易耗时,提高了用户体验。

解耦

场景:多个服务需要调用同一个服务时,使用消息队列做中转,实现解耦的作用,比如库存服务,优惠劵服务,都需要调用订单服务的时候,在中间使用消息队列来实现解耦。

削峰

至于流量削锋,比如线上的双十一秒杀,或者春节火车票抢购,会有大量的请求同时进来。这是服务承受的压力是平时的几十甚至上百倍,超过系统的最大出力能力,如果不能很好的处理这些流量,容易造成数据库的崩溃,导致服务不可用。 而如果加入 消息中间件 后,则能较好的处理这问题,方法如下: 将流量统一发送到 消息中间件 中业务系统根据自身的处理能力,异步均速处理消息,这样可以防止流量洪峰造成系统服务崩溃

场景

应用系统如果遇到系统请求流量的瞬间猛增,有可能会将系统压垮,可以使用消息队列将大量请求缓存起来,分散到很长一段时间来处理,这个可以大大提高系统的稳定性和用户体验。

相关推荐
阿丰资源4 小时前
基于SpringBoot的在线视频教育平台的设计与实现(附源码+数据库+文档,一键运行)
数据库·spring boot·后端
IT_陈寒4 小时前
我竟然被JavaScript的隐式类型转换坑了三天!
前端·人工智能·后端
Reart4 小时前
从0解构tinyWeb项目--(Day:9)
后端·架构·github
小码哥_常4 小时前
Java后端定时任务“三剑客”大比拼,选对不选贵!
后端
oldking呐呐4 小时前
MySQL从入门到入土 -- 2.数据库基础
后端·mysql
用户860821135654 小时前
从JVM到Spring Boot:一文搞懂胖Jar中的类加载机制
后端
小兵张健4 小时前
30天减20斤挑战:少一斤发100红包(2)
后端·程序员·全栈
汤姆Tom4 小时前
从 0 到 1 开发项目?你是否也是这样开始?先有再优化一步一步带你了解架构设计
前端·后端·架构
muskk8 小时前
一个文件,9万星:Karpathy 用 4 条规则治好了 AI 写代码的"坏毛病"
前端·后端
xlecho9 小时前
从单一语言到全域全栈,AI凭全能实力,淘汰旧时代语言工程师
人工智能·后端·开源