论文部分内容阅读
分布式应用程序为了降低模块相互之间的耦合程度以及更好的应对可扩展、可操作性的要求,通常引入消息队列来降低模块之间的耦合和平衡各模块处理能力,消息队列允许分布式系统模块之间在保证遵守同样接口约束的前提下,独立的扩展和修改各自的处理过程。各模块对数据的处理能力不同,持久化消息队列能保证消息持久化到他们已经完全处理好,从而避免了数据丢失。消息队列解耦了处理过程,所以系统扩容时,各模块只需独立增加各自的处理能力即可,大大增强了分布式系统的可扩展性。 在充分调研现有消息队列的基础上,发现现有的消息队列系统存在消息无法持久化、消息持久化和高吞吐量之间无法兼顾、单机容量有限等问题。LSM-Tree(Log-Structured Merge tree)是一个为了提高B-树在更新插入数据时的性能而提出来的优秀算法,思想来源于日志文件系统,主要优点是在不牺牲查找效率的前提下,大幅度提升随机写、随机更新、删除效率。在研究了现有的几种消息队列的基础上,通过引入LSM-Tree结构,设计和实现了一个高吞吐量、消息堆积能力强的持久化消息队列LSMQ。结果显示,在单机容量、读写吞吐量方面,LSMQ表现均达到预期。 测试结果表明,LSMQ读性能达到了12000条消息/秒,写性能达到了15000条消息/秒,略低于内存队列Redis,远远高于基于B+树的持久化消息队列ActiveMQ。在消息堆积能力方面,由于LSMQ轻量级的内存结构设计和基于磁盘的存储结构, LSMQ可以在低内存占用的情况下,达到充分利用磁盘存储消息的目的。