数据读写的方法、装置和系统与流程

文档序号:37259726发布日期:2024-03-12 20:37阅读:10来源:国知局
数据读写的方法、装置和系统与流程

本技术涉及数据读写领域,并且更具体地,涉及一种数据读写的方法、装置和系统。


背景技术:

1、以apache kafka为代表的消息队列系统被广泛应用于生产环境中。apache kafka系统包括生产者(producer)、消费者(consumer)和代理者(broker)。broker是数据的代理,kafka集群中的一个kafka服务节点称为一个broker,主要存储数据;producer为数据的生产者,producer是向kafka的broker发送数据的客户端;consumer是数据的消费者、数据的使用方,负责消费broker上的数据。在每个broker上,数据被划分到不同的partition,存储在broker的磁盘中,持久化的存储可以提供数据的容错保障。producer与broker、broker与consumer之间基于传输控制协议(transmission control protocol,tcp)通信,有较大的通信开销;apache kafka不适用于高带宽、低延迟的应用场景。

2、远程直接内存访问(remote direct memory access,rdma)是为了解决网络传输中服务器处理数据的延迟而产生的一种直接内存访问技术。在两个或者多个计算机之间进行通信的时候使用rdma,可以从一个主机的内存直接访问另一个主机的内存,而不需要经过处理器的处理。通过rdma将数据从一个系统的内存快速移动到另一个系统的内存中,也不会对操作系统造成任何影响。采用rdma技术获取数据的通信开销较小;但是,rdma只是一个通信技术,数据存储能力较弱、且不具备容错保障功能。


技术实现思路

1、本技术提供了一种的数据读写的方法、装置和系统,能够节省数据读写的通信开销、提高数据读写的效率。

2、第一方面,提供一种数据读写的方法,该方法包括:第一节点接收来自第二节点的第一消息,所述第一消息用于请求向所述第一节点写入第一数据;所述第一节点向所述第二节点发送第二消息,所述第二消息中包括第一环形缓存区的地址信息,所述第一环形缓存区的地址信息用于所述第二节点将所述第一数据写入所述第一环形缓存区,其中,所述第一节点的远程直接内存访问rdma内存空间中包括多个环形缓存区,所述多个环形缓存区中包括所述第一环形缓存区;所述第一节点接收来自所述第二节点的第三消息,所述第三消息中包括所述第二节点的内存空间的地址信息;所述第一节点根据所述第二节点的内存空间的地址信息,从所述第二节点的内存空间读出所述第一数据,读出后的所述第一数据存储在所述第一环形缓存区中。

3、基于上述技术方案,当第二节点(producer)需要向第一节点(broker)写入第一数据时,第一节点将rdma内存空间中可用于存储第一数据的第一环形缓存区的地址信息发送给第二节点;第二节点可以根据第一环形缓存区的地址信息,直接将第一数据写入第一节点的第一环形缓存区中;或者,第二节点可以向第一节点发送自身的内存空间的地址信息,第一节点根据第二节点的内存空间的地址信息,可以从第二节点的内存空间直接读出第一数据。该方案相比于已有的apache kafka系统中producer与broker之间基于tcp通信,本技术实施例中第二节点与第一节点可以通过rdma模块直接通信,无需通过“三次握手”建立第二节点与第一节点之间的连接,且本技术实施例中在第二节点将第一数据写入第一节点的rdma内存空间或者第一节点从第二节点的内存空间读出第一数据的过程中第一数据无需经过rdma模块,也无需经过处理器的其他处理,从而能够节省数据读写的通信开销、提高数据读写的效率。

4、结合第一方面,在第一方面的某些实现方式中,所述第一节点将所述第一环形缓存区中的所述第一数据存储至所述第一节点的磁盘中。可以使第一数据永久化存储在第一节点的磁盘中,系统掉电的情况下可以恢复第一数据,从而提高第一数据的容错保障。

5、结合第一方面,在第一方面的某些实现方式中,所述第一环形缓存区为第一针指向的环形缓存区,所述第一指针指向的环形缓存区与第二指针指向的环形缓存区不同,所述第一指针指向的环形缓存区是将要写入数据的环形缓存区,所述第二指针指向的环形缓存区是正在读出数据的环形缓存区,所述多个环形缓存区中包括所述第一指针指向的环形缓存区和所述第二指针指向的环形缓存区。基于上述方案,在第一指针指向的环形缓存区与第二指针指向的环形缓存区不同的情况下,将第一数据存储于第一指针指向的环形缓存区,可以避免第二指针指向的环形缓存区存储的数据被第一数据覆盖。

6、第二方面,提供一种数据读写的方法,该方法包括:第二节点向第一节点发送第一消息,第一消息用于请求向所述第一节点写入第一数据;所述第二节点接收来自所述第一节点的第二消息,所述第二消息中包括第一环形缓存区的地址信息,其中,所述第一节点的远程直接内存访问rdma内存空间中包括多个环形缓存区,所述多个环形缓存区中包括所述第一环形缓存区;所述第二节点根据所述第一环形缓存区的地址信息,将所述第一数据写入所述第一环形缓存区;或者,所述第二节点向所述第二节点发送第三消息,所述第三消息中包括所述第二节点的内存空间的地址信息,所述第二节点的内存空间的地址信息用于所述第一节点从所述第二节点的内存空间读出所述第一数据。

7、第二方面所提供的方法是与第一方面相对应的第二节点侧的方法,其有益效果可以直接参考第一方面。

8、结合第二方面,在第二方面的某些实现方式中,所述第一环形缓存区为第一指针指向的环形缓存区,所述第一指针指向的环形缓存区与第二指针指向的环形缓存区不同,所述第一指针指向的环形缓存区是将要写入数据的环形缓存区,所述第二指针指向的环形缓存区是正在读出数据的环形缓存区,所述多个环形缓存区中包括所述第一指针指向的环形缓存区和所述第二指针指向的环形缓存区。

9、第三方面,提供一种数据读写的方法,该方法包括:第一节点接收来自第三节点的第四消息,所述第四消息用于请求从所述第一节点读出第二数据;若所述第一节点的第二环形缓存区中包括所述第二数据,则所述第一节点向所述第三节点发送第五消息,所述第五消息中包括所述第二环形缓存区的地址信息,其中,所述第一节点的远程直接内存访问rdma内存空间中包括多个环形缓存区,所述多个环形缓存区中包括所述第二环形缓存区;所述第一节点接收来自所述第三节点的第六消息,所述第六消息中包括所述第三节点的内存空间的地址信息;所述第一节点根据所述第三节点的内存空间的地址信息,将所述第二数据从所述第三环形缓存区写入所述第三节点的内存空间。

10、基于上述技术方案,当第三节点(consumer)需要从第一节点(broker)读出第二数据时,第三节点向第一节点发送用于请求从第一节点读出第二数据的消息;若第一节点的rdma内存空间中的第二环形缓存区存储有第二数据,则第一节点将第二环形缓存区的地址信息发送给第三节点;第三节点可以根据第二环形缓存区的地址信息,直接从第一节点的第二环形缓存区读出第二数据。或者,第三节点可以向第一节点发送自身的内存空间的地址信息,第一节点根据第三节点的内存空间的地址信息,可以将第二数据直接写入第三节点的内存空间。该方案相比于已有的apache kafka系统中producer与broker之间基于tcp通信,本技术实施例中第三节点与第一节点可以通过rdma模块直接通信,无需通过“三次握手”建立第三节点与第一节点之间的连接,且本技术实施例中在第三节点将第二数据从第一节点的rdma内存空间读出或者第一节点将第二数据写入第三节点的内存空间的过程中第二数据无需经过rdma模块,也无需经过处理器的其他处理,从而能够节省数据读写的通信开销、提高数据读写的效率。

11、结合第三方面,在第三方面的某些实现方式中,所述第二环形缓存区为第三指针指向的环形缓存区,所述第三指针指向的环形缓存区与第四指针指向的环形缓存区不同,所述第三指针指向的环形缓存区是将要读出数据的环形缓存区,所述第四指针指向的环形缓存区是正在写入数据的环形缓存区,所述多个环形缓存区中包括所述第三指针指向的环形缓存区和所述第四指针指向的环形缓存区。基于上述方案,在第三指针指向的环形缓存区与第四指针指向的环形缓存区不同的情况下,第一节点向第三节点发送包括第二环形缓存区的地址信息的第五消息,可以避免正在写入的数据会覆盖掉将要读出的第二数据。

12、结合第三方面,在第三方面的某些实现方式中,所述方法还包括:若所述第一节点的所有环形缓存区中不包括所述第二数据,但所述第一节点的磁盘中包括所述第二数据,则所述第一节点将所述第二数据从所述磁盘中读出至第三环形缓存区,其中,所述多个环形缓存区中包括所述第三环形缓存区;所述第一节点向所述第三节点发送第七消息,所述第七消息中包括所述第三环形缓存区的地址信息;所述第一节点接收来自所述第三节点的所述第六消息,所述第六消息中包括所述第三节点的内存空间的地址信息;所述第一节点根据所述第三节点的内存空间的地址信息,将所述第二数据从所述第三环形缓存区写入所述第三节点的内存空间。

13、第四方面,提供一种数据读写的方法,该方法包括:第三节点向第一节点发送第四消息,所述第四消息用于请求从所述第一节点读出第二数据;若所述第一节点的第二环形缓存区中包括所述第二数据,则所述第三节点接收来自所述第一节点的第五消息,所述第五消息中包括所述第二环形缓存区的地址信息,其中,所述第一节点的远程直接内存访问rdma内存空间中包括多个环形缓存区,所述多个环形缓存区中包括所述第二环形缓存区;所述第三节点根据所述第二环形缓存区的地址信息,从所述第二环形缓存区读出所述第二数据;或者,所述第三节点向所述第一节点发送第六消息,所述第六消息中包括所述第三节点的内存空间的地址信息,所述第三节点的内存空间的地址信息用于所述第一节点将所述第二数据从所述第二环形缓存区写入所述第三节点的内存空间。

14、第四方面所提供的方法是与第三方面相对应的第三节点侧的方法,其有益效果可以直接参考第三方面。

15、结合第四方面,在第四方面的某些实现方式中,所述第二环形缓存区为第三指针指向的环形缓存区,所述第三指针指向的环形缓存区与第四指针指向的环形缓存区不同,所述第三指针指向的环形缓存区是将要读出数据的环形缓存区,所述第四指针指向的环形缓存区是正在写入数据的环形缓存区,所述多个环形缓存区中包括所述第三指针指向的环形缓存区和所述第四指针指向的环形缓存区。

16、结合第四方面,在第四方面的某些实现方式中,所述方法还包括:若所述第一节点的第二环形缓存区中不包括所述第二数据,则所述第三节点接收来自所述第一节点的第七消息,所述第七消息中包括第三环形缓存区的地址信息,其中,所述多个环形缓存区中包括所述第三环形缓存区;所述第三节点根据所述第三环形缓存区的地址信息,从所述第三环形缓存区读出所述第二数据;或者,所述第三节点向所述第一节点发送所述第六消息,所述第六消息中包括所述第三节点的内存空间的地址信息,所述第三节点的内存空间的地址信息用于所述第一节点将所述第二数据从所述第三环形缓存区写入所述第三节点的内存空间。

17、第五方面,提供一种数据读写装置,该装置包括:收发单元,用于接收来自第二节点的第一消息,所述第一消息用于请求向所述装置写入第一数据;所述收发单元还用于,向所述第二节点发送第二消息,所述第二消息中包括第一环形缓存区的地址信息,所述第一环形缓存区的地址信息用于所述第二节点将所述第一数据写入所述第一环形缓存区,其中,所述装置的远程直接内存访问rdma内存空间中包括多个环形缓存区,所述多个环形缓存区中包括所述第一环形缓存区;所述收发单元还用于,接收来自所述第二节点的第三消息,所述第三消息中包括所述第二节点的内存空间的地址信息;处理单元,用于根据所述第二节点的内存空间的地址信息,从所述第二节点的内存空间读出所述第一数据,读出后的所述第一数据存储在所述第一环形缓存区中。

18、结合第五方面,在第五方面的某些实现方式中,所述处理单元还用于,将所述第一环形缓存区中的所述第一数据存储至所述装置的磁盘中。

19、结合第五方面,在第五方面的某些实现方式中,所述第一环形缓存区为第一针指向的环形缓存区,所述第一指针指向的环形缓存区与第二指针指向的环形缓存区不同,所述第一指针指向的环形缓存区是将要写入数据的环形缓存区,所述第二指针指向的环形缓存区是正在读出数据的环形缓存区,所述多个环形缓存区中包括所述第一指针指向的环形缓存区和所述第二指针指向的环形缓存区。

20、第六方面,提供一种数据读写装置,该装置包括:收发单元,用于向第一节点发送第一消息,第一消息用于请求向所述第一节点写入第一数据;所述收发单元还用于,接收来自所述第一节点的第二消息,所述第二消息中包括第一环形缓存区的地址信息,其中,所述第一节点的远程直接内存访问rdma内存空间中包括多个环形缓存区,所述多个环形缓存区中包括所述第一环形缓存区;处理单元,用于根据所述第一环形缓存区的地址信息,将所述第一数据写入所述第一环形缓存区;或者,所述收发单元还用于,向所述第二节点发送第三消息,所述第三消息中包括所述装置的内存空间的地址信息,所述装置的内存空间的地址信息用于所述第一节点从所述装置的内存空间读出所述第一数据。

21、结合第六方面,在第六方面的某些实现方式中,所述第一环形缓存区为第一针指向的环形缓存区,所述第一指针指向的环形缓存区与第二指针指向的环形缓存区不同,所述第一指针指向的环形缓存区是将要写入数据的环形缓存区,所述第二指针指向的环形缓存区是正在读出数据的环形缓存区,所述多个环形缓存区中包括所述第一指针指向的环形缓存区和所述第二指针指向的环形缓存区。

22、第七方面,提供一种数据读写装置,该装置包括:收发单元,用于接收来自第三节点的第四消息,所述第四消息用于请求从所述装置读出第二数据;所述收发单元还用于,若所述装置的第二环形缓存区中包括所述第二数据,则向所述第三节点发送第五消息,所述第五消息中包括所述第二环形缓存区的地址信息,其中,所述装置的远程直接内存访问rdma内存空间中包括多个环形缓存区,所述多个环形缓存区中包括所述第二环形缓存区;所述收发单元还用于,接收来自所述第三节点的第六消息,所述第六消息中包括所述第三节点的内存空间的地址信息;处理单元,用于根据所述第三节点的内存空间的地址信息,将所述第二数据从所述第三环形缓存区写入所述第三节点的内存空间。

23、结合第七方面,在第七方面的某些实现方式中,所述第二环形缓存区为第三指针指向的环形缓存区,所述第三指针指向的环形缓存区与第四指针指向的环形缓存区不同,所述第三指针指向的环形缓存区是将要读出数据的环形缓存区,所述第四指针指向的环形缓存区是正在写入数据的环形缓存区,所述多个环形缓存区中包括所述第三指针指向的环形缓存区和所述第四指针指向的环形缓存区。

24、结合第七方面,在第七方面的某些实现方式中,所述处理单元还用于,若所述装置的所有环形缓存区中不包括所述第二数据,但所述装置的磁盘中包括所述第二数据,则将所述第二数据从所述磁盘中读出至第三环形缓存区,其中,所述多个环形缓存区中包括所述第三环形缓存区;所述收发单元还用于,向所述第三节点发送第七消息,所述第七消息中包括所述第三环形缓存区的地址信息;所述收发单元还用于,接收来自所述第三节点的所述第六消息,所述第六消息中包括所述第三节点的内存空间的地址信息;所述处理单元还用于,根据所述第三节点的内存空间的地址信息,将所述第二数据从所述第三环形缓存区写入所述第三节点的内存空间。

25、第八方面,提供一种数据读写装置,该装置包括:收发单元,用于向第一节点发送第四消息,所述第四消息用于请求从所述第一节点读出第二数据;所述收发单元还用于,若所述第一节点的第二环形缓存区中包括所述第二数据,则接收来自所述第一节点的第五消息,所述第五消息中包括所述第二环形缓存区的地址信息,其中,所述第一节点的远程直接内存访问rdma内存空间中包括多个环形缓存区,所述多个环形缓存区中包括所述第二环形缓存区;处理单元,用于根据所述第二环形缓存区的地址信息,从所述第二环形缓存区读出所述第二数据;或者,所述收发单元还用于,向所述第一节点发送第六消息,所述第六消息中包括所述装置的内存空间的地址信息,所述装置的内存空间的地址信息用于所述第一节点将所述第二数据从所述第二环形缓存区写入所述装置的内存空间。

26、结合第八方面,在第八方面的某些实现方式中,所述第二环形缓存区为第三指针指向的环形缓存区,所述第三指针指向的环形缓存区与第四指针指向的环形缓存区不同,所述第三指针指向的环形缓存区是将要读出数据的环形缓存区,所述第四指针指向的环形缓存区是正在写入数据的环形缓存区,所述多个环形缓存区中包括所述第三指针指向的环形缓存区和所述第四指针指向的环形缓存区。

27、结合第八方面,在第八方面的某些实现方式中,所述收发单元还用于,若所述第一节点的第二环形缓存区中不包括所述第二数据,则接收来自所述第一节点的第七消息,所述第七消息中包括第三环形缓存区的地址信息,其中,所述多个环形缓存区中包括所述第三环形缓存区;所述处理单元还用于,根据所述第三环形缓存区的地址信息,从所述第三环形缓存区读出所述第二数据;或者,所述收发单元还用于,向所述第一节点发送所述第六消息,所述第六消息中包括所述装置的内存空间的地址信息,所述装置的内存空间的地址信息用于所述第一节点将所述第二数据从所述第三环形缓存区写入所述装置的内存空间。

28、第九方面,提供一种数据读写设备,包括处理器和收发器,所述收发器用于接收计算机代码或指令,并传输至所述处理器,所述处理器运行所述计算机代码或指令,如第一方面或第一方面任意可能的实现方式中的方法。

29、第十方面,提供一种数据读写设备,包括处理器和收发器,所述收发器用于接收计算机代码或指令,并传输至所述处理器,所述处理器运行所述计算机代码或指令,如第二方面或第二方面任意可能的实现方式中的方法。

30、第十一方面,提供一种数据读写设备,包括处理器和收发器,所述收发器用于接收计算机代码或指令,并传输至所述处理器,所述处理器运行所述计算机代码或指令,如第三方面或第三方面任意可能的实现方式中的方法。

31、第十二方面,提供一种数据读写设备,包括处理器和收发器,所述收发器用于接收计算机代码或指令,并传输至所述处理器,所述处理器运行所述计算机代码或指令,如第四方面或第四方面任意可能的实现方式中的方法。

32、第十三方面,提供了一种数据读写系统,包括:如第五方面或第七方面所述的数据读写装置,以及,如第六方面所述的数据读写装置,以及,如第八方面所述的数据读写装置。

33、第十四方面,提供了一种计算机可读存储介质,所述计算机可读介质存储有计算机程序;所述计算机程序在计算机上运行时,使得计算机执行上述第一方面至第四方面以及第一方面至第四方面中任一种可能实现方式中的方法。

34、第十五方面,提供一种计算机程序产品,包括计算机程序代码,所述计算机程序代码被计算机执行时使得上述第一方面至第四方面以及第一方面至第四方面中任一种可能实现方式中的方法被实现。

35、上述第五方面至第十五方面提供的方案,用于实现或配合实现上述第一方面至第四方面提供的方法,因此能够与第一方面至第四方面达到相同或相应的有益效果,此处不再进行赘述。

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