同步刷盘和异步刷盘
【RocketMQ 存储设计到底强在哪?】刚才所说的异步写入,其实就是 RocketMQ 的异步刷盘模式,但是大家想想这个模式有没有什么问题 。为了提升数据吞吐量,消息数据过来后,并没有直接写盘,而是在系统中的 page cache 中 。那么此时如果 Broker 宕机了,那么此时的消息数据是容易丢失的 。所以虽然异步刷盘的写入效率高但是也存在数据丢失的风险 。
1、同步刷盘
在同步刷盘的场景下,当 Broker 接受到对应的消息之后,Broker 将会把这条消息刷入磁盘的 CommitLog 中,才会返回确认消息给生产者 。如果在进行消息写入的时候 Broker 挂了,那么生产者会感受到消息投递失败,一般都会都有消息重新发送的重试逻辑 。
这样看消息似乎不会丢失了,但是由于每次都是先落盘,就会导致数据写入性能下降 。
MMAP
在 RocketMQ 中使用了 mmap 技术来实现 Conmmitlog 文件的高性能读写,mmap 就是一种内存映射文件的方法,对于传统的文件 IO 交互来说,需要经过多次的数据复制过程才能将用户进程的数据写入硬盘或者读入程序 。而 mmap 可以直接将虚拟内存中的文件与硬盘中文件地址进行映射,减少了数据拷贝的过程,从而提升了数据写入的效率 。关于这部分的内容可以参见以前的文章有详细的介绍 。
总结本文主要堆 RocketMQ 的存储设计进行了分析,围绕如何实现高性能消息写入和查询展开了阐述,希望在分析这些优秀中间的具体实现过程中,我们可以将这些优秀设计融入到具体的项目实践中,当我们遇到类似的问题的时候可以借助于这些设计思想来解决实际的问题 。
推荐阅读
- 手抄报版面设计图
- 小学数学教学设计
- 悉尼科技大学设计专业入学要求高不高
- ui设计和平面设计的区别
- |国外简历设计欣赏!清晰明了
- 艺术设计专业学什么?
- 张帆|不是吧!出轨是设计的,7年男友不想过了…
- 设计师|简历存在水分,怕被背景调查?那面试官是怎么进行背景调查的?
- 马羚|演员马羚:毕业于清华,即是演员又是设计师,为了孩子始终单身一人
- 宽8米深15米房子设计图,长15米宽8米房屋设计图片-
