开发者学堂课程【RocketMQ 知识精讲与项目实战(第三阶段):消息存储方式介绍】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/704/detail/12447
消息存储方式介绍
内容介绍:
一、消息的存储
二、存储的介质
三、总结
一、消息的存储
研究高级功能的第一个部分消息的存储,明白消息存储的意义,即我们在使用消息中间键的时候,需要考虑发送给 MQ 的消息,保证消息的高可靠性,不会丢失。通常在消息中间键都会有自动的持久化的机制,如果启用持久化的机制后,整个消息的发送和消息消费的流程如下:
当消息的生产者发送消息到 MQ ,MQ 会将消息存储到本地硬盘当中,存储完消息 MQ 对消费生产者进行确认。当消息的消费者上线, MQ 将消息发送给消费者,消费者在本地处理完毕之后也会跟 MQ 进行确认。 MQ 就会将本地持久化的消息进行删除,因为消息已经处理就没有必要在进行保留。这就是整个消息的发送和消息消费的流程。
二、存储的介质
若考虑选择消息的介质该如何存储?存储介质如何选择?通常来讲,我们有两种方式:1.使用数据库存储2.使用文件系统之间进行存储
1.使用数据库存储
在 Apache 下存在一个知名的消息对硬件 ActiveMQ 默认关系型数据库进行存储,使用关系型数据库进行存储只需要在消息终结键中做一些简单的配置,告诉其数据库的具体位置,连接信息是什么?消息终结键自动的进行传入,存到关系型数据库做一些配置即可。存到关系型数据库可能会出现的问题:一般来说,消息量比较大在性能方面会出现性能瓶颈的问题,即数据量的达到千万级别的时候,使用关系型数据库取存储往往会拖慢系统的性能。若数据量不大可以考虑这种方式,若数据量较大,现在我们所用的互联网的数据量较大,可以使用这种方法却不是最好的选择。
2.使用文件系统之间进行存储
使用文件系统之间进行存储相比于使用数据存储更加直接,因为关系型数据库还是在系统中储存,直接在系统文件中储存更方便,文件系统属于比较主流的一种系统介质,直接给文件系统储存,比如我们熟知的 rocket、kafaka、rabbitMQ 等等,它们默认的都是直接存储到文件系统当中。其中要进行消息的存储化,通常分为两种模式:1.异步刷盘2.同步刷盘。文件系统作为存储介质,在性能上比关系型数据库优秀很多。若要存储到关系型数据库中,需要启动数据库的服务端,通过数据库的服务端才能存储到文件系统当中,直接存储到文件系统是性能上的提高。所以在 rocketMQ 当中,采用的就是此类方式。
三、总结:
在介绍消息存储的过程当中,主要说明两件事情:1.消息存储和消息存储化以及消息发送和消息消费、消息持久化的整体框架流程。2.介绍两种存储介质,微型数据库和文件系统。在 rocketMQ 当中使用的是文件系统的方式进行持久化。