基于Petri网的SOA架构应用研究

2015-04-13 04:39陈娜张金娟刘智琼
移动通信 2015年6期
关键词:库所令牌子网

陈娜,张金娟,刘智琼

(中国电信股份有限公司广州研究院,广东 广州 510630)

1 引言

SOA(Service-Oriented Architecture,面向服务的体系结构)是构造分布式计算的应用程序的方法,它将应用程序功能作为服务发送给最终用户或者其他服务,通常认为SOA是一种技术架构或者架构风格。基于这种架构,业务流程或业务的变化可以通过服务编排调整快速适应,实现业务的敏捷性。随着SOA的快速发展,基于SOA架构的中间件产品也成为网络化商业系统的主要设计思路。

由于企业的业务现状、远景需求及IT系统现状等的差异,SOA架构存在不同的构建思路,但一般来说,SOA的开发、维护和使用的基本原则可以归纳为:

(1)可重复使用,模组性,可组合性,构件化以及具有交互操作性;

(2)服务的识别和分类,提供和发布,监控和跟踪;

(3)符合开放标准(通用的或行业的)。

从基本原则可以看出,SOA架构的重点是要找到可重用的服务,同时这些服务满足离散、自治和无状态等基本条件;其次是服务本身可以组合和编排,以满足流程整合的需要。

2 SOA服务识别的难点

SOA参考架构可总结为业务能力组件化及组件能力的服务化。服务识别的过程是通过自顶向下的分析,可以将流程的功能点逐层细分,直到最后一级的原子能力,再通过原子能力按照SOA架构的思想自底向上逐层组装,分析出可以重用的能力,重新编排为服务。

服务识别是SOA架构实施的难点之一。因为当实施SOA架构时,业务系统一般已经具有一定规模,业务人员以及技术人员对业务系统的系统划分、模块划分已经有一定约定俗成的概念,容易先入为主。无论是往下的逐层细分,还是向上的逐层组装,都需要参考SOA架构做出思维上的改变。

因此,需要引入一些成型的流程建模工具来引导这个过程。目前SOA的服务识别有很多成型工具和模式,比如BPM(Business Process Management,业务流程管理)和BPEL(Business Process Execution Language,业务流程执行语言),但是这些工具和模式也并非适合所有的系统。一方面,建模工具本质上是用于辅助设计,这些企业级别的工具和模式覆盖面过于大,复杂程度高,分析的周期也较长,对于自动工作流较多的系统,辅助设计过程中往往需要较为简单轻巧的工具;另一方面,纯设计层次的建模与有工作流引擎参与的建模实际是存在不同的,完成服务识别后,再转化为可以为工作流引擎使用的服务也比较困难。

3 Petri网思想在SOA架构中的应用

SOA架构设计本身是一种思维改变的过程,已经成型的系统会存在很多固定的模块划分和功能划分,造成SOA实施困难,需要采用一些建模工具来辅助思维。使用建模工具进行建模时,应该覆盖2个要点:首先,建模工具是辅助设计的过程,选择合适的建模工具是必要的;其次,纯设计方式流程建模和SOA的建模方式是有所区别的。建模工具既要符合SOA的设计模式,也要贴近目前的业务实际,更要让建模的结果在SOA工作流引擎中能够无缝衔接。

Petri网是分布式系统的建模和分析工具,可以清晰地描述系统中的进程和功能模块的顺序[1]。研究领域趋向认为Petri网是所有流程定义语言之母,理论上所有的流程建模工具使用的方法都可以用Petri网的概念来表达。由于Petri网相对BPM和BPEL这些工具更为简单及灵便,因此用于描述流程上相对简单的自动工作流系统,则更具有明显的优势。

相对于BPM和BPEL这些工具,Petri建模的优势在于:一方面,建模元素比较简单,更加注重流程本身;另一方面,代码逻辑和Petri图能够一一对应,可以更加有效地利用原有的应用实现而不用担心全部推倒重来。

3.1 Petri建模介绍

Petri网是对离散并行系统的数学表示[2],作为一种能够用来有效地分析系统的并发、异步和不确定行为[3],并能有效描述系统静态和动态的图形化模型,Petri网被广泛应用于生产制造领域、计算机领域、过程控制和专家系统等领域。Petri网既有严格的数学表述方式,也有直观的图形表达方式。

Petri网是过程模型,由库所和变迁两类节点、有向弧以及令牌等元素组成。

(1)Petri网的元素定义

◆库所(Place):圆形节点;

◆变迁(Transition):方形节点;

◆有向弧(Arc):库所和变迁之间的有向弧;

◆令牌(Token):库所中的动态对象,可以从一个库所移动到另一个库所。

(2)Petri网的规则

◆有向弧是有方向的;

◆两个库所或变迁之间不允许有弧;

◆库所可以拥有任意数量的令牌。

如果一个变迁的每个输入库所(input place)都拥有令牌,该变迁即为被允许(enable)。一个变迁被允许时,变迁将发生(fire),输入库所(input place)的令牌被消耗,同时为输出库所(output place)产生令牌。

3.2 使用Petri建模进行服务识别

Petri网模型本身具有子网的概念,可以将变迁逐层下转到最底层的原子变迁,也可以将所有Petri子网模型合成一个更大的Petri网模型,用来描述整个系统的动态行为模型[4],这与SOA服务识别的过程是高度契合的。

(1)子网逐层向下分解

用Petri建模的思想,可以通过“映射”的思想和方法,按目前的详细设计或者代码逻辑将应用模块用Petri图画出。Petri网中的库所元素映射为程序数据,Petri网中的变迁元素映射为程序函数和方法,系统模型中的各对象子网映射为程序中的类[5]。对主要以数据驱动的自动工作流的程序,按照程序的状态,Petri网的建模一般如图1所示:

图1 数据处理程序状态的建模

Petri网的每个变迁都可以理解成子网,特别是针对图1的数据处理的变迁,也可以按照代码的实际逻辑,分解成如图2所示的子网:

图2 数据处理子网的建模

上图的每个变迁也可以继续理解成子网的概念,按照代码逻辑继续往下建模,直到变迁不可再继续细分,这正符合了SOA逐层细分的理念。

(2)变迁组装成服务

SOA服务要求具备可重用性,需要将可重用的组件能力开放为服务,这个可以映射为Petri可重用的子网。将每个变迁细化到“原子”级别的变迁后,首先需要对变迁进行分析,通过对变迁的输入输出令牌进行抽象,将能抽象成相同输入输出令牌的变迁视为一种服务,则这个变迁具备了SOA要求的可重用性。

重用度最高的同时也最容易分析的是系统底层的原子能力,如操作系统资源、数据库操作的服务,这些服务目前已经有成型的模式,此处不再赘述,主要难点在于业务级别的服务分析。对于业务级别的服务分析,重点应关注应用处理数据的状态。

图1示意了进程级别程序状态的建模,如果将数据状态的部分抽离出来,进一步考虑这个数据在整个应用中的状态,可以形成如图3所示的处理过程(忽略了异常处理):

图3 Petri针对系统中数据状态的建模

图4是进程级别数据状态的建模,结合前文第一步子网逐层往下分解的结果,可以将整个数据处理的过程形成一张大的Petri网模型,然后对这张Petri网模型进行分析,就可以进行服务的识别。

图4 服务按照服务状态和数据状态的建模

服务识别的过程可以按照以下步骤进行:

◆可重用性分析:横向与其他数据的处理逻辑比较,通过Key-Value的方式对变迁输入输出的抽象,整理出可以重用的变迁,也就是可以转化为服务的变迁。

◆服务粒度设计:服务是需要通过工作流引擎来进行流程控制的,变迁的粒度不应该太细。如果太细,可能会影响整个数据处理的性能,需要在流程监控与性能之间做权衡的考虑。

◆数据流程监控分析:有些变迁虽然不可重用,但由于需要对数据的流程进行监控,需要将它转化为服务。

◆服务的校验:完成服务的识别后,可以通过Petri建模对服务进行建模。一方面,需要对模型本身进行校验,Petri可以提供形式化方法,以数学为理论基础,为系统设计的正确性、安全性提供了一种有效的验证手段[6];另一方面,需要考虑是否满足工作流引擎的需要,对于自动工作流的系统,服务的Petri模型一定是同时关注服务状态和数据状态的(见图4),如果不满足这个条件,那么服务是无法被工作流引擎所调度的。

使用Petri建模将变迁组装成服务,可以很好地贯彻SOA组件能力开放为服务能力的理念,可重用的组件能力映射为可重用的子网,服务接口的抽象可以映射为输入令牌和输出令牌的抽象。由于Petri网建模的本质就是事件驱动的概念,因此能够符合工作流中间件的逻辑,也便于工作流中间件对服务控制和监控。

3.3 使用Petri中间件进行流程管理

使用Petri的另外一个优势就是可以采用引入中间件的概念,构建内部的流程管理平台。Petri的令牌驱动模式能够很好地抽象自动流程较多的系统。对于流程管理,其核心是判断流程中的每个环节下一步该做什么,这点可以通过Petri图令牌的当前位置来体现,如果某变迁的上游库所都有令牌,则接收上游库所的令牌,触发变迁点火,再由变迁将下游所有库所的令牌属性赋值。

按照上述思路可以构建一个Petri中间件,在界面上进行Petri建模,并定义好变迁的输入输出。应用(HLA)使用中间件提供的API进行研发。实际运行时,应用通过中间件的Agent与Master进行交互,完成流程控制与流程监控的目的,如图5所示:

图5 Petriware中间件体系架构

(1)Petri中间件的功能架构

由于Petri本身就是使用事件驱动的概念来进行建模,所以在SOA服务用Petri完成建模后,直接可以为Petri中间件服务,不需要考虑设计层面的服务与有中间件参与的服务的转变。Petri的建模图形也完全可以表达应用逻辑,通过应用与中间件的交互,做到对于流程和应用的监控。

Petri中间件的功能架构如图6所示:

图6 Petri中间件的功能架构

Petri中间件由Petri网建模、Petri网调度控制、Petri网接入服务、监控服务组成,各功能模块的功能简述如下:

◆Petri网建模:以Petri网数据模型为基础,提供Petri网设计与配置的可视化设计管理工具;

◆Petri网调度控制:以Petri网设计与配置为依据,驱动令牌在库所间进行流转的同时实现业务逻辑控制与实现;

◆Petri网接入服务:以标准化的API接口,统一规范应用的接入,降低系统应用与控制的耦合性;

◆监控服务:以Petri网为基础,对系统进行抽象并分层监控与管理,展示系统运行态全境。

(2)Petri中间件调度控制

在系统流程的开发中,中间件可将应用作为令牌(业务数据)的处理者,应用负责消耗中间件分配的令牌,完成指定的业务逻辑,并生成新的令牌反馈业务处理结果。因此,在流程的处理中,可以认为变迁是业务能力在Petri图中的表示元素,其与应用之间存在特定的对应关系。

在流程的设计阶段,根据业务流程控制的需要,设计者需为流程中不同的变迁指定待实现的功能,并为其指定输入与输出的内容。即设计者需为业务能力,也就是变迁指定输入内容(输入令牌属性)、输出内容(输出令牌属性)。

在流程的运行阶段,中间件根据已设计流程配置,驱动令牌在不同变迁间的流转,以完成业务功能。即中间件负责指导应用接下来的变迁,并将上游变迁输出的令牌发送给应用程序;应用程序接收到中间件发送的应该执行的变迁以及发送的令牌后,从令牌中获取设计时指定的令牌属性,进行相应的业务处理。应用程序业务处理结束后,中间件负责告知应用程序,新增令牌并设置设计时指定的令牌属性后,将令牌发送给中间件。

4 结束语

由于自动工作流较多的系统偏向于数据的流转,在这类系统中使用目前常用的建模工具会使服务识别过程过于复杂和繁琐。Petri建模是从子网到原子变迁的逐层分解、再由变迁组装成服务,其整个过程符合SOA架构设计的原则,将Petri建模应用于SOA服务识别,可简化分析过程,提高架构设计的效率;同时,在开发过程中可以用Petri构建中间件,直接用于SOA的流程监控和业务监控。因此,基于Petri建模在自动工作流较多的系统中存在优势。如果进一步考虑Petri与SOA架构中ESB理念结合,Petri网也可以在ESB模式中有相当广阔的前景。

[1] 吴哲辉. Petri网导论[M]. 北京: 机械工业出版社, 2006.

[2] 袁崇义. Petri网原理与应用[M]. 北京: 电子工业出版社, 2005.

[3] 张昭理,洪帆,肖海军. 基于Petri网的混合安全策略建模与验证[J]. 计算机应用研究, 2008,25(2): 509-511.

[4] 江金龙,周献中,孙勇成,等. 基于UML和Petri网的层次建模分析方法[J]. 系统仿真学报, 2006,18(2): 290-293.

[5] 冒益海,韩卫光. 基于Petri网的柔性制造系统作业调度研究与实现[J]. 小型微型计算机系统, 2010,31(5): 1001-1005.

[6] 张国印,刘铭,姚爱红,等. 基于扩展Petri网的系统建模及形式化验证方法[J]. 计算机应用研究, 2010,27(12): 4587-4590.★

猜你喜欢
库所令牌子网
称金块
基于FPGA 的有色Petri 网仿真系统设计*
基于路由和QoS令牌桶的集中式限速网关
子网划分问题研究及应用
动态令牌分配的TCSN多级令牌桶流量监管算法
子网划分的简易方法
利用Petri网特征结构的故障诊断方法
一种递归π演算向Petri网的转换方法
基于安全协议的虚拟专用子网研究
基于模糊Petri网的数控机床主轴故障诊断*