消息中间件MQ

1.消息队列回顾

消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构

在这里插入图片描述

1.目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ

2.消息中间件到底该如何使用,何时使用这是一个问题,胡乱地使用消息中间件增加了系统的复杂度,如果用不好消息中间件还不如不用

3.消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成,通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信,对于消息中间件,常见的角色大致也就有Producer(生产者)、Consumer(消费者)。

2.消息队列特点有哪些

1.先进先出:先进先出是队列的一个特性。不能先进先出,都不能说是队列了,消息队列的顺序在入队的时候就基本已经确定了,一般是不需人工干预的,而且,最重要的是,数据是只有一条数据在使用中, 这也是MQ在诸多场景被使用的原因

在这里插入图片描述
2.订阅:一般是MQ的广播模式,类似于java的观察者模式。发布订阅是一种很高效的处理方式,如果不发生阻塞,基本可以当做是同步操作,这种处理方式能非常有效的提升服务器利用率,这样的应用场景非常广泛

在这里插入图片描述
3.持久化:持久化确保MQ的使用不只是一个部分场景的辅助工具,而是让MQ能像数据库一样存储核心的数据
在这里插入图片描述

4.分布式:在现在大流量、大数据的使用场景下,只支持单体应用的服务器软件基本是无法使用的,支持分布式的部署,才能被广泛使用,而且,MQ的定位就是一个高性能的中间件

3.消息队列通讯模式

1.点对点通讯点:点对点方式是最为传统和常见的通讯方式,它支持一对一、一对多、多对多、多对一等多种配置方式,支持树状、网状等多种拓扑结构

在这里插入图片描述

2.发布/订阅(Publish/Subscribe)模式:发布/订阅功能使得发送者和接收者之间的耦合关系变得更为松散,发送者不必关心接收者的目的地址,而接收者也不必关心消息的发送地址,而只是根据消息的主题进行消息的收发,在MQ家族产品中MQEventBroker是专门用于使用发布/订阅技术进行数据通讯的产品,它支持基于队列和直接基TCP/IP两种方式的发布和订阅

在这里插入图片描述

3.群集(Cluster):群集类似于一个域(Domain),群集内部的队列管理器之间通讯时,不需要两两之间建立消息通道,而是采用群集(Cluster)通道与其它成员通讯,从而大大简化了系统配置

4.为什么使用消息队列

1.应用解耦:传统做法需要依次执行这些业务东西,如果其中某一步异常(例如用户手机未开机或者快递公司接口故障),将会延迟甚至中断整个投柜流程,严重影响用户体验
在这里插入图片描述

如果接口层收到投柜数据后,写入消息到MQ,后续三个子系统各自消费处理,将可以完美解决该问题,并且子系统故障不影响上游系统!此为"解耦"

2.异步:比如快递投柜后,用户马上就结束了,不会等待到发送短信或者通知快递公司结束的,直接将消息投递到MQ,然后就直接结束,具体到扣减系统费以及后续的通知,都是异步操作的,不需要用户关心的,这就是将用户的同步操作转换为异步操作

在这里插入图片描述

如果全部同步操作需要15S,而发送到MQ后交给系统异步处理用户只需要1S就可以完成操作

3.流量削峰:就像用户投递快递,高峰到40W每秒,但是我们的后续处理业务每秒只能20W,还剩下20W在MQ进行堆积,这就是MQ很重要的流量削峰的能力,将用户的洪峰流量,让后台慢慢来处理,MQ承担一个缓冲的作用

在这里插入图片描述
就像下面波形图一样,如果用户请求的并发量的最高峰时40W,系统的承载能力只能达到30W,就可以使用MQ进行削峰,将系统最高40W的并发削峰为最高只有20万,就是时间换空间的做法
在这里插入图片描述

5.消息队列有什么缺点

1.系统可用性降低:消息队列在系统中充当一个中间人的身份,如果该中间人突然失联了,那其他两方就不知所措了,最后也就导致系统之间无法互动

在这里插入图片描述

就像我们投递快递,如果MQ出现问题,那麽我们整个系统调用链路就会断开,前后端将无法通讯

3.一致性问题:系统需要保证快递投递,扣减系统费,通知等之间的数据一致性,如果系统短信通知,快递通知执行成功,扣减系统费执行失败时,就会出现数据不一致问题
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44702984/article/details/131615351
今日推荐