一种消息分发方法、设备以及存储介质技术

技术编号:37802888 阅读:16 留言:0更新日期:2023-06-09 09:33
本发明专利技术公开了一种消息分发方法,包括以下步骤:在主机中根据每一个业务进程的标识分别创建对应的IO请求队列和响应队列;在NVME硬盘中分别创建与每一个业务进程对应的发布队列和订阅队列;响应于业务进程向NVME硬盘发送消息订阅请求,构建第一IO写命令并写入对应的IO请求队列,并将第一IO写命令写入到NVME硬盘;响应于业务进程向NVME硬盘发送消息发布请求,利用待发布的消息类型、对应的发布队列以及消息内容构建第二IO写命令并写入对应的IO请求队列并将第二IO写命令写入到NVME硬盘,将消息内容和消息类型转发到与待发布的消息类型对应的订阅队列中;响应于检测到有非空的订阅队列,将非空的订阅队列中的消息内容上报到对应的业务进程。的业务进程。的业务进程。

【技术实现步骤摘要】
一种消息分发方法、设备以及存储介质


[0001]本专利技术涉及消息处理领域,具体涉及一种消息分发方法、设备以及存储介质。

技术介绍

[0002]消息分发系统是一种基于消息队列协议的数据分发应用系统如kafka,RabbitMQ,mosquitto等,消息从源地址如主机内存发送到一到多个目的地址如本机或者网络对端主机内存,常见的消息队列协议有网络套接字协议、发布订阅协议、高级消息队列协议等。
[0003]通常的系统模块交互方法是通过搭建消息服务集群,在消息服务器上运行特定消息通讯协议(如发布订阅协议)中间件,系统各模块在初始化阶段设置订阅的消息类型,当业务进程在系统运行阶段需要发送消息时,先将消息发送到消息服务器,再由消息服务器将消息转发给所有订阅了该消息的目标模块,目标模块收到消息并执行相应处理流程。
[0004]这种做法可有效实现模块之间的消息通讯交互,但是仍然存下以下问题:
[0005]业务进程并发能力较弱:由于协议栈不能为每个业务进程分配单独的输入输出队列,多个业务进程之间共享相同队列,导致进程之间需要互斥同步操作,从而降低并发性能。
[0006]软件协议栈吞吐率较低:由于软件协议栈队列数较少,并且队列深度较低,如依赖网络协议的消息通讯,一般仅提供与硬件线路数和最大传输单元成比例的队列数和深度。
[0007]硬件链路传输性能较低:由于硬件链路DMA通道受限制于软件协议栈的数据吞吐量如网络协议最大传输单元,缓冲区容量等,单次DMA数据量有限,导致硬件链路性能较低。
[0008]系统处理器使用率较高:由于消息通讯协议全部由软件实现,如基于网络协议栈的套接字传输协议,并且缺少专用的高速硬件DMA数据传输通道,当模块之间消息通讯交互过于频繁时,将占用消息服务器大量处理器资源,从而导致服务器处理器使用率较高。
[0009]系统整体的性能较低:处理器使用率的升高,进一步限制了消息通讯中间件的数据传输性能,并可能导致其他需要处理器资源的模块如网络通讯或者存储器读写性能下降。
[0010]消息协议可靠性较低:由于消息缺少硬件错误恢复方法,当数据传输过程中软硬件环境变化造成消息通讯异常时,可能会出现消息丢失现象,从而使得传输可靠性较低。
[0011]消息协议的功耗较高:由于缺乏软硬件功耗状态自动切换机制,系统长时间无数据传输也处于全速运行状态,如网络协议栈的存活心跳检测过程,导致系统耗电量较高。
[0012]消息协议的延迟较高:由于消息协议栈软件层次较多,如基于网络协议实现的消息分发系统,协议栈包含应用层到物理层多个层次,层次数据格式转换造成传输延迟较高。

技术实现思路

[0013]有鉴于此,为了克服上述问题的至少一个方面,本专利技术实施例提出一种消息分发方法,包括以下步骤:
[0014]在主机中根据每一个业务进程的标识分别创建对应的IO请求队列和响应队列;
[0015]在NVME硬盘中分别创建与每一个所述业务进程对应的发布队列和订阅队列,并建立记录每一个所述业务进程的中断号、发布队列和订阅队列之间映射关系的第一映射表,将所述发布队列和订阅队列的地址返回所述主机以在所述主机中建立记录业务进程的标识、IO请求队列和响应队列、发布队列和订阅队列之间映射关系的第二映射表;
[0016]响应于所述业务进程向所述NVME硬盘发送消息订阅请求,利用待订阅的消息类型以及根据所述第二映射表确定的订阅队列的地址构建第一IO写命令并写入对应的IO请求队列,并将所述第一IO写命令写入到所述NVME硬盘以在所述NVME硬盘中建立记录消息类型、订阅队列之间映射关系的第三映射表;
[0017]响应于所述业务进程向所述NVME硬盘发送消息发布请求,利用待发布的消息类型、对应的发布队列以及消息内容构建第二IO写命令并写入对应的IO请求队列并将所述第二IO写命令写入到所述NVME硬盘,根据所述第三映射表将所述消息内容和消息类型转发到与所述待发布的消息类型对应的订阅队列中;
[0018]响应于检测到有非空的所述订阅队列,根据所述第一映射表将非空的所述订阅队列中的消息内容上报到对应的业务进程。
[0019]在一些实施例中,还包括初始化流程,所述初始化流程包括:
[0020]在所述主机中利用管理进程执行主机初始化流程以创建管理请求队列和管理响应队列并将所述管理请求队列和管理响应队列的地址写入所述NVME硬盘以及更新所述NVME硬盘的状态寄存器以表示主机初始化完毕;
[0021]所述NVME硬盘检测到所述状态寄存器表示主机初始化完毕,申请所述第一映射表和第三映射表的内存并初始化为空,并更新的状态寄存器以表示所述NVME硬盘初始化完毕;
[0022]响应于所述主机检测到所述状态寄存器表示NVME硬盘初始化完毕,结束初始化流程。
[0023]在一些实施例中,在NVME硬盘中分别创建与每一个所述业务进程对应的发布队列和订阅队列,并建立记录每一个所述业务进程的中断号、发布队列和订阅队列之间映射关系的第一映射表,将所述发布队列和订阅队列返回所述主机以在所述主机中建立记录业务进程的标识、IO请求队列和响应队列、发布队列和订阅队列之间映射关系的第二映射表,进一步还包括:
[0024]在所述主机中为每一个所述业务进程分配中断号并以所述业务进程的中断号为参数构建所述发布队列和订阅队列创建命令,将创建命令写入到所述管理请求队列;
[0025]所述NVME硬盘通过DMA读取所述管理请求队列中的创建命令;
[0026]根据所述创建命令创建所述发布队列和订阅队列并建立记录中断号、发布队列和订阅队列之间映射关系的第一映射表。
[0027]在一些实施例中,还包括:
[0028]以发布队列和订阅队列的地址为参数构建响应信息并将所述响应信息写入到所述管理响应队列;
[0029]所述主机从所述管理响应队列中获取并解析所述响应信息以得到所述发布队列和订阅队列的地址进而建立记录业务进程的标识、IO请求队列和响应队列、发布队列和订阅队列之间映射关系的第二映射表。
[0030]在一些实施例中,响应于所述业务进程向所述NVME硬盘发送消息订阅请求,利用待订阅的消息类型以及根据所述第二映射表确定的订阅队列的地址构建第一IO写命令并写入对应的IO请求队列,并将所述第一IO写命令写入到所述NVME硬盘以在所述NVME硬盘中建立记录消息类型、订阅队列之间映射关系的第三映射表,进一步还包括:
[0031]获取所述业务进程传入的待订阅的消息类型、数据块地址以及回调函数地址,并建立记录消息类型、数据块地址以及回调函数地址之间映射关系的第四映射表;
[0032]在所述第二映射表中获取所述业务进程对应的订阅队列的地址;
[0033]构建第一IO写命令并配置所述第一IO写命令的数据指针为所述消息类型对应的地址,SLBA为所述订阅队列的地址;
[0034]在所述第二映射表中获取所述业务进程对应的IO请求队列并将所述第本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种消息分发方法,其特征在于,包括以下步骤:在主机中根据每一个业务进程的标识分别创建对应的IO请求队列和响应队列;在NVME硬盘中分别创建与每一个所述业务进程对应的发布队列和订阅队列,并建立记录每一个所述业务进程的中断号、发布队列和订阅队列之间映射关系的第一映射表,将所述发布队列和订阅队列的地址返回所述主机以在所述主机中建立记录业务进程的标识、IO请求队列和响应队列、发布队列和订阅队列之间映射关系的第二映射表;响应于所述业务进程向所述NVME硬盘发送消息订阅请求,利用待订阅的消息类型以及根据所述第二映射表确定的订阅队列的地址构建第一IO写命令并写入对应的IO请求队列,并将所述第一IO写命令写入到所述NVME硬盘以在所述NVME硬盘中建立记录消息类型、订阅队列之间映射关系的第三映射表;响应于所述业务进程向所述NVME硬盘发送消息发布请求,利用待发布的消息类型、对应的发布队列以及消息内容构建第二IO写命令并写入对应的IO请求队列并将所述第二IO写命令写入到所述NVME硬盘,根据所述第三映射表将所述消息内容和消息类型转发到与所述待发布的消息类型对应的订阅队列中;响应于检测到有非空的所述订阅队列,根据所述第一映射表将非空的所述订阅队列中的消息内容上报到对应的业务进程。2.如权利要求1所述的方法,其特征在于,还包括初始化流程,所述初始化流程包括:在所述主机中利用管理进程执行主机初始化流程以创建管理请求队列和管理响应队列并将所述管理请求队列和管理响应队列的地址写入所述NVME硬盘以及更新所述NVME硬盘的状态寄存器以表示主机初始化完毕;所述NVME硬盘检测到所述状态寄存器表示主机初始化完毕,申请所述第一映射表和第三映射表的内存并初始化为空,并更新的状态寄存器以表示所述NVME硬盘初始化完毕;响应于所述主机检测到所述状态寄存器表示NVME硬盘初始化完毕,结束初始化流程。3.如权利要求2所述的方法,其特征在于,在NVME硬盘中分别创建与每一个所述业务进程对应的发布队列和订阅队列,并建立记录每一个所述业务进程的中断号、发布队列和订阅队列之间映射关系的第一映射表,将所述发布队列和订阅队列返回所述主机以在所述主机中建立记录业务进程的标识、IO请求队列和响应队列、发布队列和订阅队列之间映射关系的第二映射表,进一步还包括:在所述主机中为每一个所述业务进程分配中断号并以所述业务进程的中断号为参数构建所述发布队列和订阅队列创建命令,将创建命令写入到所述管理请求队列;所述NVME硬盘通过DMA读取所述管理请求队列中的创建命令;根据所述创建命令创建所述发布队列和订阅队列并建立记录中断号、发布队列和订阅队列之间映射关系的第一映射表。4.如权利要求3所述的方法,其特征在于,还包括:以发布队列和订阅队列的地址为参数构建响应信息并将所述响应信息写入到所述管理响应队列;所述主机从所述管理响应队列中获取并解析所述响应信息以得到所述发布队列和订阅队列的地址进而建立记录业务进程的标识、IO请求队列和响应队列、发布队列和订阅队列之间映射关系的第二映射表。
5.如权利要求1所述的方法,其特征在于,响应于所述业务进程向所述NVME硬盘发送消息订阅请求,利用待订阅的消息类型以及根据所述第二映射表确定的订阅队列的地址构建第一IO写命令并写入对应的IO请求队列,并将所述第一IO写命令写入到所述NVME硬盘以在所述NVME硬盘中建立记录消息类型、订阅队列之间映射关系的第三映射表,进一步还包括:获取所述业务进程传入的待订阅的消息类型、数据块地址以及回调函数地址,并建立记录消息类型、数据块地址以及回调函数地址之间映射关系的第四映射表;在所述第二映射表中获取所述业务进程对应的订阅队列的地址;构建第一IO写命令并配置所述第一IO写命令的数据指针为所述消息类型对应的地址,SLBA...

【专利技术属性】
技术研发人员:郑俊飞陈静静
申请(专利权)人:山东云海国创云计算装备产业创新中心有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1