首页> 中国专利> 各组件进程之间统一通信的通用消息总线的实现方法

各组件进程之间统一通信的通用消息总线的实现方法

摘要

一种用于大型软件系统的各组件进程之间统一通信的通用消息总线的实现方法,包括四个步骤:(1)设置各组件进程间的通信都必须采用的统一、规范的通用消息的格式,且以session形式交互消息;(2)将每个组件划分为具有不同功能的三个阶层:通信链路层、消息分发层、业务消息处理层;(3)在系统中设置通用消息分发组件msgr,该msgr组件专用于分发各进程间交互的通用消息,并由具有通用消息中转功能的其它组件进行辅助分发;(4)各组件进程间通信的通用消息按照设定的路由算法进行分发。本发明采用统一通信的通用消息总线方法,在各进程之间传递的都是通用消息,从而大大简化各进程间的通信关系,并降低通信复杂度,克服了现有进程间通信的各种缺点。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-08-10

    未缴年费专利权终止 IPC(主分类):G06F9/54 授权公告日:20090318 终止日期:20150626 申请日:20070626

    专利权的终止

  • 2009-03-18

    授权

    授权

  • 2008-01-16

    实质审查的生效

    实质审查的生效

  • 2007-11-21

    公开

    公开

说明书

技术领域

本发明涉及一种计算机程序进程之间的通信方法,确切地说,涉及一种用于大型软件系统的各组件进程之间统一通信的通用消息总线的实现方法,属于计算机软件、尤其是大型电信软件技术领域。

背景技术

根据应用目的和实现环境的不同,计算机软件系统的不同进程间的通信可分为两种方式:同一物理实体内的进程间通信和不同物理实体内的进程间通信。

同一物理实体内的进程间通信的主要目的是实现同一计算机系统内部的相互协作的各个程序进程之间的数据共享与信息交换,由于这些程序进程所处的软件和硬件环境都是相同的,利用操作系统提供的实现机制和编程接口,用户可以方便地在程序中实现这种通信,且能够保证各进程间可以进行快速的信息交换和大量数据的共享。先进先出FIFO管道、共享内存等技术最适合用于同一计算机系统内部的进程间通信,并可以保证高效率。

不同物理实体内的进程间通信的主要目的是实现不同计算机系统中的相互协作的应用程序进程之间的数据共享与信息交换,由于应用程序进程分别运行于不同的计算机系统中,它们之间必须通过网络之间的通信协议才能实现数据共享与信息交换。基于TCP/IP协议的socket编程就是一种典型的不同物理实体内的进程间通信技术。它既可适用于客户端/服务器通信方式,也能适用于点对点通信方式。由于socket方式不受程序位置的影响,可以实现跨机器、跨网络的通信,最适用于远程的应用程序之间通信,可以简化通信的编程,当然也保证通信的可靠性。现行大多数的不同物理实体内的应用程序间的通信都是采取这种方式。

在具体实现时,究竟采用何种通信方式,需要考虑到不同进程间通信的各种实际要求,例如:通信量,通信协议,通信效率等。

目前,在大型应用软件系统中,进程间的通信非常频繁和复杂,尤其是大型的电信业务应用软件系统。首先,电信业务应用软件非常庞大,为了保证高可用性、高可靠性和可扩展性,往往要把这些软件系统分成不同的组件,而且要把各个组件分布到若干物理实体上去,并联接成网,构成一个分布式业务软件系统;这样组件各个进程之间的通信就非常频繁。其次,目前各组件进程之间往往采取直接通信的方式,由于进程数量很大,这样就造成了一个很大的网状通信网,进程间的通信不但变得非常复杂,而且给进程的管理提出了很高的要求。再者,由于各组件处理的业务消息千差万别,每个进程就需要能够处理各种不同类型的消息,严重影响了进程的业务功能。另外,由于电信业务发展很快,新的业务组件会不断地加入到原有的业务系统软件中来,新组件的进程就要和旧组件的进程进行通信。由于新业务的消息不同于原有业务软件系统所能处理的类型,这样旧的组件就必须要进行修改。

由此可见,目前组件进程间通信的上述缺点,严重影响了大型软件系统的开发和效能,已经成为业界一个急需解决的技术关键。

发明内容

有鉴于此,本发明的目的是提供一种用于大型软件系统的各组件进程之间统一通信的通用消息总线的实现方法,该方法采用通用消息总线方法,各组件进程之间传递的都是通用消息,从而使得进程间的通信关系大大简化,并降低通信复杂度,克服目前进程间通信的各种缺点。

为了达到上述目的,本发明提供了一种用于大型软件系统的各组件进程之间统一通信的通用消息总线的实现方法,其特征在于:该方法包括下列步骤:

(1)设置各组件进程间的通信都必须采用的统一、规范的通用消息的格式,且以会话session形式进行消息的交互;

(2)将每个组件划分为具有不同功能的三个阶层,从底层到高层依次为:通信链路层、消息分发层、业务消息处理层;

(3)在系统中设置通用消息分发组件msgr,该通用消息分发组件msgr专用于分发各进程间交互的通用消息,并由具有通用消息中转功能的其它组件进行辅助分发;

(4)各组件进程间通信的通用消息按照设定的路由算法进行分发。

本发明是一种用于大型软件系统的各组件进程之间统一通信的通用消息总线的实现方法,该方法的优点和效果介绍如下:

该方法采用通用消息总线进行各进程之间的通信交互,各进程间传递的都是通用消息,其中业务通信采用业务类型的消息,管理通信采用管理类型的消息,从而使得进程间的通信关系大大简化,并且显著降低了通信复杂度。

基于通用消息总线接口,使得组件的底层通信模块可以设计得非常简单,而且可以不加修改地在任何程序中使用。对于不同的外部协议消息,本发明采用在通信链路层中设置消息适配模块来进行转换,以保证这些外部协议消息能够在消息分发层以本发明通用消息的同样方式进行处理。该消息适配模块分布在不同的系统前端组件中,这样可以做到系统复杂度的分散,保证了软件系统的整体可靠性。而且,一旦需要增加新功能时,只需开发上层业务消息处理层的相关功能模块,无须修改下面两层的程序模块,对软件系统改动小,且不影响原有的各种功能模块,扩展方便。再者,本发明对组件进程的功能划分趋于合理,组件进程的三层结构层次清晰,各功能模块之间实现松耦合,进程运行时相互依赖程度较低,能够保证系统运行的可靠性。总之,本发明具有很好的工程推广应用价值和前景。

附图说明

图1是本发明用于大型软件系统的各组件进程之间统一通信的通用消息总线的实现方法的流程方框图。

图2是本发明方法中设置的通用消息字段示意图。

图3是本发明方法中将每个程序划分为不同功能的三层结构示意图。

图4是本发明方法中的路由消息转发示意图。

图5是本发明方法的一实施例:原来的SCP系统的进程关系示意图。

图6是采用本发明方法的一实施例:新SCP系统的进程关系示意图。

图7是根据路由表选路的示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明作进一步的详细描述。

参见图1,介绍本发明用于大型软件系统的各组件进程之间统一通信的通用消息总线的实现方法的具体操作步骤:

(1)设置各组件进程间的通信都必须采用的统一、规范的通用消息的格式,且以会话session形式进行消息的交互;

(2)将每个组件划分为具有不同功能的三个阶层,从底层到高层依次为:通信链路层、消息分发层、业务消息处理层;

(3)在系统中设置通用消息分发组件msgr,该通用消息分发组件msgr专用于分发各进程间交互的通用消息,并由具有通用消息中转功能的其它组件进行辅助分发;

(4)各组件进程间通信的通用消息按照设定的路由算法进行分发。

下面对上述操作步骤作具体说明:

参见图2,介绍上述步骤(1)中设置的统一、规范的通用消息格式中各个字段的名称、字符和其含义:

1)同步头(sync header):主要用于消息错位时的恢复,字段长为N个字节,自然数N≥4,其中前N-1字节和最后一个字节分别为十六进制的FF和00;组件应能识别大于4字节的同步头,当通信链路层检测到接收消息出现错位后,就清空当前缓冲区,进入寻找同步头状态,当N为4、且通信链路层接收到连续三个以上的FF并紧接一个00时,则认为已取得同步,开始接收新的消息;

2)版本号(vrsn):字段长为一个字节,正整数;

3)保留字段(reserved):字段长为一个字节,填为全0;

4)消息包总长度(packet length):是包括包头、但不包括同步头的消息包总长度,字段长为两个字节,最大包长为65535;

5)消息类型编号(message type):字段长为一个字节;

6)消息编号(message code):字段长为一个字节;

7)消息分片指示(TPDU-NR and EOT):字段长为一个字节,其最高位比特的两个不同数值分别表示该消息包是否为该消息的最后一个消息包(例如:0:是,1:不是),后7位比特表示该消息包为该消息中的消息包的顺序号,

8)源地址域编号(source domainId):字段长为一个字节;

9)源地址功能实体类型编号(source feId):字段长为一个字节;

10)源地址功能实体实例编号(source instanceId):字段长为一个字节;

11)源地址会话号(source sessionId):字段长为四个字节;

12)目的地址域编号(destination domainId):字段长为一个字节;

13)目的地址功能实体类型编号(destination feId):字段长为一个字节;

14)目的地址功能实体实例编号(destination instanceId):字段长为一个字节;

15)目的地址会话号(destination sessionId):字段长为四个字节;

16)消息序列号(sequence number):字段长为一个字节,用于同一会话中连续发送多条消息时对这些消息进行排序,以确保接收端能够以与发送端相同的顺序来处理这些消息;而消息发送端应保证同一会话中的发送消息序列号是从1开始顺序递增;

17)消息包生存时间(time to live):字段长为一个字节,用于表示转发次数,消息每被转发一次,该数值减1,减为0时丢弃该消息,以确保消息转发时不会出现无限循环;

18)消息包内容(message content):字段长为N个字节,N的取值范围:[0,65512]。

下面对上述通用消息的字段中的术语进行解释:

域编号(domainId):是指对系统运行时所在的物理机器或者系统所属的帐号进行的顺序排号,其有效取值范围为:[0,255],其中0和255分别为特殊意义的保留值:0表示本地域,255表示所有的域;

功能实体类型编号(feId):是从功能实体的类型角度对功能实体进行的顺序排号,该功能实体是指系统内完成设定功能的组件;

功能实体实例编号(instanceId):在系统运行时,同一个组件可以有多个进程实例,功能实体实例编号是对系统运行时在同一个域内的同种类型功能实体的多个进程实例而分别分配的不同的实例编号,属于域内的资源;因此对于不同域的功能实体实例,其实例编号可以取相同的值;

域编号、功能实体类型编号和功能实体实例编号的组合在软件系统范围内唯一地确定了一个功能实体的实例或进程,由该三者构成该进程的地址,分发功能模块通过该三者的组合将消息送到正确的目的进程。

会话号(sessionId):为了统一所有消息,本发明把组件进程间需要完成的所有业务交互过程都映射为会话过程。会话号(sessionId)是每一个进程内部对它的每一个会话所进行的编号,故会话号是一种本地资源,每一个进程都必须并且只能对自己的会话号进行分配,以确保本进程中任意两个活动会话的会话号是不相同的。每一次会话则由源端和目的端的功能实体域编号、功能实体类型编号、功能实体实例编号和会话号的组合唯一确定;为了在同一进程中对不同的会话进行标识,通用消息中还包含有消息的源进程和目的进程分别为该会话消息分配的会话号:源会话号和目的会话号。

本发明的通用消息分为两类:链路管理消息和业务消息。链路管理消息的消息类型编号为1,业务消息的消息类型编号为2,消息类型编号如下面的表1所示:

  消息类型编号  消息类型  注释  1  intra_msg_type_management  管理消息  用于链路的管理,不需要转发  2  intra_msg_type_service  业务消息  用于业务的运行,可能需要  消息分发功能实体转发

链路管理消息用于相互连接的两个进程互相向对方传递本链路的状态信息,需要注意的是:两个进程之间可能同时存在多个链路,因此这里的状态信息仅指本链路的状态,并不完全等同与对端进程的连接状态。链路管理消息的交互由底层的通信链路层维护,不涉及上层模块。各种链路管理消息的编号和功能说明可参见下面的表2所示:

  消息编号 消息名  注释  1 intra_register 登记  向连接对端登记本端的功能实体类型和  编号,无消息内容,需要对端确认  2 intra_retract 撤销  通知连接对端本连接无效,不再接收新对  话,无消息内容,需要对端确认  3 intra_acknowledge 成功确认  消息处理成功确认,无消息内容,不需要  对端确认  4 intra_error 出错确认  消息处理出错确认,消息内容为错误编  号,不需要对端确认  5 intra_keepalive 连接保持  连接空闲时发送此消息,无消息内容,不  需要对端确认

业务消息是带有具体内容的消息,用于在各个进程之间传送业务数据。根据会话的过程,可以分为开始、确认、继续、结束、终止等几种。各种业务消息的编号和功能说明可参见下面的表3所示:

  消息编号  消息名  注释  1  intra_begin  会话开始消息  功能实体实例编号可为空  2  intra_confirm  会话确认消息  消息包内容可为空  3  intra_continue  会话继续消息  4  intra_end  会话结束消息  消息包内容可为空  5  intra_abort  会话中止消息  用于会话异常结束,消息包内容为中止原因  6  intra_uni  单向会话消息  功能实体实例编号可为空  7  intra_notice  会话指示消息  用于消息分发功能实体通知会话两端转发出  错,消息包内容为错误原因

参见图3,介绍本发明中划分为三层架构的组件的具体功能分别是:

通信链路层,负责维护与其他进程通信的链路连接:接收链路上到达的消息,提交到消息分发层;从消息分发层接收由消息处理层下发的消息,并发送到链路上;实现链路连接的方式为:TCP socket、FIFO、或共享内存方式的通信连接;

消息分发层,负责消息分发,包括消息在进程内部的分发以及到其他进程的分发,当进程不具有消息中转功能时,该层从通信链路层接收提交的消息,上报到本地的上层消息处理层作继续处理;当进程具有消息中转功能时,该层从通信链路层接收消息,分析该消息的目的地址,如果该消息的目的地址是本进程,则提交到本地消息处理层处理;否则,查找合适的路由,并选择通信链路层的相应链路,将消息发送到正确的链路上;

业务消息处理层:负责消息的拆分和组合,其中消息的分片机制对通信链路层和消息分发层是透明的,接收从消息分发层上报的业务消息,并寻找合适的功能模块对该消息处理,再将该层内具体功能模块处理该消息后产生的业务消息向下交给消息分发层分发。该业务消息处理层只负责业务消息的处理,因为用于链路管理的管理类消息都由通信链路层直接处理,不会上报到业务消息处理层。该层设有能够对各种不同的通用消息类型进行相应处理的多种功能模块,并藉此体现不同组件的具体功能差异,即各个组件具体功能的差异主要体现在该层的实现上。

本发明步骤(4)中所述的路由算法是通过查找路由表来获得通用消息的路由信息,本发明的路由表的表项是格式为<目的地址,目的掩码,下一跳地址,下一跳掩码>的四元组,其中,目的地址和下一跳地址都表示为:domainId.feId.instanceId,即:域编号.功能实体类型编号.功能实体实例编号,目的掩码和下一跳掩码均指功能实体实例编号instanceId的掩码。

参见图4,介绍通用消息在进行路由转发时,分为四种类型:①类消息:从本进程发送到其他进程的消息,②类消息:由其他进程发送到本进程的消息,③类消息;进程内部传递的消息,④类消息:经由通用消息分发组件msgr中转的消息。特别地,其中A类和D类消息都需要根据目的进程地址使用路由表选路,其操作步骤为:

(1)保持目的进程地址中的域编号和功能实体类型编号不变,但将目的进程地址中的功能实体实例编号instanceId与四元组中的目的掩码进行“与”操作,再将计算结果与路由表里每个表项四元组中的目的地址进行比较,如果两者相等,则选择该表项四元组中对应的下一跳地址和下一跳掩码,继续执行后续步骤(2)操作;如果两者不相等,则丢弃该消息,操作结束;

(2)保持该表项四元组中对应的下一跳地址中的域编号.功能实体类型编号不变,但将该表项四元组中对应的下一跳地址中的功能实体实例编号进行如下计算真正的下一跳地址的操作:(X∨M)∧(R∨M),即先分别将下一跳地址中标记为X的功能实体实例编号instanceId和标记为M的下一跳掩码的反M进行“或”操作,接着将一个标记为R的随机数和下一跳掩码M进行“或”操作,再将该两个操作结果进行“与”操作,最后得到的结果才是真正的下一跳地址。

此外,通用消息在进程间进行寻址时,必须遵循以下两个原则:

A、目的域编号domainId和目的功能实体类型编号feId不为零、但目的功能实体实例编号instanceId为零时,由消息分发功能模块将该消息转发到目的域,再依据设定的负荷分担算法在本域内根据目的feId选择一个正确类型的功能实体实例编号instanceId进行分发;消息分发功能模块对同一条消息的负荷分担只能实施一次,一旦确定了消息的目的功能实体实例编号instanceId,即将消息头中的目的地址中的功能实体实例字段填写成该功能实体实例字段填写成实际数值。

B、目的域编号domainId、目的功能实体类型编号feId和目的功能实体实例编号instanceId都不为零时,消息分发功能模块在分发时不使用设定的负荷分担机制,而是根据路由表选择下一跳实例地址;如果没有满足条件的下一跳实例地址,则丢弃该消息并报错。

本发明方法已经在东信北邮信息技术有限公司的业务控制点SCP组件系统中进行了试验实施。下面简要地说明该实施例的试验情况:

参见图5,原SCP组件系统中的各个组件进程之间未采用通用消息总线,图中单向箭头表示进程的创建和守护,双向菱形箭头表示共享内存方式的消息交互,双向空心箭头表示FIFO方式的消息的交互,双向箭头表示采用SOCKET连接方式来交互消息。该图表明原SCP系统各组件进程之间的消息交互关系是非常复杂的,这样势必影响系统组件的工作稳定性,增加运行维护工作量。

参见图6,介绍采用本发明的通用消息总线后,大为简化的各个进程之间的消息交互关系。组成该SCP设备的进程有:系统守护进程ininit,专用于通用消息分发的进程msgr,业务控制进程SCF,业务数据进程SDF,控制台进程inaccess_server,性能监测进程inperf,以n7server为代表的各种外部实体接口进程。这些进程之间都采用的通用消息总线进行消息交互,其中双向空心箭头表示业务消息的通信交互,单向箭头表示管理消息的通信交互。可以看出,在SCP系统中,采用本发明软件系统的各组件进程之间统一通信的通用消息总线的实现方法,能够使该SCP系统的多进程通信方式变得更为灵活和可靠。

参见图7,介绍本发明根据路由表选路的具体操作步骤。

假设某个SCF进程的地址为1.1.1,要与n7server四个进程2.3.4、2.3.5、2.3.6和2.3.7进行通信,通用消息要通过msgr进程1.2.2和1.2.3中转。SCF进程中对应的路由表表项为<2.3.4,252,1.2.2,254>。其操作步骤如下:

(1)假设该SCF进程需要向n7server目的进程2.3.5发消息时,由于2.3.(5&252)=2.3.4,则选中该路由表表项<2.3.4,252,1.2.2,254>。

(2)这个表项中的下一跳地址为1.2.2,下一跳掩码为254。为得到真正的下一跳地址,将表项中的下一跳地址中的功能实体实例编号2与下一跳掩码254的反进行“或”运算:2|254=3;再取一个随机数9,与下一跳掩码进行或运算:9|254=255;然后再对上述两个运算结果进行“与”运算:255&3=3,所以真正的下一跳地址为1.2.3。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号