一种分布式tgt节点间的通信方法、装置及设备与流程

文档序号:17079418发布日期:2019-03-09 00:04阅读:409来源:国知局
一种分布式tgt节点间的通信方法、装置及设备与流程

本申请涉及分布式存储技术领域,特别涉及一种分布式tgt节点间的通信方法、装置、设备及计算机可读存储介质。



背景技术:

tgt是linux系统下的一种分布式存储协议软件,利用tgt提供的服务接口可以对分布式节点对应的块存储设备进行数据访问。然而,现有技术中,部署了tgt的分布式节点之间仅存在有系统底层上的存储关联,并没有在用户态中实现tgt集群层面上的通信,如此将越来越无法满足大规模集群间大量的数据存储与交互需求。鉴于此,提供一种解决上述问题的方法已经成为本领域技术人员所亟需关注的。



技术实现要素:

本申请的目的在于提供一种分布式tgt节点间的通信方法、装置、设备及计算机可读存储介质,以便利用tgt集群层面的通信实现分布式tgt节点间的数据请求和应答。

为解决上述技术问题,本申请提供了一种分布式tgt节点间的通信方法,包括:

开启事件监测;

在监测到应答事件后调用预设tgt应答线程,以便建立与对方节点的通信连接,接收所述对方节点发送的第一请求数据,生成并发送第一应答数据至所述对方节点;

在监测到请求事件后调用预设tgt请求线程,以便请求与目标节点建立通信连接,向所述目标节点发送第二请求数据,并接收所述目标节点发送的第二应答数据。

可选地,所述接收所述对方节点发送的第一请求数据,生成并发送第一应答数据至所述对方节点包括:

根据负载均衡算法确定出预设子线程中的性能最佳子线程;

调用所述性能最佳子线程以监控与所述对方节点的通信连接,以便在接收到所述第一请求数据后,生成并发送所述第一应答数据至所述对方节点。

可选地,在所述调用所述性能最佳子线程以监控与所述对方节点的通信连接之后,还包括:

设置所述性能最佳子线程的线程锁。

可选地,所述生成并发送第一应答数据至所述对方节点包括:

调用预设封装编译器,将生成的所述第一应答数据封装为字符串型数据后发送至所述对方节点;

所述向所述目标节点发送第二请求数据包括:

调用所述预设封装编译器,将生成的所述第二请求数据封装为字符串型数据后发送至所述目标节点。

本申请还提供了一种分布式tgt节点间的通信装置,包括:

监测模块,用于开启事件监测;

应答模块,用于在监测到应答事件后调用预设tgt应答线程,以便建立与对方节点的通信连接,接收所述对方节点发送的第一请求数据,生成并发送第一应答数据至所述对方节点;

请求模块,用于在监测到请求事件后调用预设tgt请求线程,以便请求与目标节点建立通信连接,向所述目标节点发送第二请求数据,并接收所述目标节点发送的第二应答数据。

可选地,所述应答模块包括:

负载均衡单元,用于根据负载均衡算法确定出预设子线程中的性能最佳子线程;

执行单元,用于调用所述性能最佳子线程以监控与所述对方节点的通信连接,以便在接收到所述第一请求数据后,生成并发送所述第一应答数据至所述对方节点。

可选地,所述执行单元还用于:在所述调用所述性能最佳子线程以监控与所述对方节点的通信连接之后,设置所述性能最佳子线程的线程锁。

可选地,所述应答模块具体用于:调用预设封装编译器,将生成的所述第一应答数据封装为字符串型数据后发送至所述对方节点;

所述请求模块具体用于:调用所述预设封装编译器,将生成的所述第二请求数据封装为字符串型数据后发送至所述目标节点。

本申请还提供了一种分布式tgt节点间的通信设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序以实现如上所述的任一种分布式tgt节点间的通信方法的步骤。

本申请还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被处理器执行时用以实现如上所述的任一种分布式tgt节点间的通信方法的步骤。

本申请所提供的分布式tgt节点间的通信方法包括:开启事件监测;在监测到应答事件后调用预设tgt应答线程,以便建立与对方节点的通信连接,接收所述对方节点发送的第一请求数据,生成并发送第一应答数据至所述对方节点;在监测到请求事件后调用预设tgt请求线程,以便请求与目标节点建立通信连接,向所述目标节点发送第二请求数据,并接收所述目标节点发送的第二应答数据。可见,本申请利用预设tgt应答线程与预设tgt请求线程的并行处理,可在不影响主线程的监控状态的情况下,同时处理多个应答事件和请求事件,有序地实现了在tgt集群层面的数据通信,保障了节点中的多项应用服务同时正常运行,有效地提高了产品性能和用户体验。本申请所提供的分布式tgt节点间的通信装置、设备及计算机可读存储介质可以实现上述分布式tgt节点间的通信方法,同样具有上述有益效果。

附图说明

为了更清楚地说明现有技术和本申请实施例中的技术方案,下面将对现有技术和本申请实施例描述中需要使用的附图作简要的介绍。当然,下面有关本申请实施例的附图描述的仅仅是本申请中的一部分实施例,对于本领域普通技术人员来说,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图,所获得的其他附图也属于本申请的保护范围。

图1为本申请所提供的一种分布式tgt节点间的通信方法的流程图;

图2为本申请所提供的分布式tgt节点间的通信方法在一具体实施例中的示意图;

图3为本申请所提供的一种分布式tgt节点间的通信装置的结构框图。

具体实施方式

本申请的核心在于提供一种分布式tgt节点间的通信方法、装置、设备及计算机可读存储介质,以便利用tgt集群层面的通信实现分布式tgt节点间的数据请求和应答。

为了对本申请实施例中的技术方案进行更加清楚、完整地描述,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行介绍。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本申请实施例公开了一种分布式tgt节点间的通信方法,参照图1所示,该方法主要包括以下步骤:

s1:开启事件监测;若监测到应答事件,则进入s2;若监测到请求事件,则进入s3。

具体地,本实施例所提供的分布式tgt节点间的通信方法,具体可应用于各个分布式tgt节点中,并且,具体可对libevent消息通信组件中的相关命令、接口进行封装部署而实现。其中,作为底层的网络库,libevent支持windows、linux、*bsd和macos等多种操作系统,并且支持多种i/o多路复用技术,例如epoll事件触发等,具有轻量级、高性能的特点,已经被广泛应用。具体地,可以采用epoll事件触发和监听的方式来构建监听器,以便在本节点产生请求事件和应答事件后调用对应的预设线程去处理。

s2:调用预设tgt应答线程,以便建立与对方节点的通信连接,接收对方节点发送的第一请求数据,生成并发送第一应答数据至对方节点。

s3:调用预设tgt请求线程,以便请求与目标节点建立通信连接,向目标节点发送第二请求数据,并接收目标节点发送的第二应答数据。

具体地,所说的应答事件,即本节点需要响应来自于对方节点的数据请求、向对方节点提供数据访问服务的事件;而所说的请求事件,即本节点需要向目标节点请求数据、从目标节点处获取数据访问服务的事件。

而又由于一个分布式tgt节点中运行有多种服务进程,所以可能会同时生成许多请求事件和应答事件,因此,本申请所提供的分布式tgt节点间的通信方法中,具体设置了两个相互独立的线程及其管道pipe,以便分别来处理应答事件和请求事件,

其中,预设tgt应答线程用于处理应答事件。对于一个待处理的应答事件,首先可建立与对方节点的通信连接,从而接收对方节点发送来的第一请求数据,以便根据该第一请求数据为对方节点提供数据访问服务,向对方节点发送第一应答数据。

容易理解的是,本节点在与对方节点建立通信连接的过程中,可按照系统的通信协议进行握手处理、身份验证等一系列相关操作,本领域技术人员可自行选择并设置实现,本申请对此并不进行限定。

此外,预设tgt请求线程用于处理请求事件。当本节点中的某项服务中需要获取目标节点的数据等时,可首先向目标节点请求建立通信连接,继而向其发送第二请求数据,以便目标节点响应于本节点的数据请求,而将生成的第二应答数据发送至本节点。

本申请所提供的分布式tgt节点间的通信方法包括:开启事件监测;在监测到应答事件后调用预设tgt应答线程,以便建立与对方节点的通信连接,接收对方节点发送的第一请求数据,生成并发送第一应答数据至对方节点;并在监测到请求事件后调用预设tgt请求线程,以便请求与目标节点建立通信连接,向目标节点发送第二请求数据,并接收目标节点发送的第二应答数据。可见,本申请利用预设tgt应答线程与预设tgt请求线程的并行处理,可在不影响主线程的监控状态的情况下,同时处理多个应答事件和请求事件,有序地实现了在tgt集群层面的数据通信,保障了节点中的多项应用服务同时正常运行,有效地提高了产品性能和用户体验。

本申请所提供的分布式tgt节点间的通信方法,在上述内容的基础上,作为一种优选实施例,接收对方节点发送的第一请求数据,生成并发送第一应答数据至对方节点包括:

根据负载均衡算法确定出预设子线程中的性能最佳子线程;

调用性能最佳子线程以监控与对方节点的通信连接,以便在接收到第一请求数据后,生成并发送第一应答数据至对方节点。

具体地,由于在许多应答事件的实际应用场景中,一个节点可能会同时接收到多个对方节点发送来的数据请求,并且,一个对方节点的数据访问过程可能会持续较长的一段时间,所以若仅由一个线程处理所有的应答事件,会大大影响系统的处理性能和效率。因此,在本实施例中,在调用预设tgt应答线程处理应答事件时,还可以再进一步开启多个子线程,每当接收到一个应答事件后便可以将其分配给其中一个子线程进行处理,以防止一个应答事件处理过程中出现的阻塞现象而引起整个系统的功能瘫痪。

具体地,在从多个预设子线程中选择处理当前刚生成的应答事件的子线程时,具体可以采用负载均衡算法来确定,由此选择出的子线程即为性能最佳子线程。例如,所说的性能最佳子线程可具体选择为目前所负责的应答事件个数最小的预设子线程。一般地,在linux系统中,可具体通过向线程池中写入对应的字符来激活所选择的性能最佳子线程。

具体可参考图2,图2为本申请所提供的分布式tgt节点间的通信方法的示意图。每个预设子线程也均可以通过注册监听器来对其负责的应答事件进行监控以待处理。每当新增了一个应答事件后,预设子线程便可以将该应答事件列入监控对象,以便在接收到该应答事件的对方节点发送的第一请求数据后,对其进行应答处理。

本申请所提供的分布式tgt节点间的通信方法,在上述内容的基础上,作为一种优选实施例,调用性能最佳子线程以监控与对方节点的通信连接之后,还包括:

设置性能最佳子线程的线程锁。

具体地,由于分布式系统具有数据一致性和同步性的要求,所以不同的访问节点不允许对同一数据文件同时进行读写访问。因此,为了保障数据的安全使用和分布式系统的正常运维,在本实施例中,每当生成一个应答事件并为其分配了性能最佳子线程进行应答处理后,可进一步为该性能最佳子线程设置对应的线程锁,以便通过线程锁的信号量标识该应答事件对相关数据文件的访问权限,进而防止其他线程对该数据文件的同时访问。

还需要说明的是,由于请求事件是以本节点为主动发起的,因此不会存在因同时处理多个请求事件而造成系统瘫痪的情况,因此,针对于请求事件,既可以不调用子线程进行处理,也可以类似于应答事件的处理方式而分配给相关的子线程进行处理,本领域技术人员可根据实际应用情况而自行选择并设置实现,本申请对此并不进行限定。

本申请所提供的分布式tgt节点间的通信方法,在上述内容的基础上,作为一种优选实施例,生成并发送第一应答数据至对方节点包括:

调用预设封装编译器,将生成的第一应答数据封装为字符串型数据后发送至对方节点;

向目标节点发送第二请求数据包括:

调用预设封装编译器,将生成的第二请求数据封装为字符串型数据后发送至目标节点。

具体地,由于libevent消息通信组件中所支持的通信数据一般均为字符串型数据,而在许多实际应用场景中,分布式tgt节点间的通信数据还常包括一些其他类型的数据,例如文本型数据、数值型数据等。因此,在本实施例中,还可以设置对应的预设封装编译器,用于将其他型数据封装转换为字符串型数据,或者将字符串型数据编译转换为其他型数据。

由此,当预设tgt应答线程或者其子线程在应答处理对方节点的第一请求数据时,可具体利用预设封装编译器将生成的第一应答数据封装为字符串型数据后再发送至对方节点。

类似地,预设tgt请求线程或者其子线程在向目标节点进行数据请求时,可具体利用预设封装编译器将生成的第二请求数据封装为字符串型数据后再发送至目标节点。相对应地,一个节点在接收到经封装后的字符串型数据时,可以调用预设封装编译器进行编译,以转换为原有数据类型。

下面对本申请所提供的分布式tgt节点间的通信装置进行介绍。请参阅图3,图3为本申请所提供的一种分布式tgt节点间的通信装置的结构框图;包括:

监测模块1,用于开启事件监测;

应答模块2,用于在监测到应答事件后调用预设tgt应答线程,以便建立与对方节点的通信连接,接收对方节点发送的第一请求数据,生成并发送第一应答数据至对方节点;

请求模块3,用于在监测到请求事件后调用预设tgt请求线程,以便请求与目标节点建立通信连接,向目标节点发送第二请求数据,并接收目标节点发送的第二应答数据。

可见,本申请利用预设tgt应答线程与预设tgt请求线程的并行处理,可在不影响主线程的监控状态的情况下,同时处理多个应答事件和请求事件,有序地实现了在tgt集群层面的数据通信,保障了节点中的多项应用服务同时正常运行,有效地提高了产品性能和用户体验。

在上述内容基础上,本申请所提供的分布式tgt节点间的通信装置中,作为一种优选实施例,应答模块2包括:

负载均衡单元,用于根据负载均衡算法确定出预设子线程中的性能最佳子线程;

执行单元,用于调用性能最佳子线程以监控与对方节点的通信连接,以便在接收到第一请求数据后,生成并发送第一应答数据至对方节点。

在上述内容基础上,本申请所提供的分布式tgt节点间的通信装置中,作为一种优选实施例,执行单元还用于:在调用性能最佳子线程以监控与对方节点的通信连接之后,设置性能最佳子线程的线程锁。

在上述内容基础上,本申请所提供的分布式tgt节点间的通信装置中,作为一种优选实施例,应答模块2具体用于:调用预设封装编译器,将生成的第一应答数据封装为字符串型数据后发送至对方节点;

请求模块3具体用于:调用预设封装编译器,将生成的第二请求数据封装为字符串型数据后发送至目标节点。

进一步地,本申请还公开了一种分布式tgt节点间的通信设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序以实现如上所述的任一种分布式tgt节点间的通信方法的步骤。

进一步地,本申请还公开了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被处理器执行时用以实现如上所述的任一种分布式tgt节点间的通信方法的步骤。

本申请所提供的分布式tgt节点间的通信装置、设备及计算机可读存储介质的具体实施方式与上文所描述的分布式tgt节点间的通信方法可相互对应参照,这里就不再赘述。

本申请中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

还需说明的是,在本申请文件中,诸如“第一”和“第二”之类的关系术语,仅仅用来将一个实体或者操作与另一个实体或者操作区分开来,而不一定要求或者暗示这些实体或者操作之间存在任何这种实际的关系或者顺序。此外,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上对本申请所提供的技术方案进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请的保护范围内。

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