基于非侵入式监控的运行时组件动态交互模型构造方法与流程

文档序号:24123153发布日期:2021-03-02 12:21阅读:40来源:国知局
基于非侵入式监控的运行时组件动态交互模型构造方法与流程

[0001]
本发明涉及控制领域,涉及模型构造领域,具体涉及一种基于非侵入式监控的运行时组件动态交互模型构造方法。


背景技术:

[0002]
自适应调整是一种通过调整自身结构和行为来响应运行环境变化的方式。在软件工程领域,实现软件自适应最常用的方法是以体系结构为中心的软件自适应。运行时模型为该方法提供了实现的具体途径和手段,即通过修改运行时模型,并利用运行时模型与自适应软件之间存在的因果联系,将模型层的变更映射到软件层,最终完成整个适应过程。
[0003]
为了能够保证自适应调整在适应后依然能够提供高质量的服务,一种有效的方法是在模型层分析适应变更对自适应调整方式整体的可靠性水平产生的影响。然而,现有的运行时模型侧重于描述系统的组成及配置,缺少对组件间动态交互信息的描述,直接使用这一模型无法对自适应调整适应后的整体可靠性水平进行预测。因此,就需要一种能够描述组件间动态交互信息的运行时模型,利用该模型,可以实现在模型层对自适应后的整体可靠性水平进行预测。


技术实现要素:

[0004]
本发明的目的在于克服现有技术的不足,为了得到这一能够描述组件间动态交互信息的运行时模型,提供一种基于非侵入式监控的运行时组件动态交互模型构造方法,通过提取组件的动态交互信息,基于此实现对模型的构造。
[0005]
本发明提供了一种基于非侵入式监控的运行时组件动态交互模型构造方法,包括依次进行的如下步骤:
[0006]
步骤一:通过rainbow框架直接获得当前适应阶段的运行时体系结构模型;
[0007]
步骤二:根据运行时体系结构模型确定监控对象;
[0008]
步骤三:声明监控方法中的代理bean;
[0009]
步骤四:声明监控方法中的监控bean,实现对组件动态调用信息的提取;
[0010]
步骤五:基于步骤三和步骤四中建立的代理bean和监控bean,声明代理bean和监控bean的接口;
[0011]
步骤六:基于模型构造算法实现对运行时模型的构造。
[0012]
进一步地,所述步骤三中代理bean与应用程序bean对应且具有相同的远程接口。
[0013]
进一步地,所述步骤四中实现对组件动态调用信息包括调用关系信息、组件间的调用次数信息和时间戳信息。
[0014]
进一步地,所述调用关系信息的获取步骤包括:
[0015]
定义调用关系的具体格式为:ecs=<caller,callee,&>,其中caller代表发起调用的ejb组件,callee代表被调用的组件,&代表调用关系,且&描述为caller

callee;
[0016]
ecs通过实时监控获得,每当监控到组件调用发生时,在组件间调用序列中添加一
行,记录调用对的格式为“主调组件被调用组件”,得到的序列进行保存。
[0017]
进一步地,所述组件间的调用次数信息的获取步骤包括:
[0018]
定义存储组件间调用次数ect的列表,其格式为ect=<caller,callee,times>,其中ejb组件的调用次数通过对调用关系信息的步骤中获取的序列文件进行扫描获取。
[0019]
进一步地,所述扫描获取的方式包括:
[0020]
利用相同的方式对所有组件调用次数列表中的第一列caller、第二列callee的取值分别为a的调用对进行统计,则能够分别获得ejb组件a在该适应阶段内调用其他ejb组件和被其他ejb组件调用的总次数;对所有caller为a,且callee为b的调用对进行统计,则能够获得组件a获得组件b的总次数。
[0021]
进一步地,所述时间戳信息的获取步骤包括:通过记录每个组件被调用的时间以及调用结束的时间对组件调用过程中是否存在并发进行判定。
[0022]
进一步地,组件调用过程中,定义组件调用时间戳是一个二元组<t
start
,t
end
>,其中,t
start
表示发起调用的时刻,t
end
表示调用的结束时刻;
[0023]
当组件a调用组件b时,简单记为a

b,则t
start
表示为t(a

b)
star
,t
end
表示为t(a

b,b!a)
end
,b!a表示组件a的接口与组件b的接口进行解绑,即组件b执行完毕。
[0024]
进一步地,对于组件调用过程中是否存在并发的判断,具体步骤为:
[0025]
当组件a调用组件b时,记录其发起调用的时间t
start
,当b组件执行完毕后,即b组件的接口与a组件的接口进行解绑时,记录调用的结束时间t
end

[0026]
以相同的方法记录a组件与c组件之间的调用开始时间与结束时间,如果a组件在调用b组件的同时又调用c组件,在时间上满足式:t(a

b,b!a)
end
>t(a

c)
star
,认为b、c组件之间存在并发关系,其中“>”表示晚于。
[0027]
进一步地,所述模型构造算法具体包括如下步骤:通过运行时监控收集到的组件调用序列和原始组件调用时间戳列表,构造组件调用的邻接矩阵,具体包括
[0028]
(1)输入步骤:
[0029]
1.1)组件调用序列,序列中从第一行至最后一行按顺序记录组件间的调用;
[0030]
1.2)原始组件调用时间戳列表,列表中从第一行至最后一行按顺序记录组件的一次被调用,其中每一行包含3列,第一列为组件名称,第二列为标识符,取值为in和out,分别表示该组件被调用、该组件结束被调用,第三列为组件开始或结束调用的时间;
[0031]
(2)输出步骤:
[0032]
邻接矩阵形式的组件调用模型,其中,矩阵中第i行第j列的取值表示运行时组件i调用组件j的次数,当取值为负时,表示组件i调用组件j时存在其它并发调用。
[0033]
本发明的基于非侵入式监控的运行时组件动态交互模型构造方法,可以实现:
[0034]
在对非侵入式监控研究领域,绝大多数研究集中在对代码层进行监控,即监控函数间的调用关系,但对组件级监控的研究较少,目前只见少数对java组件进行监控的框架,然而这些框架缺少具体且行之有效的监控方法。本方法通过记录组件间调用的时间戳,实现了对组件在调用过程中是否存在并发关系的判定。
附图说明
[0035]
图1为客户端访问ejb的具体过程图;
[0036]
图2为代理bean和监控bean获取组件运行时信息的顺序图;
具体实施方式
[0037]
下面详细说明本发明的具体实施,有必要在此指出的是,以下实施只是用于本发明的进一步说明,不能理解为对本发明保护范围的限制,该领域技术熟练人员根据上述本发明内容对本发明做出的一些非本质的改进和调整,仍然属于本发明的保护范围。
[0038]
对于适用对象和具体进入的条件而言,由于运行时模型构造的基础是建立在java反射机制的基础上,因此本方法适用的监控对象是基于java平台开发构造的。rainbow是由卡内基梅隆软件工程研究所设计实现的一个java扩展框架,通过该框架,可以直接获得与自适应软件具有因果联系的运行时体系结构模型,由于本方法是在以体系结构为中心的自适应调整方式的背景下提出的,因此可以借助rainbow的运行时体系结构模型快照机制得到需要监控的对象,即自适应调整方法中与rainbow框架生成的运行时体系结构模型中组件相对应的ejb组件。
[0039]
由于在当前适应阶段通过rainbow框架得到的运行时体系结构模型侧重于描述当前时刻系统的组成结构,缺乏对组件间动态关系的描述,这就使得运行时体系结构模型不能直接支持运行时可靠性预计。因此,将在当前适应阶段运行时体系结构模型的基础上,构造一个能描述当前适应阶段组件静态结构和动态行为的运行时模型,即当前适应阶段运行时组件调用模型(runtime component interaction model,rcim)模型,该模型中要包含如下动态信息,组件间的调用关系、调用次数、调用的时间戳。
[0040]
基于此,本发明提供了一种基于非侵入式监控的运行时组件动态交互模型构造方法,下面,具体进行介绍,其包括如下步骤:
[0041]
步骤一:通过rainbow框架直接获得当前适应阶段的运行时体系结构模型,其可以直接获得;
[0042]
步骤二:根据运行时体系结构模型确定监控对象,其中在rainbow框架中模型管理器维护的运行时体系结构中的每个组件都有与之对应的系统元素,这也意味着由rainbow生成的运行时体系结构模型中每个组件的名称和文件地址都与系统(被控对象)中的元素的名称和文件地址相同。由于rainbow是一个基于j2ee(java 2 platform enterprise edition)的扩展框架,因此可以认为每一个运行时体系结构的组件都有一个ejb(enterprise java bean,企业java bean)组件与之对应。所以本方法的监控对象是运行时体系结构模型中的组件所对应的ejb组件。
[0043]
利用java的反射机制,在ejb容器中生成一个代理bean和一个监控bean;之后,通过监控bean收集代理bean所对应的应用程序bean与客户端之间的方法调用、消息转发、事务处理等调用信息,最后,将监控信息用一个xml格式的文件进行记录并保存。该监控方法主要包含以下三步,第一,声明代理bean;第二,声明监控bean;第三,基于xml给出客户端和应用程序bean的接口描述。
[0044]
步骤三:声明监控方法中的代理bean。
[0045]
代理bean与应用程序bean一一对应,且与应用程序bean具有相同的远程接口,使用相同的标识接收客户端的调用,并将调用信息转发给监控bean。代理bean的生成可以利用java自身提供的反射机制,声明一个与应用程序bean具有相同方法的bean,具体的声明
可以基于xml或者javaconfig的方式进行。
[0046]
其中,ejb是存在于逻辑应用服务环境中的java对象,这一服务环境为ejb组件提供所需要的服务资源,例如数据库的事务上下文、消息传递等等。得益于这些服务,ejb组件可以通过xml文件的描述符进行声明,并在部署时使用这些描述符来生成ejb对象的包装类(wrapper类),客户端将用这些包装类的对象代替实际的组件对象。客户端访问一个ejb的具体过程如附图1所示,该图中,一个ejb容器由一个ejb home对象、一个ejb对象、一个真实bean构成。
[0047]
当客户端访问ejb时,客户端将请求ejb home对象创建一个ejb对象,使得客户端可以访问真实bean向客户端提供的公共方法(public method)。
[0048]
ejb home对象在收到请求后创建的ejb对象,并不是真实bean,而是一个服务器生成的对象,它充当客户端和真实bean之间的代理。这一代理,即ejb对象,可以为ejb组件提供其他服务,例如事务处理,ejb对象拥有真实bean的所有公共方法,并将客户端的请求委托给真实bean。
[0049]
当客户端接收到新创建的ejb对象的引用(reference)后,客户端就可以使用真实bean所有的公共方法。由于客户端并不直接访问真实bean,因此实际上客户端是在ejb容器生成的ejb对象上调用其所需要的方法。
[0050]
ejb对象将所有的方法调用转发给真实bean,真实bean将执行所需的操作和结果返回给ejb对象,之后ejb对象将结果返回给客户端。由于ejb对象为真实bean提供了大量的服务,因此ejb对象除了转发方法调用这一功能外,还可以为真实bean提供其他额外的服务。例如,ejb对象可以验证客户端是否有调用特定方法的权限,此外还可以生成一个事务并在事务的上下文中调用所需的方法。需要注意的是,所有这些额外的服务对于客户端而言都是透明的,不需要开发人员额外地编写任何代码。
[0051]
步骤四:声明监控方法中的监控bean来实现对组件动态调用信息的提取。监控bean的作用主要包含以下两个方面,第一,通过get方法获取代理bean中的信息;第二,根据监控的需求对获取到的信息进行处理。由于组件间的调用可能存在并发和选择(或顺序)关系,而这一关系又将对可靠性预计的结果产生影响,因此需要在监控过程中明确组件在调用过程中是否存在并发的关系。
[0052]
需要提取的信息包括:组件间的调用关系、组件间的调用次数、组件间调用的时间戳。
[0053]
(1)组件调用关系的获取方法
[0054]
组件间的调用关系定义的具体格式为:ecs=<caller,callee,&>,其中caller代表发起调用的ejb组件,callee代表被调用的组件,&代表调用关系,且&可以具体描述为caller

callee。ecs的具体实现可通过实时监控获得,每当监控到组件调用发生时,在组件间调用序列中添加一行,记录该调用对,每行的格式为“主调组件被调用组件”,得到的序列可以以ecs.xml文件进行保存。
[0055]
(2)组件调用次数的获取方法
[0056]
ect(ejb calling times)是存储组件间调用次数的列表,其格式为ect=<caller,callee,times>。ejb组件的调用次数可通过对ecs.xml文件进行扫描获取,具体方法为:对所有组件调用次数列表中的第一列caller取值为a的调用对进行统计,即可算出
ejb组件a在该适应阶段内调用其他ejb组件的总次数。同理,将所有第二列callee取值为a的调用对进行统计,即可算出ejb组件a在该适应阶段内被其他ejb组件调用的总次数。将所有caller为a,且callee为b的调用对进行统计,即可获得组件a获得组件b的总次数。
[0057]
(3)组件间调用的时间戳获取方法
[0058]
通过记录每个组件的调用时间戳,即被调用的时间以及调用结束的时间可以实现对组件调用过程中是否存在并发的判定。
[0059]
组件调用时间戳是一个二元组<t
start
,t
end
>,其中,t
start
表示发起调用的时刻,t
end
表示调用的结束时刻。
[0060]
当组件a调用组件b时,简单记为a

b,则t
start
可以表示为t(a

b)
star
,t
end
可以表示为t(a

b,b!a)
end
,t(a

b,b!a)
end
中的b!a表示组件a的接口与组件b的接口进行解绑,即组件b执行完毕。
[0061]
对于组件调用过程中是否存在并发的判断,可以采用以下方式实现。当组件a调用组件b时,记录其发起调用的时间t
start
,当b组件执行完毕后,即b组件的接口与a组件的接口进行解绑时,记录调用的结束时间t
end
。同理,可以以相同的方法记录a组件与c组件之间的调用开始时间与结束时间。如果a组件在调用b组件的同时又调用c组件,在时间上满足(1)式,该式中“>”表示晚于,那么便可以认为b、c组件之间存在并发关系。
[0062]
t(a

b,b!a)
end
>t(a

c)
star
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(1)
[0063]
为方便实时的数据记录,本方法采用了如下的原始数据格式对组件调用的时间戳进行记录:原始数据的每一行表示一次组件调用的开始或结束,每一行包含三列,第一列为组件名称,第二列为组件进入或退出标识(即该组件被开始调用或结束调用的标识),第三列表示开始调用或结束调用的时间戳。通过对这一原始文件进行分析,即可判断出组件间调用是否存在并发。
[0064]
步骤五:基于xml声明代理bean和监控bean的接口。
[0065]
ejb组件在进行交互的过程中通过接口的方式进行方法调用、消息转发、事务处理等操作,因此需要对代理bean和监控bean之间的接口进行声明,以实现监控bean获取代理bean的调用信息并规范相应的数据格式。ejb组件间的调用存在发起调用和被调用两种形式,因此接口说明分为组件发起调用的xml描述和组件被调用的xml描述。
[0066]
xml文件的关键字及说明如下表所示:
[0067]
关键字说明invokeinformation调用信息component name发起调用的组件名称classname类的名称或接口的名称methodname方法名称returntype返回类型parametertype参数类型eventname事件名称
[0068]
组件发起调用的行为可以看成是该组件对外发起请求的过程。组件在发起调用请求时,需要声明需要调用的组件的名称以及所需要的类、方法、返回值、参数、事件等一系列信息,进而通过ejb容器中管理模块的相关规则查找符合要求的被调用组件,并与被调用组
件进行交互最终完成调用过程。
[0069]
当组件被调用时,可以看成是该组件向外提供服务的过程。组件在被调用时,需要提供自身的方法、功能、返回类型、参数类型等一系列信息。当功能或业务流程需要调用该组件时,就可以通过上述信息与其他组件进行交互,从而完成调用。
[0070]
步骤六:设计算法实现运行时模型的构造:
[0071]
具体的,通过运行时监控收集到的组件调用序列和原始组件调用时间戳列表,构造组件调用的邻接矩阵;
[0072]
(1)算法的输入:
[0073]
1)组件调用序列,序列中从第一行至最后一行按顺序记录组件间的调用;
[0074]
2)原始组件调用时间戳列表,列表中从第一行至最后一行按顺序记录组件的一次被调用,其中每一行包含3列,第一列为组件名称,第二列为标识符,取值为in和out,分别表示该组件被调用、该组件结束被调用,第三列为组件开始或结束调用的时间。
[0075]
(2)算法的输出
[0076]
邻接矩阵形式的组件调用模型,其中,矩阵中第i行第j列的取值表示运行时组件i调用组件j的次数,当取值为负时,表示组件i调用组件j时存在其它并发调用。
[0077]
(3)算法的基本步骤
[0078]
1)初始化一个空的调用堆栈stack和临时堆栈tmpstack;
[0079]
2)将原始组件调用时间戳列表中的第一个组件名称保存在变量precomp中;
[0080]
3)对于时间戳列表中的每一行:
[0081]

将该行第一列存入变量compname
[0082]

将该行第二列存入变量notation
[0083]

如果notation为in:
[0084]
首先,将compname压入堆栈stack;
[0085]
随后,进行判断:
[0086]
如果邻接矩阵存在某一行名称与compname相同,则将precomp行、compname列的取值加1;
[0087]
否则,在邻接矩阵中添加一行和一列,名称为compname,并将precomp行、compname列的取值初始化为0;
[0088]

如果notation为out:
[0089]
首先,读取stack堆栈顶部元素,并进行判断:
[0090]
如果栈顶元素名称为compname:
[0091]
首先,从堆栈stack中弹出该栈顶元素;
[0092]
随后,若tmpstack中存在元素,则依次弹出并压入堆栈stack中;
[0093]
否则,意味着compname组件被调用结束前,已有其他组件被并发调用了,此时:
[0094]
首先,将邻接矩阵precomp行、栈顶元素名称列的元素以及precomp行、compname列的元素置为负数;
[0095]
然后,将stack栈顶元素弹出,并压入tmpstack中;
[0096]
随后,继续读取堆栈stack栈顶元素,继续上述判断;
[0097]
随后,将堆栈stack顶部剩下的第一个元素存入变量precomp。
[0098]
尽管为了说明的目的,已描述了本发明的示例性实施方式,但是本领域的技术人员将理解,不脱离所附权利要求中公开的发明的范围和精神的情况下,可以在形式和细节上进行各种修改、添加和替换等的改变,而所有这些改变都应属于本发明所附权利要求的保护范围,并且本发明要求保护的产品各个部分和方法中的各个步骤,可以以任意组合的形式组合在一起。因此,对本发明中所公开的实施方式的描述并非为了限制本发明的范围,而是用于描述本发明。相应地,本发明的范围不受以上实施方式的限制,而是由权利要求或其等同物进行限定。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1