首页 > 其他分享 >MQ的使用场景

MQ的使用场景

时间:2023-02-28 10:11:43浏览次数:36  
标签:场景 队列 写入 MQ 消息 下单 使用 日志 客户端

1. 异步处理

场景说明:用户注册后,需要发注册邮件和注册短信。传统的做法有串行的方式和并行方式两种。

  1. 串行方式

将注册信息写入数据库成功后,发送注册邮件,再发送注册短信。以上三个任务全部完成后,返回给客户端。 

  1. 并行方式

将注册信息写入数据库成功后,发送注册邮件的同时,发送注册短信。以上三个任务完成后,返回给客户端。与串行的差别是,并行的方式可以提高处理的时间。 

 

假设三个业务节点每个使用50毫秒钟,不考虑网络等其他开销,则串行方式的时间是150毫秒,并行的时间可能是100毫秒。因为CPU在单位时间内处理的请求数是一定的,假设CPU1秒内吞吐量是100次。则串行方式1秒内CPU可处理的请求量是7次(1000/150)。并行方式处理的请求量是10次(1000/100)。

小结:如以上案例描述,传统的方式系统的性能(并发量,吞吐量,响应时间)会有瓶颈。如何解决这个问题呢?
引入消息队列,将不是必须的业务逻辑,异步处理。改造后的架构如下:

 

 

 

按照以上约定,用户的响应时间相当于是注册信息写入数据库的时间,也就是50毫秒。注册邮件,发送短信写入消息队列后,直接返回,因此写入消息队列的速度很快,基本可以忽略,因此用户的响应时间可能是50毫秒。因此架构改变后,系统的吞吐量提高到每秒20 QPS。比串行提高了3倍,比并行提高了两倍。

2. 应用解耦

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

 

传统模式的缺点:

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

如何解决以上问题呢?引入应用消息队列后的方案,如下图: 

 

 

 

订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功。
库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作。

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

3. 流量削锋

流量削锋也是消息队列中的常用场景,一般在秒杀或团抢活动中使用广泛。如,秒杀活动中,一般会因为流量过大,导致流量暴增,应用挂掉。

为解决这个问题,一般需要在应用前端加入消息队列。这样以来可以控制活动的人数,可以缓解短时间内高流量压垮应用。

 

用户的请求,服务器接收后,首先写入消息队列。假如消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错误页面;秒杀业务根据消息队列中的请求信息,再做后续处理。

 

 

4. 日志处理

日志处理是指将消息队列用在日志处理中,比如Kafka的应用,解决大量日志传输的问题。架构简化如下:

日志采集客户端,负责日志数据采集,定时写受写入Kafka队列; 
Kafka消息队列,负责日志数据的接收,存储和转发; 
日志处理应用:订阅并消费kafka队列中的日志数据;

以下是新浪kafka日志处理应用案例:《新浪技术分享:我们如何扛下32亿条实时日志的分析处理 

 

Kafka:接收用户日志的消息队列。
Logstash:做日志解析,统一成JSON输出给Elasticsearch。
Elasticsearch:实时日志分析服务的核心技术,一个schemaless,实时的数据存储服务,通过index组织数据,兼具强大的搜索和统计功能。
Kibana:基于Elasticsearch的数据可视化组件,超强的数据可视化能力是众多公司选择ELK stack的重要原因。

5. 消息通讯

 

消息通讯是指,消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯。比如实现点对点消息队列,或者聊天室等。

点对点通讯:

 

 

客户端A和客户端B使用同一队列,进行消息通讯。

聊天室通讯:

 

 客户端A,客户端B,客户端N订阅同一主题,进行消息发布和接收。实现类似聊天室效果。


————————————————
版权声明:本文为CSDN博主「staybug」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43994338/article/details/105883473

 

标签:场景,队列,写入,MQ,消息,下单,使用,日志,客户端
From: https://www.cnblogs.com/yyd-sun/p/17162965.html

相关文章

  • excel使用笔记
    excel在办公中必不可少,熟练使用对工作帮助很大。文章目录​​打开多个excel文档慢​​​​选择​​​​选择整个范围​​​​选取有数据的整个范围​​​​选中到底部​​​......
  • linux命令的使用
    文章目录​​查看文件的实际路径​​​​mkdir已存在目录会覆盖么​​​​linux常用的颜色​​​​文件名有特殊符号的时候​​记录一些不好分类的命令查看文件的实际路......
  • java使用gzip压缩和解压
    代码如下:publicclassGZipUtils{publicstaticfinalintBUFFER=1024;publicstaticfinalStringEXT=".gz";publicstaticvoidmain(String[]args)......
  • java使用commons-lang3
    pom.xml中添加<!--https://mvnrepository.com/artifact/org.apache.commons/commons-lang3--><dependency><groupId>org.apache.commons</groupId><artifactId>co......
  • java8 flatmap的使用
    Useruser=newUser(“[email protected]”,“1234”);user.setPosition(“Developer”);Stringposition=Optional.ofNullable(user).flatMap(u->u.getPosition()).......
  • java使用nio多线程读文件
    模拟多线程nio读取文件,并输出,output方法自己补一下。ReadFile代码:publicclassReadFileextendsObservable{privateintbufSize=1024;//换行符privateb......
  • potplayer的使用
    某个片段很精彩,我想多看几遍区间[区间开始]区间结束\取消区间快进卡顿怎么办播放不卡,快进卡。跟视频有关系,有的视频卡有的视频不卡。有可能是视频的快进时间和帧不完......
  • win7文件名不能使用哪些符号
    文件名不能使用哪些字符:#不能使用的字符如下/\*?|<>":#原因/\是路径符*?|是通配符<>从...导入,导入到的符号:冒号用于指定盘符......
  • ps(photoshop)使用笔记
    有的时候需要p个图,请别人帮忙太费事。自己动手,丰衣足食。内容有点多,表并没有含义,就是为了划分下,要不一个表太多行。文章目录​​表1​​​​表2​​​​表3​​​​表4​......
  • linux定时任务crontab的使用
    文章目录​​linux​​​​crontab参数列表​​​​crontab-e和vim/etc/crontab的区别​​​​编辑完定时任务重启什么吗​​​​定时任务是否生效,查看日志​​​​定时......