【RocketMQ】6.RocketMQ 存储特点

6.1 零拷贝原理

Consumer 消费消息过程,使用了零拷贝,零拷贝包含以下两种方式

  1. 使用 mmap + write 方式

优点:即使频繁调用,使用小块文件传输,效率也很高
缺点:不能很好的利用 DMA 方式,会比 sendfile 多消耗 CPU,内存安全性控制复杂,需要避免 JVM Crash问题。
2. 使用 sendfile 方式

优点:可以利用 DMA 方式,消耗 CPU 较少,大块文件传输效率高,无内存安全新问题。
缺点:小块文件效率低于 mmap 方式,只能是 BIO 方式传输,不能使用 NIO。

RocketMQ 选择了第一种方式,mmap+write 方式,因为有小块数据传输的需求,效果会比 sendfile 更好。

关于 Zero Copy 的更详细介绍,请参考以下文章
http://www.linuxjournal.com/article/6345

6.2 文件系统

RocketMQ 选择 Linux Ext4 文件系统,原因如下:

Ext4 文件系统删除 1G 大小的文件通常耗时小于 50ms,而 Ext3 文件系统耗时约 1s 左右,且删除文件时,磁盘IO 压力极大,会导致 IO 写入超时。

文件系统层面需要做以下调优措施

文件系统 IO 调度算法需要调整为 deadline,因为 deadline 算法在随机读情况下,可以合并读请求为顺序跳跃方式,从而提高读 IO 吞吐量。

Ext4 文件系统有以下 Bug,请注意
http://blog.donghao.org/2013/03/20/%E4%BF%AE%E5%A4%8Dext4%E6%97%A5%E5%BF%97%EF%BC%88jbd2%EF%BC%89bug/

6.3 数据存储结构

【RocketMQ】6.RocketMQ 存储特点_第1张图片

你可能感兴趣的:(RocketMQ)