MQ架构设计原理

MQ架构设计原理

什么是消息中间件

消息中间件基于队列模型实现异步/同步传输数据

作用:可以实现支撑高并发、异步解耦、流量削峰、降低耦合度。

传统的http请求存在那些缺点

1.Http请求基于请求与响应的模型,在高并发的情况下,客户端发送大量的请求达到

服务器端有可能会导致我们服务器端处理请求堆积。

2.Tomcat服务器处理每个请求都有自己独立的线程,如果超过最大线程数会将该请求缓存到队列中,如果请求堆积过多的情况下,有可能会导致tomcat服务器崩溃的问题。

所以一般都会在nginx入口实现限流,整合服务保护框架。

 

 

3.http请求处理业务逻辑如果比较耗时的情况下,容易造成客户端一直等待,阻塞等待

过程中会导致客户端超时发生重试策略,有可能会引发幂等性问题。

 

注意事项:接口是为http协议的情况下,最好不要处理比较耗时的业务逻辑,耗时的业务逻辑应该单独交给多线程或者是mq处理。

 

Mq应用场景有那些

  1. 异步发送短信
  2. 异步发送新人优惠券
  3. 处理一些比较耗时的操作

同步发送http请求

 

 

 

客户端发送请求到达服务器端,服务器端实现会员注册业务逻辑,

1.insertMember() --插入会员数据  1s

2.sendSms()----发送登陆短信提醒 3s

3.sendCoupons()----发送新人优惠券  3s

总共响应需要6s时间,可能会导致客户端阻塞6s时间,对用户体验不是很好。

 

多线程与MQ方式实现异步?

多线程处理业务逻辑

 

 

 

用户向数据库中插入一条数据之后,在单独开启一个线程异步发送短信和优惠操作。

客户端只需要等待1s时间

优点:适合于小项目 实现异步

缺点:有可能会消耗服务器cpu资源资源

Mq处理业务逻辑

 

先向数据库中插入一条会员数据,让后再向MQ中投递一个消息,MQ服务器端在将消息推送给消费者异步解耦处理发送短信和优惠券。

Mq与多线程之间区别

MQ可以实现异步/解耦/流量削峰问题;

多线程也可以实现异步,但是消耗到cpu资源,没有实现解耦。

Mq消息中间件名词

Producer 生产者:投递消息到MQ服务器端;

Consumer  消费者:从MQ服务器端获取消息处理业务逻辑;

Broker   MQ服务器端

Topic 主题:分类业务逻辑发送短信主题、发送优惠券主题

Queue 存放消息模型 队列 先进先出 后进后出原则 数组/链表

Message 生产者投递消息报文:json

主流mq区别对比

 

特性

ActiveMQ

RabbitMQ

RocketMQ

kafka

开发语言

java

erlang

java

scala

单机吞吐量

万级

万级

10万级

10万级

时效性

ms级

us级

ms级

ms级以内

可用性

高(主从架构)

高(主从架构)

非常高(分布式架构)

非常高(分布式架构)

功能特性

成熟的产品,在很多公司得到应用;有较多的文档;各种协议支持较好

基于erlang开发,所以并发能力很强,性能极其好,延时很低管理界面较丰富

MQ功能比较完备,扩展性佳

只支持主要的MQ功能,像一些消息查询,消息回溯等功能没有提供,毕竟是为大数据准备的,在大数据领域应用广。

posted @ 2022-01-18 18:11  AmourLee  阅读(296)  评论(0编辑  收藏  举报