首页 > 手机 > 配件 > MQ详解及四大MQ比较,消息中间件

MQ详解及四大MQ比较,消息中间件

来源:整理 时间:2022-04-07 19:42:46 编辑:华为40 手机版

系统架构中,消息中间件起到了什么作用?

系统架构中,消息中间件起到了什么作用

现在大型网站架构技术中,有一个高频词就是“消息中间件”,我们在很多大公司分享的技术PPT或者岗位要求里都会看到这个名词。什么是消息中间件呢以及它能解决什么问题呢?什么是消息中间件?通过消息中间件可以让不同的系统模块通过传递消息的方式来激活对方的事件以完成相应的操作。消息中间件本质上也算是一种队列,支持同步或异步方式来传输消息。

一般情况下我们把消息中间件简称为MQ。消息中间件在架构中发挥了重要作用通过消息中间件可以帮我们解决很多问题,比如说:1、系统解耦比如一个用户注册流程,可能涉及这些操作:向用户库中写入数据;向相关附加表中写入数据;发送欢迎短信、邮件、站内信等。在没有使用消息中间件时,这些操作可能都是阻塞式的一步一步进行着,万一某个环节出现异常后续环节可能就无法进行了,这就是典型的高耦合!但当我们引入消息中间件后,用户注册成功后只要生产一条消息,然后由不同的消费者(模块)去消费(执行特定操作),这样系统间的耦合度就低了。

2、异步调用上面举的会员注册的例子同样适用于此处,同步阻塞式调用会使得调用链时间周期过长,而异步调用极大的缩短了调用链的时间。3、队列缓冲消息中间件就像一个蓄水池,可将大量请求存储下来让后台逐一处理,所以像秒杀系统都少不了消息系统。主流的消息中间件产品现在市面上有很多消息中间件,应用最为广泛的主要有:RabbitMQ、Kafka、RocketMQ、ActiveMQ等。

消息中间件如何实现每秒几十万的高并发写入?

消息中间件如何实现每秒几十万的高并发写入

消息中间件存储首先理解一点,消息中间件一般都是存储在磁盘上的,大家都知道直接在磁盘读写是有性能瓶颈的,不可能达到每秒几十万的吞吐量,那么消息中间件是怎么保证读写性能的呢?写数据1、消息中间件是基于操作系统的页缓存来实现文件写入的。操作系统本身有一层缓存,叫做page cache,是在内存里的缓存,我们也可以称之为os cache,意思就是操作系统自己管理的缓存。

我们在写入磁盘文件的时候,可以直接写入这个os cache里,也就是仅仅写入内存中,接下来由操作系统自己决定什么时候把os cache里的数据真的刷入磁盘文件中。也就是说我们写是挨个写入缓存中,系统批量写入磁盘。2、写磁盘文件并不是随机添加的,而是在文件末尾追加的,这也就保证了消息在单个磁盘文件的顺序性(多分区就不能保证顺序了)。

读数据1、消息中间件读数据也是从os cache中读取的,如果os cache中没有,系统会去磁盘中批量读取一部分数据,放入os cache中。2、消息中间件用到一种叫做零拷贝的技术。一般我们完成一次网络传输拷贝,需要以下几步:1)调用read系统接口,将数据从磁盘文件拷贝到读内核缓冲区。2)从读内核缓冲区拷贝到用户空间缓存;3)调用write系统接口,将数据从用户空间拷贝到写内核空间缓冲区。

4)将数据从内核空间缓冲区拷贝到socket缓存冲,准备网络传输。上面我们可以看出,一共进行了四次数据拷贝。使用零拷贝技术,我们调用mmap接口,在用户空间和内核空间共享一段内存。这样我们就只需要两次拷贝。1)将磁盘文件数据拷贝到mmap共享内存区。2)将数据从mmap共享内存区拷贝到socket缓存区。

高并发场景下,如何保证生产者投递到消息中间件的消息不丢失?

高并发场景下,如何保证生产者投递到消息中间件的消息不丢失

消息中间件消息不丢失主要从以下几个方面考虑投递生产者向消息中间件投递消息是push的方式,这种方法会出现以下情况1、生产者挂掉了情况是这样的,你的生产者收到了数据,并存到了数据库中,同时生产者要降消息push到消息中间件做异步处理。这时候如果生产者挂掉了,就导致消息数据没有push到消息中间件里,也就会出现数据不一致的问题。

这时候我们可以在数据库设置是否投递成功标志位,在生产者push之后,再将标志位设置为已经投递。另外,客气启动一个定时任务,检测是否有消息没有投递,保证消息数据一定会进入中间件。2、消息重试生产者没有挂掉,但是因为网络等其他问题,导致生产者不知道有没有投递成功。这时候生产者可以失败重试,这保证消息可以再次投递。

但是这有可能会出现重复投递,导致出现中间件消息数据重复。存储消息中间件是存到磁盘上的,存入磁盘的消息一般是不会丢失的,同时磁盘文件还会做备份。如果一个丢失了,可以通过备份文件恢复。消费一般消费者需要在消费者消费成功之后再设置提交消费位点。如果消费失败,消费者不提交消费位点还是可以消费该数据的。这就引出一个问题就是消息重复消费。

文章TAG:MQ消息中间件

最近更新