用于中间件消息的存储与传输方法及系统的制作方法

文档序号:8472953阅读:1013来源:国知局
用于中间件消息的存储与传输方法及系统的制作方法
【技术领域】
[0001]本申请涉及网络信息处理领域,具体地说,涉及一种用于中间件消息的存储与传输方法及系统。
【背景技术】
[0002]在互联网络的时代,信息如同大海般没有边际。消息中间件是分布式系统中常用的一种消息通讯的组件,主要用于系统间的解耦,是一种以消息为通讯介质并且帮助转发消息给不同的应用的分布式系统,与邮件系统类似。参与方按角色可以分为发送消息方,消息中间件服务器和订阅消息方。消息中间件所在服务器承担着消息的存储和转发,本发明对应的正是消息存储和消息转发这两块,是消息系统的核心功能,直接影响消息系统的性能和可靠性。
[0003]目前,在市面上开源的产品有kafka,ActiveMQ等,使用本地文件或者DB(database,数据库)做为存储介质并实现消息的发布和订阅。
[0004]在这些消息中间件产品中,当使用本地文件存储时不同应用需要的消息都是独立存储(独立队列)的,多个应用需要同一条消息时需要同时存多份,并且使用B+树作为索引存储,随机读写直接增加磁盘1的访问频率,并且使用java N1对文件访问,其结果是性能较低。
[0005]当使用DB作为消息中间件存储介质时,除了B+树的特性带来磁盘随机读写之外还多了一层网络访问,当大量消息堆积时直接导致DB产生swap (服务器性能评价指标),大量的事务和锁操作直接导致服务器性能急剧下降,DB并不适合于消息中间件,需要快速投递消息而又能够大量堆积消息的场景。
[0006]根据上述内容,总结得出现有的技术缺点主要包括:
[0007]1、使用B+树作为消息存储的索引,B+树涉及磁盘的随机读写,严重影响性能。
[0008]2、多个订阅方的索引都放在一个B+树存储里面,当B树膨胀之后,造成性能极低。
[0009]3、受java JVM (Java Virtual Machine, Java虚拟机)本身限制,使用本地文件存储时缓存小,缓存命中率低。
[0010]4、当对失败消息需要进行频繁更新索引,由于缺少精确的流控措施,难以保证性倉急
[0011]5、当消息投递时需要对消息进行反序列化,由于经java JVM堆传输到socket,所以影响性能。
[0012]针对上述问题,如何提供一种能够解决中间件消息数据的存储与传输性能低的问题,便成为亟待解决的技术问题。

【发明内容】

[0013]有鉴于此,本申请所要解决的技术问题是提供了一种用于中间件消息的存储与传输方法及系统,解决了消息中间件需要快速投递消息,而且还需要处理大量堆积消息的场旦
O
[0014]为了解决上述技术问题,本申请公开了一种用于中间件消息的存储与传输方法,应用于文件库中,其特征在于,包括:
[0015]在所述文件库中创建数据队列、索引队列和指针文件,其中,该索引队列包括对应于不同用户的索引分区;所述数据队列用于顺序存储用户的数据,所述索引分区按照所属用户划分,每个所述索引分区存储该用户在所述数据队列中存储的数据的索引,所述指针文件中的指针指向被读取的数据的索引所在的所述索引分区的索引队列位置;
[0016]监测到数据存入所述文件库时,将该数据存入所述数据队列中,完成后将该数据对应的索引存储到与该数据所属用户相对应的所述索引队列中;
[0017]监测到读取所述文件库中的数据时,从指针文件中获取当前指针指向的索引所在的所述索引分区的索引队列位置,并根据该索引队列位置获取下一条索引,通过该索引从所述数据队列中读取对应的数据投递完成,并更新所述指针文件中当前指针指向的索引所在的所述索引分区的索引队列位置。
[0018]优选地,还包括:
[0019]所述索引队列还包括一恢复分区;
[0020]监测到读取所述文件库中的数据时,从指针文件中获取当前指针指向的索引所在的所述索引分区的索引队列位置,并根据该索引队列位置获取下一条索引,通过该索引从所述数据队列中读取对应的数据投递失败时,将该索引存入所述恢复分区中的索引队列;
[0021]同时,监测到读取所述文件库中的数据时,所述恢复分区从所述指针文件中获取当前恢复指针指向的恢复索引所在的所述恢复分区的索引队列位置,并根据该索引队列位置获取下一条恢复索引,通过该恢复索引从所述数据队列中读取对应的数据投递完成,并更新所述指针文件中当前恢复指针指向的索引所在的所述恢复分区的索引队列位置。
[0022]优选地,还包括:
[0023]通过该恢复索引从所述数据队列中读取对应的数据投递失败时,将该恢复索引放入所述恢复分区中的索引队列的排序执行末端。
[0024]优选地,还包括:
[0025]监控所述恢复分区中的索引队列中的至少十个恢复索引从所述数据队列中读取对应的数据进行投递的失败率,若所述失败率超过20%,则延时至少5秒钟执行所述恢复分区从所述指针文件中获取当前恢复指针指向的恢复索引所在的所述恢复分区的索引队列位置。
[0026]优选地,所述索引分区中的索引,由文件名和文件组成,文件名为从零开始排序,排序在该文件名之后的文件名为该文件名加上该文件名对应的文件的格式大小的数值;其中,所述索引的大小为最多32个字节组成。
[0027]为了解决上述技术问题,本申请还公开了一种用于中间件消息的存储与传输系统,应用于文件库中,其特征在于,包括:存储单元、监测单元、写入传输单元和读取传输单元;其中,
[0028]所述存储单元,用于在所述文件库中创建数据队列、索引队列和指针文件,其中,该索引队列包括对应于不同用户的索引分区;所述数据队列用于顺序存储用户的数据,所述索引分区按照所属用户划分,每个所述索引分区存储该用户在所述数据队列中存储的数据的索引,所述指针文件中的指针指向被读取的数据的索引所在的所述索引分区的索引队列位置;
[0029]所述监测单元,用于监测到数据存入所述文件库时,指示所述写入传输单元;监测到读取所述文件库中的数据时,指示所述读取传输单元;
[0030]所述写入传输单元,用于将该数据存入所述存储单元创建的数据队列中,完成后将该数据对应的索引存储到与该数据所属用户相对应的所述索引队列中;
[0031]所述读取传输单元,用于从所述存储单元的指针文件中获取当前指针指向的索引所在的所述索引分区的索引队列位置,并根据该索引队列位置获取下一条索引,通过该索引从所述数据队列中读取对应的数据投递完成,并更新所述指针文件中当前指针指向的索引所在的所述索引分区的索引队列位置。
[0032]优选地,所述存储单元,还用于在所述索引队列中创建一恢复分区;
[0033]所述读取传输单元,还用于从所述存储单元的指针文件中获取当前指针指向的索引所在的所述索引分区的索引队列位置,并根据该索引队列位置获取下一条索引,通过该索引从所述数据队列中读取对应的数据投递失败时,将该索引存入所述恢复分区中的索引队列;
[0034]同时,监测到读取所述文件库中的数据时,所述恢复分区从所述指针文件中获取当前恢复指针指向的恢复索引所在的所述恢复分区的索引队列位置,并根据该索引队列位置获取下一条恢复索引,通过该恢复索引从所述数据队列中读取对应的数据投递完成,并更新所述指针文件中当前恢复指针指向的索引所在的所述恢复分区的索引队列位置。
[0035]优选地,所述读取传输单元,还用于通过该恢复索引从所述数据队列中读取对应的数据投递失败时,将该恢复索引放入所述存储单元的恢复分区中的索引队列的排序执行末端。
[0036]优选地,所述读取传输单元,还用于监控所述恢复分区中的索引队列中的至少十个恢复索引从所述数据队列中读取对应的数据进行投递的失败率,若所述失败率超过20%,则延时至少5秒钟执行所述恢复分区从所述指针文件中获取当前恢复指针指向的恢复索弓I所在的所述恢复分区的索引队列位置。
[0037]优选地,其特征在于,所述索引
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1