一种适用于分布式环境的网络通信方法

文档序号:8002070阅读:214来源:国知局
一种适用于分布式环境的网络通信方法
【专利摘要】本发明涉及一种适用于分布式环境的网络通信方法。本发明首先在分布式环境里的各个节点上分别对通信服务模块和客户端模块进行自定义配置,主要配置通信服务模块监听端口、客户端模块标识等信息;然后在各个节点上分别启动通信服务模块和客户端模块,以通信服务进程和客户端进程两个独立的进程形式运行;然后单个节点上的客户端进程与通信服务进程之间,以及两个节点之间的通信服务进程之间会自动建立全双工非阻塞式通信连接;采用基于消息驱动的消息总线型通信方法。本发明解决了分布式环境下有频繁而灵活通信需求的瓶颈问题,可应用于云计算各个节点之间的通信上。
【专利说明】一种适用于分布式环境的网络通信方法
【技术领域】
[0001]本发明涉及网络通信【技术领域】,特别是一种适用于分布式环境的网络通信方法。【背景技术】
[0002]分布式环境下尤其是云计算体系架构中,保证各个计算机节点之间灵活而稳定的通信是非常重要。而如今越来越多的云计算解决方案中各个节点的通信采用web service形式提供接口给用户;这种方式使用方便,但同时会带来以下问题:
[0003]一是通信形式固定,不能满足于对通信有灵活需求的要求。web service为了实现简易性,会以XML文件的形式将通信的信息格式提供给用户,用户虽然可以通过改变各个接口来达到通信要求的目的,但是对于一个不懂axis2c架构的程序员来说,这样会非常麻烦;
[0004]二是通信量小,现有采用web service形式通信的云计算解决方案,如eucalyptus,节点之间每一次通信都必须只能是一个小的功能参数列表,而无法做到一次通信实现多个功能的相关处理;
[0005]三是开销大,正是由于第二项所述,每一个功能通信都必须建立一次连接,当节点间通信并发量比较大时,很容易出现通信瓶颈,导致通信异常;
[0006]四是不灵活,很多分布式环境下的通信方式由于没有采用全双工非阻塞方式,导致节点之间的通信非常依赖:必须是管理节点向非管理节点主动发送或接收。

【发明内容】

[0007]本发明解决的技术问题在于提供一种适用于分布式环境的高灵活性的网络通信方式,提供一种全双工非阻塞、基于消息驱动的消息总线型通信方法;解决了为满足各个节点之间频繁通信而必须大量建立基于http协议的单双工阻塞形式的短连接而存在高消耗低效率的问题;提升分布式环境下各个节点之间的通信效率,增强灵活性和稳定性。
[0008]本发明解决上述技术问题的技术方案是:
[0009]包括如下步骤:
[0010]步骤1:分布式环境下的各个节点分别对通信模块和客户端模块进行自定义配置,主要配置步骤2中启动进程的进程标识、监听端口等信息;
[0011]步骤2:各个节点分别启动通信服务模块和客户端模块,以通信服务进程和客户端进程两个独立的进程形式运行;
[0012]步骤3:单个节点上的客户端进程与通信服务进程之间,以及节点之间的通信服务进程之间建立通信连接;
[0013]步骤4:客户端进程向本节点的通信服务进程发送携带有目的客户端标识的消息;
[0014]步骤5:通信服务进程受到消息后解析消息获得目的客户端标识;
[0015]步骤6:通信服务进程采取相应的路由选择算法,选取现存可用路径中的最优路径;
[0016]步骤7:通信服务进程根据选取的最优路径将消息转发到目的客户端节点的目的通信服务进程;
[0017]步骤8:目的客户端通信服务进程将消息送达其客户端进程;
[0018]步骤9:目的客户端进程消费消息执行相应操作,并将操作结果以步骤4至步骤8的过程向客户进程回送反馈消息包。
[0019]所述的通信模块和客户端模块分别是分布式环境下各个节点计算机的两个独立运行的进程;
[0020]所述的通信模块是指分布式环境下负责消息转发的、具有路由功能的模块,该模块只负责传递消息,与具体的业务逻辑无关;
[0021]所述的客户端模块是指分布式环境下消息的产生与消费者,与具体功能相关。
[0022]所述的通信模块进程和客户端进程,以及,通信进程与通信进程之间自动建立全双工非阻塞式通信连接;可以同时互发消息,并且监听线程及时反馈。
[0023]客户端模块与通信模块之间传递两种消息一数据消息和控制消息,它们之间是分离通信;
[0024]所述的数据消息是指具体业务功能相关消息,控制消息是指客户端向服务端注册等信息,数据消息与控制消息分离通信是指这两种消息分别走不同的socket通道。
[0025]通信服务模块之间建立的是一种基于消息驱动方式的消息总线,围绕消息的产生与处理展开的,并依靠消息循环机制来实现的一条大通道。
[0026]所述路由选择算法是指通信模块具有路由器类似的各种机制和算法。
[0027]传递的消息采用了类似json形式的消息包格式,满足json整形、字符串、数组、字典等格式。
[0028]本发明提供了一种全双工非阻塞、基于消息驱动的消息总线型通信方法;解决了为满足各个节点之间频繁通信而必须大量建立基于http协议的单双工阻塞形式的短连接而存在高消耗低效率的问题;提升分布式环境下各个节点之间的通信效率,增强灵活性和稳定性。
【专利附图】

【附图说明】
[0029]下面结合附图对本发明进一步说明:
[0030]图1为本发明的流程图;
[0031]图2为本发明的一个具体应用流程图;
[0032]图3为本发明在分布式环境下典型的部署场景。
【具体实施方式】
[0033]如图1所示,本发明的通信方法包括如下步骤:
[0034]步骤1:分布式环境下的各个节点分别对通信模块和客户端模块进行自定义配置,主要配置步骤2中启动进程的进程标识、监听端口等信息;
[0035]步骤2:各个节点分别启动通信服务模块和客户端模块,以通信服务进程和客户端进程两个独立的进程形式运行;[0036]步骤3:单个节点上的客户端进程与通信服务进程之间,以及两个节点的通信服务进程之间会自动建立全双工非阻塞式通信连接;
[0037]步骤4:客户端进程A向本节点的通信服务进程A发送携带有目的客户端标识的消息;
[0038]步骤5:通信服务进程A受到消息后解析消息获得目的客户端标识;
[0039]步骤6:通信服务进程A采取相应的路由选择算法,选取现存可用路径中的最优路径;
[0040]步骤7:通信服务进程A根据选取的最优路径将消息转发到目的客户端节点的目的通信服务进程B ;
[0041]步骤8:通信服务进程B将消息送达客户端进程B ;
[0042]步骤9:客户端进程B消费消息执行相应操作,并将操作结果以步骤4至步骤8的过程向客户进程A回送反馈消息包。
[0043]所述的通信模块和客户端模块分别是分布式环境下各个节点计算机的两个独立运行的进程;
[0044]所述的通信模块是指分布式环境下负责消息转发的、具有路由功能的模块,该模块只负责传递消息,与具体的业务逻辑无关;
[0045]所述的客户端模块是指分布式环境下消息的产生与消费者,与具体功能相关。
[0046]所述的通信方式是全双工非阻塞的,通信模块进程和客户端进程,通信进程与通信进程之间可以同时互发消息,并且监听线程是及时反馈的;
[0047]所述的数据消息是指具体业务功能相关消息,控制消息是指客户端向服务端注册等信息,数据消息与控制消息分离通信是指这两种消息分别走不同的socket通道;
[0048]所述的通信服务模块之间建立的是一种基于消息驱动方式的消息总线,围绕消息的产生与处理展开的,并依靠消息循环机制来实现的一条大通道;
[0049]所述采用相应路由选择算法是指通信模块具有路由器类似的各种机制和算法;
[0050]所述的消息采用了类似json形式的消息包格式,满足json整形、字符串、数组、字典等格式。
[0051]如图2、3所示,本发明分布式环境下的每台物理机即各个节点都会安装一个通信服务模块gTunnel和客户端模块Client,然后该台物理机上的客户即Client通过连接此gTunnel进行消息的收发,而gTunnel通过和其他物理机上的gTunnel通信实现消息在网络上的转发。任意一个gTunnel的客户可以和任意一个同样连接到此gTunnel网络上的其他客户进行通信。
[0052]本发明的gTunnel有两个版本,python版和cpp版,下面以python版来描述在Iinux环境下的具体的实施方式。
[0053]首先创建几个gTunnel需要用到的目录:
[0054]$sudo mkdir-p/var/{run, log}/gTunnel
[0055]$sudo chmod a+rw/var/{run, log}/gTunnel
[0056]分别创建了 gTunnel和Client运行时socket和日志log的存放目录。
[0057]然后进行相关配置,如果有超过一台物理机运行gTunnel,则每台物理机都要有一份gTunnel的软件包,每台物理机上的gTunnel都要分别进行配置,配置监听什么IP和端口(指Iinux环境可能有多张网卡的情况),连接什么IP和端口,哪台负责监听哪台负责连接(其实gTunnel没有主从之分,大家都是对等的,只要配置好让各个gTunnel相互连接起来即可)。
[0058]gTunnelLauncher.py 配置相关代码:
[0059]if_name_==//_main_//:
[0060]_1 iStenPort= [("",10088),( “ ”,10086),]#========》这里设置监听的端口
[0061]_connectList=[(〃192.168.5.125",10088),(“12.13.14.15”,10089)]#========
》设置连接的目标IP和端口。
[0062]然后,配置好gTunnel之后,被连接的gTunnel先启动,再启动要连接的gTunnel。
[0063]$python gTunnelLauncher.py
[0064]然后配置Client客户,gTunnel的客户是根据不同的业务功能自定义的,例如云计算解决方案中,Client可能是具体的功能实现方法,例如创建虚拟机、关闭虚拟机、重启虚拟机、挂载卸载逻辑卷等。这里仅以python版gTunnel自带的一个简单Client进行说明。
[0065]client, py配置相关代码:
[0066]if_name_==//_main_//:
[0067]#gTunnel control interface
[0068]handler=kvPacketHandler ()
[0069]nm=〃gtclient_desktop〃#===》唯一要设置的是这里,每个client的名字都必须唯一的。
[0070]然后,启动Client。启动Client后,就可以到/var/log/gTunnel/目录下查看对应gTunnel服务端和Client客户端的通信日志了。
[0071]现假设客户端A要向客户端B发送创建虚拟机的消息,首先客户端A会将消息发送给本地节点的gTunnelA,然后gTunnelA有一个路由选择的相关过程选取到达gTunnelB的最优路径,假设中间经历了 gTunnelC和gTunnelD,然后消息到达gTunnelB, gTunnelB发现消息目的客户端为客户端B,则将消息推送给本地客户端,本地客户端解析消息并进行创建虚拟机的相关操作,最后将操作结果按以上流程发回给客户端A。流程如图2所示。
【权利要求】
1.一种适用于分布式环境的网络通信方法,其特征在于:包括如下步骤: 步骤1:分布式环境下的各个节点分别对通信模块和客户端模块进行自定义配置,主要配置步骤2中启动进程的进程标识、监听端口等信息; 步骤2:各个节点分别启动通信服务模块和客户端模块,以通信服务进程和客户端进程两个独立的进程形式运行; 步骤3:单个节点上的客户端进程与通信服务进程之间,以及节点之间的通信服务进程之间建立通信连接; 步骤4:客户端进程向本节点的通信服务进程发送携带有目的客户端标识的消息; 步骤5:通信服务进程受到消息后解析消息获得目的客户端标识; 步骤6:通信服务进程采取相应的路由选择算法,选取现存可用路径中的最优路径;步骤7:通信服务进程根据选取的最优路径将消息转发到目的客户端节点的目的通信服务进程; 步骤8:目的客户端通信服务进程将消息送达其客户端进程; 步骤9:目的客户端进程消费消息执行相应操作,并将操作结果以步骤4至步骤8的过程向客户进程回送反馈消息包。
2.根据权利要求1所述的网络通信方法,其特征在于:所述的通信模块和客户端模块分别是分布式环境下各个节点计算机的两个独立运行的进程; 所述的通信模块是指分布式环境下负责消息转发的、具有路由功能的模块,该模块只负责传递消息,与具体的业务逻辑无关; 所述的客户端模块是指分布 式环境下消息的产生与消费者,与具体功能相关。
3.根据权利要求1所述的网络通信方法,其特征在于:所述的通信模块进程和客户端进程,以及,通信进程与通信进程之间自动建立全双工非阻塞式通信连接;可以同时互发消息,并且监听线程及时反馈。
4.根据权利要求2所述的网络通信方法,其特征在于:所述的通信模块进程和客户端进程,以及,通信进程与通信进程之间自动建立全双工非阻塞式通信连接;可以同时互发消息,并且监听线程及时反馈。
5.根据权利要求1至4任一项所述的网络通信方法,其特征在于:客户端模块与通信模块之间传递两种消息——数据消息和控制消息,它们之间是分离通信; 所述的数据消息是指具体业务功能相关消息,控制消息是指客户端向服务端注册等信息,数据消息与控制消息分离通信是指这两种消息分别走不同的socket通道。
6.根据权利要求1至4任一项所述的网络通信方法,其特征在于:通信服务模块之间建立的是一种基于消息驱动方式的消息总线,围绕消息的产生与处理展开的,并依靠消息循环机制来实现的一条大通道。
7.根据权利要求5所述的网络通信方法,其特征在于:通信服务模块之间建立的是一种基于消息驱动方式的消息总线,围绕消息的产生与处理展开的,并依靠消息循环机制来实现的一条大通道。
8.根据权利要求1至4任一项所述的网络通信方法,其特征在于:所述路由选择算法是指通信模块具有路由器类似的各种机制和算法。
9.根据权利要求5所述的网络通信方法,其特征在于:所述路由选择算法是指通信模块具有路由器类似的各种机制和算法。
10.根据权利要求1至4任一项所述的网络通信方法,其特征在于:传递的消息采用了类似json形式的消息包格式,.满足json整形、字符串、数组、字典等格式。
【文档编号】H04L29/08GK103428270SQ201310288115
【公开日】2013年12月4日 申请日期:2013年7月9日 优先权日:2013年7月9日
【发明者】熊梦, 杨松, 莫展鹏, 季统凯 申请人:国云科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1