MetaQ
简介:
- 概念:MetaQ是一款分布式、队列模型的消息中间件。
- 模式:分为Topic与Queue两种模式
- 消费方式:Push和Pull两种方式消费
- 特点:支持严格的消息顺序,亿级别的堆积能力,支持消息回溯和多个维度的消息查询。
影响性能的关键几点
- 序列化与反序列化
从MetaQ Cleint要发送消息,必须要先序列化,然后才能通过网络发送出去。 MetaQ Server收到消息后,要进行反序列化,才能解析出消息内容,最后序列化存储到文件系统。
MetaQ Client收到消息,首页MetaQ Server必须从文件中读取消息,然后通过网络发送给MetaQ Client,收到消息,进行反序列化,应用才能识别消息内容。
MetaQ核心功能,都要通过序列化与反序列化,所以其性能,对MetaQ性能有关键性的影响,其实不是对MetaQ,只要使用了序列化与反序列化,其对性能影响都很大。
虽然使用Google的Protocol Buffers性能会更好,但各个版本不兼容。所以MetaQ选择使用JSON - write性能
因为MetaQ Server会有大量的write系统调用 ,所以其性能对MetaQ性能有着重要的影响。
优化: - MetaQ消息只保留在一个物理文件上,所有的消息都会写一个物理文件,每个物理文件都是固定大小,超过设置的阀值后,自动创建新的一个文件。当磁盘快满时,会自动删除老的文件。
- read性能
因为MetaQ Server会有大量的read系统调用 ,所以其性能对MetaQ性能有着重要的影响。
优化: - read优化主要是使用了map文件映射技术。这样可以减少系统上下文切换和复制数据的开销。
- 同时文件系统提供了文件预读的功能,也使的读取文件开销,特别是顺序读时,开销比较低。
- 网络框架
因为发送消息,订阅消息都必须经过网络,如果网络组件性能不好,对MetaQ性能有着关键的影响。 - MetaQ的网络框架,选择了Netty4。Netty4因出色的性能和易用性,成为高性能场景的不二选择。
Group Commit技术
- Group Commit也就是组提交,组提交是指可以多次分写请求只要通过一次刷新数据,就可以实现这些请求的数据都已刷新到磁盘上。
- MySQL数据库能保证ACID,事务提交也使用了Group Commit来提高性能(为了保证D,数据需要持久化到文件系统)。