一种消息分发方法、设备以及存储介质与流程

文档序号:34386118发布日期:2023-06-08 06:14阅读:38来源:国知局
一种消息分发方法、设备以及存储介质与流程

本发明涉及消息处理领域,具体涉及一种消息分发方法、设备以及存储介质。


背景技术:

1、消息分发系统是一种基于消息队列协议的数据分发应用系统如kafka,rabbitmq,mosquitto等,消息从源地址如主机内存发送到一到多个目的地址如本机或者网络对端主机内存,常见的消息队列协议有网络套接字协议、发布订阅协议、高级消息队列协议等。

2、通常的系统模块交互方法是通过搭建消息服务集群,在消息服务器上运行特定消息通讯协议(如发布订阅协议)中间件,系统各模块在初始化阶段设置订阅的消息类型,当业务进程在系统运行阶段需要发送消息时,先将消息发送到消息服务器,再由消息服务器将消息转发给所有订阅了该消息的目标模块,目标模块收到消息并执行相应处理流程。

3、这种做法可有效实现模块之间的消息通讯交互,但是仍然存下以下问题:

4、业务进程并发能力较弱:由于协议栈不能为每个业务进程分配单独的输入输出队列,多个业务进程之间共享相同队列,导致进程之间需要互斥同步操作,从而降低并发性能。

5、软件协议栈吞吐率较低:由于软件协议栈队列数较少,并且队列深度较低,如依赖网络协议的消息通讯,一般仅提供与硬件线路数和最大传输单元成比例的队列数和深度。

6、硬件链路传输性能较低:由于硬件链路dma通道受限制于软件协议栈的数据吞吐量如网络协议最大传输单元,缓冲区容量等,单次dma数据量有限,导致硬件链路性能较低。

7、系统处理器使用率较高:由于消息通讯协议全部由软件实现,如基于网络协议栈的套接字传输协议,并且缺少专用的高速硬件dma数据传输通道,当模块之间消息通讯交互过于频繁时,将占用消息服务器大量处理器资源,从而导致服务器处理器使用率较高。

8、系统整体的性能较低:处理器使用率的升高,进一步限制了消息通讯中间件的数据传输性能,并可能导致其他需要处理器资源的模块如网络通讯或者存储器读写性能下降。

9、消息协议可靠性较低:由于消息缺少硬件错误恢复方法,当数据传输过程中软硬件环境变化造成消息通讯异常时,可能会出现消息丢失现象,从而使得传输可靠性较低。

10、消息协议的功耗较高:由于缺乏软硬件功耗状态自动切换机制,系统长时间无数据传输也处于全速运行状态,如网络协议栈的存活心跳检测过程,导致系统耗电量较高。

11、消息协议的延迟较高:由于消息协议栈软件层次较多,如基于网络协议实现的消息分发系统,协议栈包含应用层到物理层多个层次,层次数据格式转换造成传输延迟较高。


技术实现思路

1、有鉴于此,为了克服上述问题的至少一个方面,本发明实施例提出一种消息分发方法,包括以下步骤:

2、在主机中根据每一个业务进程的标识分别创建对应的io请求队列和响应队列;

3、在nvme硬盘中分别创建与每一个所述业务进程对应的发布队列和订阅队列,并建立记录每一个所述业务进程的中断号、发布队列和订阅队列之间映射关系的第一映射表,将所述发布队列和订阅队列的地址返回所述主机以在所述主机中建立记录业务进程的标识、io请求队列和响应队列、发布队列和订阅队列之间映射关系的第二映射表;

4、响应于所述业务进程向所述nvme硬盘发送消息订阅请求,利用待订阅的消息类型以及根据所述第二映射表确定的订阅队列的地址构建第一io写命令并写入对应的io请求队列,并将所述第一io写命令写入到所述nvme硬盘以在所述nvme硬盘中建立记录消息类型、订阅队列之间映射关系的第三映射表;

5、响应于所述业务进程向所述nvme硬盘发送消息发布请求,利用待发布的消息类型、对应的发布队列以及消息内容构建第二io写命令并写入对应的io请求队列并将所述第二io写命令写入到所述nvme硬盘,根据所述第三映射表将所述消息内容和消息类型转发到与所述待发布的消息类型对应的订阅队列中;

6、响应于检测到有非空的所述订阅队列,根据所述第一映射表将非空的所述订阅队列中的消息内容上报到对应的业务进程。

7、在一些实施例中,还包括初始化流程,所述初始化流程包括:

8、在所述主机中利用管理进程执行主机初始化流程以创建管理请求队列和管理响应队列并将所述管理请求队列和管理响应队列的地址写入所述nvme硬盘以及更新所述nvme硬盘的状态寄存器以表示主机初始化完毕;

9、所述nvme硬盘检测到所述状态寄存器表示主机初始化完毕,申请所述第一映射表和第三映射表的内存并初始化为空,并更新的状态寄存器以表示所述nvme硬盘初始化完毕;

10、响应于所述主机检测到所述状态寄存器表示nvme硬盘初始化完毕,结束初始化流程。

11、在一些实施例中,在nvme硬盘中分别创建与每一个所述业务进程对应的发布队列和订阅队列,并建立记录每一个所述业务进程的中断号、发布队列和订阅队列之间映射关系的第一映射表,将所述发布队列和订阅队列返回所述主机以在所述主机中建立记录业务进程的标识、io请求队列和响应队列、发布队列和订阅队列之间映射关系的第二映射表,进一步还包括:

12、在所述主机中为每一个所述业务进程分配中断号并以所述业务进程的中断号为参数构建所述发布队列和订阅队列创建命令,将创建命令写入到所述管理请求队列;

13、所述nvme硬盘通过dma读取所述管理请求队列中的创建命令;

14、根据所述创建命令创建所述发布队列和订阅队列并建立记录中断号、发布队列和订阅队列之间映射关系的第一映射表。

15、在一些实施例中,还包括:

16、以发布队列和订阅队列的地址为参数构建响应信息并将所述响应信息写入到所述管理响应队列;

17、所述主机从所述管理响应队列中获取并解析所述响应信息以得到所述发布队列和订阅队列的地址进而建立记录业务进程的标识、io请求队列和响应队列、发布队列和订阅队列之间映射关系的第二映射表。

18、在一些实施例中,响应于所述业务进程向所述nvme硬盘发送消息订阅请求,利用待订阅的消息类型以及根据所述第二映射表确定的订阅队列的地址构建第一io写命令并写入对应的io请求队列,并将所述第一io写命令写入到所述nvme硬盘以在所述nvme硬盘中建立记录消息类型、订阅队列之间映射关系的第三映射表,进一步还包括:

19、获取所述业务进程传入的待订阅的消息类型、数据块地址以及回调函数地址,并建立记录消息类型、数据块地址以及回调函数地址之间映射关系的第四映射表;

20、在所述第二映射表中获取所述业务进程对应的订阅队列的地址;

21、构建第一io写命令并配置所述第一io写命令的数据指针为所述消息类型对应的地址,slba为所述订阅队列的地址;

22、在所述第二映射表中获取所述业务进程对应的io请求队列并将所述第一io写命令写入到对应的所述io请求队列中;

23、所述nvme硬盘从所述io请求队列中获取所述第一io写命令并解析得到待订阅的消息类型以及订阅队列的地址从而建立记录消息类型、订阅队列之间映射关系的第三映射表;

24、以订阅队列的地址为参数构建响应信息并将所述响应信息写入到所述业务进程对应的响应队列;

25、所述主机从所述业务进程对应的响应队列中获取到所述响应信息,结束消息订阅。

26、在一些实施例中,响应于检测到有非空的所述订阅队列,根据所述第一映射表将非空的所述订阅队列中的消息内容上报到对应的业务进程,进一步包括:

27、查询所述第一映射表获取与所述非空的订阅队列对应的中断号;

28、将非空的订阅队列中的消息内容的长度和消息类型更新到状态寄存器并通过所述触发msi中断将消息内容的长度和消息类型通知主机;

29、根据所述消息类型查询所述第四映射表获取数据块地址,并查询所述第二映射表获取与所述对应的业务进程相对应的订阅队列地址;

30、构建io读命令并配置所述io读命令的数据指针为所述数据块对应的地址,slba为与所述对应的业务进程相对应的订阅队列地址的地址,nlb为所述消息内容的长度;

31、根据所述第二映射表将所述io读命令发送到与所述对应的业务进程对应的io请求队列中并通知所述nvme硬盘执行所述io读命令以使所述非空的所述订阅队列中的消息内容搬运到与所述对应的业务进程相对应的所述数据块对应的地址中。

32、在一些实施例中,还包括:

33、所述非空的所述订阅队列的地址为参数构建响应信息并将所述响应信息写入到所述对应的业务进程对应的响应队列;

34、所述主机从所述对应的业务进程对应的响应队列中获取到所述响应信息,结束消息上报;

35、根据所述消息类型查询所述第四映射表获取回调函数的地址以通过回调函数处理所述数据块对应的地址中的消息内容。

36、在一些实施例中,响应于所述业务进程向所述nvme硬盘发送消息发布请求,利用待发布的消息类型、对应的发布队列以及消息内容构建第二io写命令并写入对应的io请求队列并将所述第二io写命令写入到所述nvme硬盘,根据所述第三映射表将所述消息内容和消息类型转发到与所述待发布的消息类型对应的订阅队列中,进一步还包括:

37、获取所述业务进程传入的待发布的消息类型、消息内容、数据块地址;

38、在所述第二映射表中获取所述业务进程对应的订阅队列的地址;

39、构建第二io写命令并配置所述第二io写命令的数据指针为所述消息类型对应的地址和消息内容对应的地址,slba为所述发布队列的地址;

40、在所述第二映射表中获取所述业务进程对应的io请求队列并将所述第二io写命令写入到对应的所述io请求队列中;

41、所述nvme硬盘从所述io请求队列中获取所述第二io写命令并解析得到待发布的消息类型的地址和消息内容的地址,执行dma以根据待发布的消息类型的地址和消息内容的地址获取待发布的消息类型和消息内容并传输到对应的发布队列;

42、根据所述第三映射表将对应的发布队列中的消息类型和所述消息内容转发到与所述待发布的消息类型对应的订阅队列中;

43、以发布队列的地址为参数构建响应信息并将所述响应信息写入到所述业务进程对应的响应队列;

44、所述主机从所述业务进程对应的响应队列中获取到所述响应信息,结束消息发布。

45、基于同一发明构思,根据本发明的另一个方面,本发明的实施例还提供了一种计算机设备,包括:

46、至少一个处理器;以及

47、存储器,所述存储器存储有可在所述处理器上运行的计算机程序,所述处理器执行所述程序时执行如上所述的任一种消息分发方法的步骤。

48、基于同一发明构思,根据本发明的另一个方面,本发明的实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时执行如上所述的任一种消息分发方法的步骤。

49、本发明具有以下有益技术效果之一:本发明提出的方案基于nvme协议的主机端消息发布/订阅命令提交流程,通过引入多io请求/响应队列,实现了高并发、异步的消息发布/订阅命令提交。同时基于nvme协议的硬盘端消息发布/订阅命令提交流程,通过引入多io请求/响应队列、发布/订阅队列、消息转发模块,充分利用了硬件电路的流水线并行执行特性,既降低了处理器使用率,也提高了传输性能。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1