立即咨询在线客服

计算机

您现在的位置: > 论文欣赏 > 计算机 >

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

  1 引言
  SOA(Service-Oriented Architecture,面向服务的体系结构)是构造分布式计算的应用程序的方法,它将应用程序功能作为服务发送给最终用户或者其他服务,通常认为SOA是一种技术架构或者架构风格。基于这种架构,业务流程或业务的变化可以通过服务编排调整快速适应,实现业务的敏捷性。随着SOA的快速发展,基于SOA架构的中间件产品也成为网络化商业系统的主要设计思路。由于企业的业务现状、远景需求及IT系统现状等的差异,SOA架构存在不同的构建思路,但一般来说,SOA的开发、维护和使用的基本原则可以归纳为:
  (1)可重复使用,模组性,可组合性,构件化以及具有交互操作性;
  (2)服务的识别和分类,提供和发布,监控和跟踪;
  (3)符合开放标准(通用的或行业的)。从基本原则可以看出,SOA架构的重点是要找到可重用的服务,同时这些服务满足离散、自治和无状态等基本条件;其次是服务本身可以组合和编排,以满足流程整合的需要。
  2 SOA服务识别的难点
  S O A 参考架构可总结为业务能力组件化及组件能力的服务化。服务识别的过程是通过自顶向下的分析,可以将流程的功能点逐层细分,直到最后一级的原子能力,再通过原子能力按照SOA架构的思想自底向上逐层组装,分析出可以重用的能力,重新编排为服务。
  服务识别是SOA架构实施的难点之一。因为当实施SOA架构时,业务系统一般已经具有一定规模,业务人员以及技术人员对业务系统的系统划分、模块划分已经有一定约定俗成的概念,容易先入为主。无论是往下的逐层细分,还是向上的逐层组装,都需要参考SOA架构做出思维上的改变。
  因此, 需要引入一些成型的流程建模工具来引导这个过程。目前SOA的服务识别有很多成型工具和模式,比如BPM(Business Process Management,业务流程管理)和BPEL(Business Process ExecutionLanguage,业务流程执行语言),但是这些工具和模式也并非适合所有的系统。一方面,建模工具本质上是用于辅助设计,这些企业级别的工具和模式覆盖面过于大,复杂程度高,分析的周期也较长,对于自动工作流较多的系统,辅助设计过程中往往需要较为简单轻巧的工具;另一方面,纯设计层次的建模与有工作流引擎参与的建模实际是存在不同的,完成服务识别后,再转化为可以为工作流引擎使用的服务也比较困难。
  3 Petri网思想在SOA架构中的应用
  SOA架构设计本身是一种思维改变的过程,已经成型的系统会存在很多固定的模块划分和功能划分,造成SOA实施困难,需要采用一些建模工具来辅助思维。使用建模工具进行建模时,应该覆盖2个要点:首先,建模工具是辅助设计的过程,选择合适的建模工具是必要的;其次,纯设计方式流程建模和SOA的建模方式是有所区别的。建模工具既要符合SOA的设计模式,也要贴近目前的业务实际,更要让建模的结果在SOA工作流引擎中能够无缝衔接。
  Petri网是分布式系统的建模和分析工具,可以清晰地描述系统中的进程和功能模块的顺序。研究领域趋向认为Petri网是所有流程定义语言之母,理论上所有的流程建模工具使用的方法都可以用Petri网的概念来表达。由于Petri网相对BPM和BPEL这些工具更为简单及灵便,因此用于描述流程上相对简单的自动工作流系统,则更具有明显的优势。相对于BPM和BPEL这些工具,Petri建模的优势在于:一方面,建模元素比较简单,更加注重流程本身;另一方面,代码逻辑和Petri图能够一一对应,可以更加有效地利用原有的应用实现而不用担心全部推倒重来。3.1 Petri建模介绍
  Petri网是对离散并行系统的数学表示,作为一种能够用来有效地分析系统的并发、异步和不确定行为,并能有效描述系统静态和动态的图形化模型,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网模型,用来描述整个系统的动态行为模型,这与SOA服务识别的过程是高度契合的。
  (1)子网逐层向下分解
  用Petri建模的思想,可以通过“映射”的思想和方法,按目前的详细设计或者代码逻辑将应用模块用Petri图画出。Petri网中的库所元素映射为程序数据,Petri网中的变迁元素映射为程序函数和方法,系统模型中的各对象子网映射为程序中的类。对主要以数据驱动的自动工作流的程序,按照程序的状态,Petri网的建模一般如图1所示:数据处理程序状态的建模Petri网的每个变迁都可以理解成子网,特别是的数据处理的变迁,也可以按照代码的实际逻辑,分解成如图2所示的子网数据处理子网的建模上图的每个变迁也可以继续理解成子网的概念,按照代码逻辑继续往下建模,直到变迁不可再继续细分,这正符合了SOA逐层细分的理念。
  (2)变迁组装成服务SOA服务要求
  具备可重用性,需要将可重用的组件能力开放为服务,这个可以映射为Petri可重用的子网。将每个变迁细化到“原子”级别的变迁后,首先需要对变迁进行分析,通过对变迁的输入输出令牌进行抽象,将能抽象成相同输入输出令牌的变迁视为一种服务,则这个变迁具备了SOA要求的可重用性。重用度最高的同时也最容易分析的是系统底层的原子能力,如操作系统资源、数据库操作的服务,这些服务目前已经有成型的模式,此处不再赘述,主要难点在于业务级别的服务分析。对于业务级别的服务分析,重点应关注应用处理数据的状态。示意了进程级别程序状态的建模,如果将数据状态的部分抽离出来,进一步考虑这个数据在整个应用中的状态,可以形成的处理过程(忽略了异常处理):图3 Petri针对系统中数据状态的建模是进程级别数据状态的建模,结合前文第一步子网逐层往下分解的结果,可以将整个数据处理的过程形成一张大的Petri网模型,然后对这张Petri网模型进行分析,就可以进行服务的识别。
  4 结束语
  由于自动工作流较多的系统偏向于数据的流转,在这类系统中使用目前常用的建模工具会使服务识别过程过于复杂和繁琐。Petri建模是从子网到原子变迁的逐层分解、再由变迁组装成服务,其整个过程符合SOA架构设计的原则,将Petri建模应用于SOA服务识别,可简化分析过程,提高架构设计的效率;同时,在开发过程中可以用Petri构建中间件,直接用于SOA的流程监控和业务监控。因此,基于Petri建模在自动工作流较多的系统中存在优势。如果进一步考虑Petri与SOA架构中ESB理念结合,Petri网也可以在ESB模式中有相当广阔的前景。