随着新一代架构革命的到来,面向服务的架构融合并取代了诸多之前的优秀架构。考虑到当前系统的数量以及产业在此上做的投资,任何新的架构都应该努力利用并改善既有的基础设施,而不能随便抛弃它们。而这正是SOA的精髓:它使既有的技术设施与业务联系得更紧密。
图1展示了一个基于SOA的系统的逻辑架构。其中蓝色部分是多层应用架构中的既有层,其它部分则是SOA特有的。而基础服务架构层(infrastructure
service layer)、业务服务层(business service layer)和服务组合层(service composition
layer)又可以统称为服务层。
图1 一个SOA系统的逻辑结构
如前所述,这些SOA特有的层是追加的层,是夹在当前系统的既有层中间的层。图示中的层列是根据习惯以标准的方式堆排到一起的。顶层使用底层的服务来满足上面各层的需求与功能要求。
非SOA特有的层:当前层
每种业务的IT设施都有根据不同的架构与方法论构建的系统。这些系统可能是基于Web、桌面的系统,或者纯后台系统以及其它各种应用。总体上,当前的系统基础设施可以分为三个大层:数据层、业务层和呈现层。
企业数据层:数据层
企业数据层就是企业的数据存储库。一项成功的商业操作所需要的所有数据都是这个逻辑层的一部分。这些数据包括数据库信息、文件系统、分层目录、遗产储存系统以及其它储存介质。这一层就是传统的多层架构中的数据层。
企业业务层:业务层
企业业务层由企业的业务应用(与逻辑)构成。它包括使用.Net、企业版的Java平台或其它各种技术开始的应用程序(与逻辑)。例程的逻辑也包括在这一层中。简单来说,这一层就是企业当前业务的主干和传统的多层架构中的业务层。
企业前台应用/通道:表现层
所有业务的前台应用和通道都是这第三层的一部分,包括依赖企业骨干系统运行的整个桌面和Web前台。业务通道包括外部的B2B接口系统,比如交易系统和地址确认系统。这一层组成了传统的多层架构中的表现层。
SOA特有的层
在研究SOA特有的层之前,需要先对业务过程及其组成部分有充分的了解。
图2展示了一个简单业务过程的块状关系图。一个业务过程就是一系列结合到一起的业务活动。每个业务活动完成整个过程中的一个具体的业务步骤。比如,“验证账号”和“检查账户余额”都是“银行转账”业务过程中的业务活动。
图2 简单的业务过程
可以根据用途把一系列业务活动结合为一组。这样的一个组合本身也可以看作是一个业务活动,称为组合业务活动(composite business
task)。比如,“资金转账”业务活动就是由“借记源账户”和“贷入目标账户”两个业务活动组成的。组合业务活动也是业务活动的重用。
所有的业务活动(包括组合业务活动)便组成了完整的业务过程。比如,“银行转账”就是一个完整的业务过程。
对业务过程和业务活动有了一些了解之后,我们再来看SOA特有的层。
服务基础架构层
可以把非业务性的功能(比如审计、记录和物资供应)视为服务。这些服务是基础类服务,不包含任何业务逻辑。纯数据读取类服务也是基础服务;它们只是把对底层数据存储层的访问作为一种服务。这一层也可以称为功能服务层。基础服务依赖于当前的企业数据层和企业业务层。
一个以用户名与密码的方式对用户进行验证的服务就是这种基础服务的一个实例。这样的一个服务可能是企业架构安全系统的基础。它要依据唯一的一个用户注册信息对来自不同系统的用户进行验证,从而使用户可以在不同的系统上使用同一套身份证明。另外,这样的一个服务也有助于在各系统之间实现统一的安全验证策略。
服务服务层
可以认为业务过程中的每一个步骤都是一个服务,即业务服务。比如先前提到的“验证账号”和“检查账户余额”都是与银行业务有关的业务服务。业务服务的粒度取决于该服务所需实现的业务活动。业务服务层依赖于当前的企业数据层和企业业务层。
服务组合
我们把实现组合业务活动的(即上文中所提到的)服务称为一个服务组合。“资金转账”就是“借记账户”(源)与“贷入账户”(目标)业务服务的服务组合。组合业务活动构成了一个抽象层,隐藏了内部详细的业务活动。比如,对于用户来说“资金转账”组合就隐藏了该账户是先记账还是先借账的信息。另外,还能比较容易地加入新服务(比如转账通知),而无需对既有的“资金转账”接口作出任何改动。该层依赖于业务服务层和基础服务层。
设计时与部署时程序组装都可以用来创建组合服务。设计时程序集要编写业务服务(或基础服务)的调用顺序。比如资金转账服务可以用先调用“借记帐户”再调用
“贷入账户”业务服务的方式实现。这种实现方法称为设计时程序组装。部署时程序组装通过配置来确定顺序,即调用顺序是通过合适的配置语言来实现的。这种方式需要底层软件的支持。
流程编排层
流程编排服务包含了所有的业务过程。比如,一个包括“银行转账”业务过程的整个流程的服务就是一个流程编排服务。完整的银行转账过程包括验证目标银行信息和源/目标账户信息、确认源账户余额、资金转账、和一些其它步骤。
像业务流程执行语言(BPEL)之类的语言就是用来实现流程编排服务的。流程编排服务由所需的业务服务、服务组合和基础服务组成。这一层也可以称为业务过程层。
服务注册
服务注册层(service registry)记录着可用服务的信息。服务注册信息可以不必局限于统一描述与发现和集成协议(UDDI)或Java命名与发现(JNDI)接口标准,它可以储存为任何方便查找服务的形式。注册信息包含了流程编排服务、组合服务、业务服务和基础服务的详细信息。这一层也就是企业当前业务目录。比如,一条包含企业所用的借记账户服务、贷入账户服务或者资金转账服务的详细信息的记录就是一条服务注册信息。
消息传输层
消息传输层包括服务层内的业务消息交互;这些消息负责消息层内的消息传输。对这些消息的定义也是这一层的一部分。比如,“资金转账消息”是一条业务消息。这样的一条消息,其结构包括源账户、目标账户和转账金额的详细信息。
消息传输层还为其它层之间的消息传输提供消息系统支持。消息系统便于服务层之间进行交互。比如,可以认为企业服务总线就是服务的消息系统。
企业数据层、企业业务层,以及前台应用/通道可以继续使用当前的业务数据传输载体和通信协议。
服务管理
服务管理和监控系统是服务管理层的一部分。监控系统可以提供与服务相关的有用信息,比如使用率、处理能力和其它性能相关的信息。可以利用这些系统提取与业务关键性能指标相关的实时信息。服务管理工具也是这一层的一部分,包括安全辅助管理工具、负载平衡工具和其它与服务管理相关的工具。这一层也可以称为
SOA管理层。业务活动监控工具可以提供与这一层相关的支持。
总结
本文总结了一个与实现方法、技术无关的SOA逻辑结构。这样的一个逻辑结构有利于企业有效地进行设计、组织系统,更快地实现SOA。此结构的描述与具体产品或技术无关,但很容易找到它们在此结构中的位置。
这个结构主要可以用于设计企业的SOA技术路线图。它可以帮助确定当前的环境与目标SOA设施之间存在的差距,作为开发可重用的SOA框架的项目的参考,把产品环境映射到逻辑结构中,从而有效地确定项目所需的SOA相关产品。
|