分布式松耦合构架中的解耦方法及分布式松耦合构架平台的利记博彩app

文档序号:6353974阅读:630来源:国知局
专利名称:分布式松耦合构架中的解耦方法及分布式松耦合构架平台的利记博彩app
技术领域
本发明涉及控制领域,尤其涉及一种实现基于ftOtobuf和TCP/IP的一种分布式松耦合构架中的解耦方法及分布式松耦合构架平台。
背景技术
机器人领域有一个非常现实的问题,有非常多不同类型不同型号的传感器,同时也有非常多不同算法,不同的算法需要组合不同的传感器,这就需要软件工程师在设计应用程序构架的时候把其设计成为分布式松耦合的构架。即,将软件的各个部分划分为多个相对独立的模块,做到真正意义上的解耦。这里应该指出的是“耦合与解耦”是“设计模式 Design Patterns”与“软件架构设计”这两个领域的最核心词汇。其中“耦合”指的是“一个模块的实现依赖于另一个模块的实现”。
然而,耦合度高的框架给后续程序造成的最大影响在于代码复用困难。对于耦合度高的代码来说,代码复用需要经历“解耦与提炼”、“代码复制”、“代码重封装”三个步骤。 由于这种“解耦与提炼”对于技术积累并没有任何贡献,因此可归为某种“不增值活动”,而如何避免“不增值活动”则是提高效率的关键。解决这种复用困难的根本途径在于在开发过程中,模块之间的解耦,解耦后的模块可以直接被复用并不经修改组装到所有需要用到该模块的项目中,节省大量时间与人力资源。
代码的过度耦合将导致调试过程中,对问题的“分割与定位”的难度增加。相对于模块分明,解耦彻底的代码而言,一份杂糅且耦合的代码,对问题的分割与定位往往需要更多的时间代价。而在对问题定位以后,修正BUG的过程中又需要牵涉到其余模块的代码以及开发人员。所以对于一个机器人系统来说,做到代码上得解耦是非常有必要的。
然而,模块之间的解耦并不是意味着模块之间就完全没有联系了。模块之间比然还是有一部分数据是需要交互的,但是直接的通信势必又会造成模块之间的耦合。模块之间必然还是有一部分数据是需要交互的,但是直接的通信势必又会造成模块之间的耦合。
因此,在现有技术中,如何实现分布式松耦合构架中的解耦方法,以解决现有解耦带来性能上很大开销的问题,是现今一大技术难题。
还有,现有的运行操作系统也多种多样,有Iinux系列,有windows系列,有嵌入式系列的,也有移动终端平台系列的,包括IOS和Android等,能够支持尽量多得操作系统具有很大的意义,而现有技术中很难实现这一点。发明内容
本发明的第一目的在于提供一种分布式松耦合构架中的解耦方法,以解决现有技术中解耦带来性能上很大开销的技术问题。
本发明的第二目的在于提供一种分布式松耦合构架平台,,以解决现有技术中解耦带来性能上很大开销的技术问题。
一种分布式松耦合构架中的解耦方法,包括以下步骤(1)把构架解耦成若干个独立的应用程序,每一应用程序作为一节点,使用一个主服务 Core来维护他们之间的实际物理连接,节点与节点之间、节点与主服务Core之间采用点对点的TCP/IP通信;(2)在运行之前,节点先完成对主服务Core的注册,节点从主服务Core获得其它节点的连接信息、订阅和发布消息的信息,其中发布消息为本节点能够提供的包括运行结果数据在内的数据信息,所述订阅消息为本节点需要的数据信息;(3)运行后,节点把需要交互的信息封装和分片进行消息发布,来点至点传送至对应的节点,接收方节点接收到对应消息后,进行分片重组后启动相应的处理线程,并根据使用的模式决定是否把处理结果回传。
步骤⑵具体包括在注册时,节点将本节点需要订阅消息、本节点包括端口信息在内的地址连接信息预先在主服务Core进行登记;在节点要预发布任何类型消息之前,节点先从主服务Core获得订阅此消息节点的所有信息。
接收方节点接收到对应消息的处理过程为从本节点所在终端的网络实现层接收到打包的数据,然后经网络抽象层调用后,再经过反串行化,后把打包的数据解析成程序理解的数据然后上送到远程调用逻辑层;远程调用逻辑层根据数据内容校验,然后去调用相应绑定的回调函数,并且把回调函数返回的结果串行化后,通过网络抽象层的调用后通过网络实现层发送出去。
还设置log记录系统,其log记录系统使用统一的分级接口,设置可打印和/或网络传送;所有日志发送给主服务,主服务会把具体的日志整合后发送给逆杀/合鹿夢或者任意希望接收日志的节点。
任意节点发布的任意类型消息,用一个消息记录软件记录安装时间顺序记录成文件保存下来,并且使用消息回放软件安装时间顺序,把记录的消息回放出去。
节点是通过设置RPC模块来进行数据的序列化和反序列化、数据的分包和组包过程、对外提供统一的RPC调用接口、和RPC服务开启接口 ;RPC过程为首先把需要发送的数据序列化,分包,然后再发送,当接收数据后组包,反序列化数据,然后从线程池中调用一个空闲线程去执行处理函数,最后把处理结果安装发送的方式回传给发送节点的RPC调用方法。
并且,每个节点设置一个线程池来进行节点所需线程的调度工作,以最大限度地减小线程调度的代价。
主服务Core是全局唯一的,且主服务的ip地址和端口是从环境变量中获取的,包括线程池个数,缓存区大小,网络超时时间,网络协议类型在内的配置由编译时确定,在运行的过程中每个节点都需要知道主服务的IP地址以及端口号,此信息通过当前运行PC中的环境变量SUR0_MASTER_URI中获取。
一种分布式松耦合构架平台,包括主服务Core和把构架解耦成若干个独立的应用程序作为的节点,其中,主服务Core,用于建立各个节点之间的连接;并且管理所有节点之间的数据联系; 节点用于从主服务Core获得其它节点的连接信息、订阅和发布消息的信息,把需要交互的信息封装和分片进行消息发布,来点至点传送至对应的节点,接收到对应消息后,进行分片重组后启动相应的处理线程,并根据使用的模式决定是否把处理结果回传。
所述节点进一步包括RPC模块用于进行节点与节点之间的包括数据的序列化和反序列化、数据的分包和组包、RPC调用、和RPC服务开启在内的数据处理;其中RPC模块中主要包含1)网络发送接收模块用于建立节点与节点之间、节点与主服务Core之间进行点对点的TCP/IP通信;2)线程池模块一个节点有且仅有一个线程池,线程池大小会根据运行环境动态增长, 上限和不同操作系统有关,线程池统一解决线程之间切换的代价,并且使创建线程的代价将为最低。
3)序列化与反序列化模块利用ftOtobuf把网络接收的数据反序列化,并且把 Protobuf类型的数据序列化为可用于网络发送字符流;4)远程调用逻辑模块利用接收到的经过反序列化的ftOtobuf类型数据,启动单独的线程去执行相应的处理函数;消息路由接口模块通过消息路由实现模块获取到所需要的消息的来源,或者希望发送的数据的去向;用户接口模块以API的形式提供给用户使用的接口,在RPC模块以及消息路由接口模块之上,通过封装RPC和消息路由接口模块的内容,提供简便的接口供编程者使用;用户接口模块主要提供的功能有节点初始化,节点关闭,节点状态查询,发布消息接口,订阅消息接口,申请服务接口,申请客户端接口,日志控制接口等;用户可以使用的内容仅限于用户接口层所提供的内容。
主服务除了具有上述模块之外,额外还具有消息路由实现的模块,消息路由实现的模块根据各个节点的物理地址,消息订阅发布状态在内节点信息,实现消息的路由过程, 并且可以通过消息路由接口模块来进行路由通道的查询。
一种分布式松耦合构架中的解耦方法,包括以下步骤(1)把构架解耦成若干个独立的应用程序,每一应用程序作为一节点,使用一个主服务 Core来维护他们之间的实际物理连接,节点与节点之间、节点与主服务Core之间采用点对点的TCP/IP通信;(2)节点先进行对主服务Core注册节点操作,注册成功后返回和此节点通信的端口号,该节点监听此端口号,节点注册完成,主服务Core和节点物理连接建立完毕;(3)节点预开启某一服务,先向主服务Core注册服务,Core返回注册成功与否状态;注册成功后则服务开启成功,注册失败则开启失败,返回错误代码;(4)节点预使用某一服务,先向主服务Core询问该服务的具体位置,主服务core返回该服务包括是否存在或存在位置的信息,如果该服务不存在,则使用该服务失败;如果存在,则直接通过节点的RPC调用此服务。
本专利描述的SuroOS也是为了解决机器人复杂的需求而制作的平台。他是一个高效的分布式松耦合构架平台,其应用但不局限于机器人领域。以下仅以机器人领域来进行举例说明。SuroOS通过提供统一的松耦合通信接口,使得各个模块在代码表现上相对独立,来达到解耦的目的。
1)点对点(Peer -to-Peer)SuroOS这个系统在运行时是由一系列进程组合而成,这些进程可以运行在不同的主7机上,不同的主机通过网络相互连接。每个进程之间的通信都是通过网络来完成的,网络可以是传统意义上得互联网,局域网,或者是无线网络。进程之间的消息传递是点对点的,也就是说消息不存在中转得过程,想要消息的进程可以直接从消息来源的进程得到数据。
点到点得结构需要一种方法去使得每个进程可以实时的找到于他们连接的进程的位置。我们称这种服务为消息路由的服务,而实现消息路由层的进程叫做Core,Core 除了提供消息路由功能外,还提供了其他一些方便的服务。
2)高效SuroOS是一个分布式构架平台,分布式系统相对于非分布式而言最大的问题在于性能上会显得比非分布式来的差。而SuroOS也同样摆脱不了这个问题,但是其在性能方面做了很大程度的努力。
首先SuroOS目前的版本的语言是C++,C++相对于Java,Python等动态性语言在运行效率上具有得天独厚的优势。其次,SuroOS内部数据串行化和反串行化使用的 ftx)t0bUf,Pr0t0bUf是Google公司提出并使用的通信协议、数据存储的结构化数据串行化方法。其相对XML来说具有大约5-10倍的性能优势。在主频2. 5GHz,双核的电脑上,一个数据量为10的消息来回传递一次平均耗时为0. 2毫秒。
以下表1分别是两个进程使用SuroOS来回传递消息1000次,所花的平均时间,时间单位为毫秒(ms)。本机指的是两个进程运行在同一个电脑上,网络指两个进程运行在不同电脑上,通过网络进行通信。数据量指的是每次消息占用的字节数。
权利要求
1.一种分布式松耦合构架中的解耦方法,其特征在于,包括以下步骤(1)把构架解耦成若干个独立的应用程序,每一应用程序作为一节点,使用一个主服务 Core来维护他们之间的实际物理连接,节点与节点之间、节点与主服务Core之间采用点对点的TCP/IP通信;(2)在运行之前,节点先完成对主服务Core的注册,节点从主服务Core获得其它节点的连接信息、订阅和发布消息的信息,其中发布消息为本节点能够提供的包括运行结果数据在内的数据信息,所述订阅消息为本节点需要的数据信息;(3)运行后,节点把需要交互的信息封装和分片进行消息发布,来点至点传送至对应的节点,接收方节点接收到对应消息后,进行分片重组后启动相应的处理线程,并根据使用的模式决定是否把处理结果回传。
2.如权利要求1所述的方法,其特征在于,步骤(2)具体包括在注册时,节点将本节点需要订阅消息、本节点包括端口信息在内的地址连接信息预先在主服务Core进行登记;在节点要预发布任何类型消息之前,节点先从主服务Core获得订阅此消息节点的所有信息。
3.如权利要求1所述的方法,其特征在于,接收方节点接收到对应消息的处理过程为从本节点所在终端的网络实现层接收到打包的数据,然后经网络抽象层调用后,再经过反串行化,后把打包的数据解析成程序理解的数据然后上送到远程调用逻辑层;远程调用逻辑层根据数据内容校验,然后去调用相应绑定的回调函数,并且把回调函数返回的结果串行化后,通过网络抽象层的调用后通过网络实现层发送出去。
4.如权利要求1所述的方法,其特征在于,设置log记录系统,其log记录系统使用统一的分级接口,设置可打印和/或网络传送;所有日志发送给主服务,主服务会把具体的日志整合后发送给逆凌/合荐序或者任意希望接收日志的节点。
5.如权利要求1所述的方法,其特征在于,任意节点发布的任意类型消息,用一个消息记录软件记录安装时间顺序记录成文件保存下来,并且使用消息回放软件安装时间顺序, 把记录的消息回放出去。
6.如权利要求1所述的方法,其特征在于,节点是通过设置RPC模块来进行数据的序列化和反序列化、数据的分包和组包过程、对外提供统一的RPC调用接口、和RPC服务开启接口 ;RPC过程为首先把需要发送的数据序列化,分包,然后再发送,当接收数据后组包,反序列化数据,然后从线程池中调用一个空闲线程去执行处理函数,最后把处理结果安装发送的方式回传给发送节点的RPC调用方法。
7.如权利要求1所述的方法,其特征在于,还包括每个节点设置一个线程池来进行节点所需线程的调度工作,以最大限度地减小线程调度的代价。
8.如权利要求7所述的方法,其特征在于,主服务Core是全局唯一的,且主服务的ip 地址和端口是从环境变量中获取的,包括线程池个数,缓存区大小,网络超时时间,网络协议类型在内的配置由编译时确定,在运行的过程中每个节点都需要知道主服务的IP地址以及端口号,此信息通过当前运行PC中的环境变量SURO_MASTER_URI中获取。
9.一种分布式松耦合构架平台,其特征在于,包括主服务Core和把构架解耦成若干个独立的应用程序作为的节点,其中,主服务Core,用于建立各个节点之间的连接;并且管理所有节点之间的数据联系;节点用于从主服务Core获得其它节点的连接信息、订阅和发布消息的信息,把需要交互的信息封装和分片进行消息发布,来点至点传送至对应的节点,接收到对应消息后,进行分片重组后启动相应的处理线程,并根据使用的模式决定是否把处理结果回传。
10.如权利要求9所述的一种分布式松耦合构架平台,其特征在于,所述节点进一步包括RPC模块用于进行节点与节点之间的包括数据的序列化和反序列化、数据的分包和组包、RPC调用、和RPC服务开启在内的数据处理;其中RPC模块中主要包含1)网络发送接收模块用于建立节点与节点之间、节点与主服务Core之间进行点对点的TCP/IP通信;2)线程池模块一个节点有且仅有一个线程池,线程池大小会根据运行环境动态增长, 上限和不同操作系统有关,线程池统一解决线程之间切换的代价,并且使创建线程的代价将为最低;3)序列化与反序列化模块利用I^rotobuf把网络接收的数据反序列化,并且把 Protobuf类型的数据序列化为可用于网络发送字符流;4)远程调用逻辑模块利用接收到的经过反序列化的ftOtobuf类型数据,启动单独的线程去执行相应的处理函数;消息路由接口模块通过消息路由实现模块获取到所需要的消息的来源,或者希望发送的数据的去向;用户接口模块以API的形式提供给用户使用的接口,在RPC模块以及消息路由接口模块之上,通过封装RPC和消息路由接口模块的内容,提供简便的接口供编程者使用;用户接口模块主要提供的功能有节点初始化,节点关闭,节点状态查询,发布消息接口,订阅消息接口,申请服务接口,申请客户端接口,日志控制接口等;用户可以使用的内容仅限于用户接口层所提供的内容。
11.如权利要求9所述的一种分布式松耦合构架平台,其特征在于,主服务额外还具有消息路由实现的模块,消息路由实现的模块根据各个节点的物理地址,消息订阅发布状态在内节点信息,实现消息的路由过程,并且可以通过消息路由接口模块来进行路由通道的查询。
12.—种分布式松耦合构架中的解耦方法,其特征在于,包括以下步骤(1)把构架解耦成若干个独立的应用程序,每一应用程序作为一节点,使用一个主服务 Core来维护他们之间的实际物理连接,节点与节点之间、节点与主服务Core之间采用点对点的TCP/IP通信;(2)节点先进行对主服务Core注册节点操作,注册成功后返回和此节点通信的端口号,该节点监听此端口号,节点注册完成,主服务Core和节点物理连接建立完毕;(3)节点预开启某一服务,先向主服务Core注册服务,Core返回注册成功与否状态;注册成功后则服务开启成功,注册失败则开启失败,返回错误代码;(4)节点预使用某一服务,先向主服务Core询问该服务的具体位置,主服务core返回该服务包括是否存在或存在位置的信息,如果该服务不存在,则使用该服务失败;如果存在,则直接通过节点的RPC调用此服务。
全文摘要
一种分布式松耦合构架中的解耦方法,发明采用通用的消息机制与发布、订阅者模式(又称观察者模式)实现模块之间的通信。或者,采用客户端和服务端的模块来实现模块之间的通信。在本发明中,各个模块(即把构架解耦成若干个独立的应用程序,每一应用程序作为一节点),节点使用一个主服务Core来维护他们之间的实际物理连接,节点与节点之间、节点与主服务Core之间采用点对点的TCP/IP通信。各个应用程序之间的数据交互,通过主服务知道节点中哪些数据需要交互,而且节点只需要将需要交互的数据彼此进行通信即可,即只关注其的输入(订阅的消息)和输出(发布的消息),而不去关心消息输入的具体实现方法,做到真正意义上的解耦。
文档编号G06F9/46GK102523225SQ201110433850
公开日2012年6月27日 申请日期2011年12月22日 优先权日2011年12月22日
发明者朱玲芬, 沈慧, 陶熠昆 申请人:浙江国自机器人技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1