MQ作为一款中间件,就需要承载全公司所有业务系统使用需求,并高效稳定运行。因此,MQ对本身运行效率有着非常苛刻的诉求。
为了实现高效率,其实需要很多方面一起配合来完成。比如存储方式、内存使用、负载均衡等等。
本文就RocketMQ为了实现高效的读写速率在存储架构上所做的努力,进行下阐述。
Part one / 存储结构选型对比
为了更方便的进行数据读写,消息在磁盘底层的文件目录设计,都需要关注和解决什么问题呢:
• 首先,最基本的,消息原始记录的写入和存储,且速率要快。 • 其次,要可以区分 topic
,特别是允许消费者按 topic
进行接收。 • 再次,分布式集群下的多消费者负载均衡。
那么问题来了,消息文件该怎么设计呢?
如果按 topic
来拆分文件进行存储,是否可以?
• 缺点:生产者写入时选择对应的文件来写入。当数据量逐渐增大之后,定位查询文件地址,对磁盘的寻址所带来的性能损耗,将不再可以忽略。 • 优点:在消费时,可以直接加载相关文件进行读取,不会产生随机寻址。
如果用一整个文件来存消息呢?
• 优点:所有的 topic
都被写入一个文件中,这样,写入时,只要将消息按到达顺序序追加到文件尾部即可,很容易实现顺序写入。 • 缺点:消费时,需要根据辅助信息来在文件中定位消息,会产生随机读,损耗性能。
因此,不管是按 topic
拆开多文件存储&#x