分布式模块间通信方法
技术领域
本发明属于计算机技术领域,具体涉及一种分布式模块间通信方法。
背景技术
随着信息时代的迅速发展,人们需要处理的信息量日益增大,所以,现有技术中出现了分布式环境下的并行处理方法。通过并行处理方法,由主进程向每个结点的子进程动态地分配一个任务,然后等待各子进程返回结果。因此,实现了由若干个结点的子进程共同处理一项任务的效果,从而提高了信息处理速度。
但是,在实现本发明的过程中,发明人发现,现在技术至少存在以下缺点:在面向对象语言中的类(CLASS)在运行期间生成实例,而这些实例只存在于单台物理机器上,因此,在分布式环境下,各台物理机器上的实例不能彼此访问,从而限制了对实例进行并行调度的应用。其中,面向对象语言包括:C++、JAVA。
发明内容
针对现有技术存在的缺陷,本发明提供一种分布式模块间通信方法,各模块与C++、JAVA中类的概念类似,同时,分布于不同物理节点的模块间可以相互通信,从而有利于在各模块间进行并行调度。
本发明采用的技术方案如下:
本发明提供一种分布式模块间通信方法,应用于包括一个以上模块和管理平台的系统中;各个所述模块存在于分布式环境中的各物理节点,每一个所述模块代表一组数据以及对该组数据进行操作的集合;所述分布式模块间通信方法包括以下步骤:
S1,被用户触发的应用程序启动本端模块,得到本端模块实例;
S2,所述本端模块实例向所述管理平台发送模块激活指令;所述模块激活指令中携带有需要被激活的远端模块的模块类型、模块实例个数和负载均衡策略;
S3,所述管理平台根据所述模块激活指令启动一个以上远端模块,得到模块实例池;其中,所述模块实例池包括一个以上远端模块实例以及所述负载均衡策略;其中,每一个所述远端模块实例具有唯一模块实例标识;所述模块实例池归属于发起模块激活指令的所述本端模块实例;
S4,所述本端模块实例根据所述模块实例池中的一个以上所述模块实例标识寻址与所述模块实例标识对应的一个以上所述远端模块实例;
S5,所述本端模块实例与S4寻址到的一个以上所述远端模块实例通信。
优选的,所述管理平台包括平台本端和一个以上平台远端,所述平台本端和所述一个以上平台远端为一个逻辑平台;其中,所述平台本端用于接收所述本端模块实例发送的所述模块激活指令;
S3中,所述管理平台根据所述模块激活指令启动一个以上远端模块具体包括以下步骤;
S31,所述平台本端接收所述本端模块实例发送的所述模块激活指令;
S32,所述平台本端根据所述模块激活指令生成一个以上任务请求;
S33,所述平台本端将一个以上所述任务请求分发给所述一个以上平台远端;
S34,所述平台远端接收并执行所述任务请求;其中,执行所述任务请求为启动所述远端模块。
优选的,S3中,每一个所述远端模块实例中具有的所述唯一模块实例标识由所述管理平台分配。
优选的,S5中,所述通信方式包括:将所述模块实例池告知与所述模块实例池中的所有模块实例标识对应的远端模块实例。
优选的,S5之后,还包括:
S6,所述模块实例池中的所有模块实例标识对应的远端模块实例之间相互通信。
优选的,S5中,所述通信方式还包括:
S51,所述本端模块实例向归属于所述本端模块实例的一个所述模块实例池发送任务;所述任务包括一个以上任务请求;每一个所述任务请求中携带有指定的远端模块实例标识;
S52,所述模块实例池接收所述任务,并读取所述模块实例池中的所述负载均衡策略,判断读取到的所述负载均衡策略是否为空,如果判断结果为是,则执行S53-S54,如果判断结果为否,则执行S55-S57;
S53,所述模块实例池将所述任务请求发送给与所述指定的远端模块实例标识对应的远端模块实例;
S54,所述远端模块实例执行所述任务请求;
S55,所述模块实例池选择符合所述负载均衡策略的远端模块实例;
S56,所述模块实例池将所述任务请求发送给S55选择到的所述远端模块实例;
S57,S55选择到的所述远端模块实例执行所述任务请求。
优选的,S51中,所述任务请求为远端模块的操作访问。
优选的,所述远端模块的操作访问包括两种以上操作以及与所述操作对应的操作参数表。
优选的,所述操作包括:启动本端模块的操作、停止本端模块的操作和对本端模块数据的操作;其中,模块实例标识参数存在于与所述停止本端模块的操作和对本端模块数据的操作对应的操作参数表中。
优选的,S3之后,还包括:
所述本端模块实例向所述模块实例池发送模块去激活指令;
所述模块实例池停止所述模块实例池中的所有所述远端模块实例;同时将与所述远端模块实例对应的远端模块实例标识归还给所述管理平台。
本发明的有益效果如下:
本发明提供一种分布式模块间通信方法,各模块与C++、JAVA中类的概念类似,同时,由管理平台向各个远端模块实例和本端模块实例分配唯一的模块实例标识,可以实现本端模块实例与各个远端模块实例之间、以及各个远端模块实例之间、以及本端模块实例与自身的通信,并且,本端模块实例与各个远端模块实例的类型可以相同或不同,从而有利于在各模块间灵活进行并行调度。
附图说明
图1为本发明提供的分布式模块间通信方法的流程示意图;
图2为本发明提供的管理平台进行任务分发的结构示意图;
图3为本发明提供的分布式模块间通信方法的原理图。
具体实施方式
如图1所示,本发明提供一种分布式模块间通信方法,应用于包括一个以上模块和管理平台的系统中;各个所述模块存在于分布式环境中的各物理节点,每一个模块代表一组数据以及对该组数据进行操作的集合;所述分布式模块间通信方法包括以下步骤:
S1,被用户触发的应用程序启动本端模块,得到本端模块实例;
本发明中,启动模块后即得到模块实例,其中,模块的概念为一组数据以及对该组数据进行操作的集合,模块变为模块实例的过程与类变为类的实例的过程相似。
S2,所述本端模块实例向所述管理平台发送模块激活指令;所述模块激活指令中携带有需要被激活的远端模块的模块类型、模块实例个数和负载均衡策略。
其中,远端模块的模块类型包括但不限于矩阵模块和分布式文件模块。本发明中,本端模块实例可以通过管理平台激活一类远端模块,例如:本端模块实例激活矩阵模块或分布式文件模块等,从而实现本端模块实例与各类远端模块实例的通信。
S3,所述管理平台根据所述模块激活指令启动一个以上远端模块,得到模块实例池;其中,所述模块实例池包括一个以上远端模块实例以及所述负载均衡策略;其中,每一个所述远端模块实例具有唯一模块实例标识;所述模块实例池归属于发起模块激活指令的所述本端模块实例;其中,每一个所述远端模块实例中具有的所述唯一模块实例标识由所述管理平台分配。
本步骤为模块激活过程,在模块被激活之后,还包括模块被去激活的过程,详见步骤S7、S8。
需要说明的是,向各个远端模块实例分配的模块实例标识的作用是标识分布式环境下的各个远端模块实例。在具体实现上,可以只向各个远端模块实例分配一个全局唯一的标识符;也可以向各个远端模块实例分配局部唯一标识符,然后通过局部唯一标识符与若干其它类型的标识符结合在一起,构成全局唯一标识符,例如,通过三元标识符组(机器节点标识符,进程标识符,局部唯一标识符)实现全局唯一标识作用。本发明对远端模块实例所具有的唯一模块实例标识的实现方式并不限制。
本发明中,如图2所示,为管理平台进行任务分发的结构示意图,管理平台包括平台本端和一个以上平台远端,所述平台本端和所述一个以上平台远端为一个逻辑平台;其中,所述平台本端用于接收所述本端模块实例发送的所述模块激活指令;本步骤中,所述管理平台根据所述模块激活指令启动一个以上远端模块具体包括以下步骤:
S31,所述平台本端接收所述本端模块实例发送的所述模块激活指令;
S32,所述平台本端根据所述模块激活指令生成一个以上任务请求;
S33,所述平台本端将一个以上所述任务请求分发给所述一个以上平台远端;
S34,所述平台远端接收并执行所述任务请求;其中,执行所述任务请求为启动所述远端模块。
S4,所述本端模块实例根据所述模块实例池中的一个以上所述模块实例标识寻址与所述模块实例标识对应的一个以上所述远端模块实例;
S5,本端模块实例与S4寻址到的一个以上所述远端模块实例通信。
本步骤中,通信方式包括:将所述模块实例池告知与所述模块实例池中的所有模块实例标识对应的远端模块实例,从而可以实现模块实例池中的所有模块实例标识对应的远端模块实例之间相互通信。例如:与本端模块实例A对应的模块实例池A中存储有远端模块实例B、C、D的标识,则本端模块实例A将远端模块实例B、C、D的标识同时告知远端模块实例B、C、D,因此,远端模块实例B获知远端模块实例C、D的标识,同时,远端模块实例C获知远端模块实例B、D的标识,远端模块实例D获知远端模块实例B、C的标识,从而可以实现远端模块实例B、C、D之间的通信。上述通信方式在具体实现上为广播。当然,本领域普通技术人员可以理解,本端模块实例A也可以采用单播或组播的方式将其获知的远端模块实例标识告知特定的远端模块实例,例如:本端模块实例A将远端模块实例B、C、D的标识同时只告知远端模块实例B和C,从而实现远端模块实例B和C之间的通信。
S5中,所述通信方式还包括:
S51,所述本端模块实例向归属于所述本端模块实例的一个所述模块实例池发送任务;所述任务包括一个以上任务请求;每一个所述任务请求中携带有指定的远端模块实例标识;其中,任务请求为远端模块的操作访问。远端模块的操作访问包括两种以上操作以及与所述操作对应的操作参数表。所述操作包括:启动本端模块的操作、停止本端模块的操作和对本端模块数据的操作;其中,模块实例标识参数存在于与所述停止本端模块的操作和对本端模块数据的操作对应的操作参数表中,而不存在于与启动本端模块的操作对应的操作参数表中。
S52,所述模块实例池接收所述任务,并读取所述模块实例池中的所述负载均衡策略,判断读取到的所述负载均衡策略是否为空,如果判断结果为是,则执行S53-S54,如果判断结果为否,则执行S55-S57;
S53,所述模块实例池将所述任务请求发送给与所述指定的远端模块实例标识对应的远端模块实例;
S54,所述远端模块实例执行所述任务请求;
S55,所述模块实例池选择符合所述负载均衡策略的远端模块实例;
S56,所述模块实例池将所述任务请求发送给S55选择到的所述远端模块实例;
S57,S55选择到的所述远端模块实例执行所述任务请求。
S3之后,还包括对模块去激活部分,具体为:
S7,所述本端模块实例向所述模块实例池发送模块去激活指令;
S8,所述模块实例池停止所述模块实例池中的所有所述远端模块实例;同时将与所述远端模块实例对应的远端模块实例标识归还给所述管理平台。
如图3所示,为本发明提供的分布式模块间通信方法的一个具体实施例,A类模块实例1与B类模块实例1位于同一物理节点,而B类模块实例2和B类模块实例3分布于与A类模块实例1的物理节点不同的物理节点,通过任务驱动的方式,A类模块实例1既可以与位于同一物理节点的B类模块实例1通信,同时A类模块实例1还可以与位于不同物理节点的B类模块实例2和B类模块实例3通信。并且,A类模块实例与B类模块实例的模块类型既可以相同,也可以不相同。也就是说,本发明既可以实现相同类型的模块实例之间的通信,也可以实现不同类型的模块实例之间的通信。
需要说明的是,本发明中,本端模块和远端模块是两个相对的概念,其中,本端模块为任务的发起者,远端模块为任务的接收者,并且,本端模块和远端模块并不局限于两个分布在不同物理节点的模块,也可以为同一个模块,例如:本端模块A可以向自身发起任务,然后由本端模块A接收该任务并处理。同样的,本发明中,平台本端和平台远端是两个相对的概念,其中,平台本端为本端模块所在的平台,平台远端为远端模块所在的平台,平台本端为通信的发起者,平台远端为通信的接收者,并且,平台本端和平台远端并不局限于两个分布在不同物理节点的平台,也可以为同一个平台,例如:平台本端A可以向自身发起通信,然后由平台本端A接收该通信。
因此,通过使用本发明提供的分布式模块间通信方法,各模块与C++、JAVA中类的概念类似,同时,由管理平台向各个远端模块实例和本端模块实例分配唯一的模块实例标识,可以实现本端模块实例与各个远端模块实例之间、以及各个远端模块实例之间、以及本端模块实例与自身的通信,并且,本端模块实例与各个远端模块实例的类型可以相同或不同,从而有利于在各模块间灵活进行并行调度。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。