| 使用面向服务分解技术来满足架构目标 |
|
| 作者是 Administrator | |||||||||||||||||||||||||||||
| 2008-05-10 21:24:33 | |||||||||||||||||||||||||||||
|
通常,企业已经拥有一组支持大多数必需业务功能的应用程序。因此,谈到服务定义,您可能以为这不过就是将现有的应用程序功能作为一组服务来公开,类似于传统的企业应用程序集成(enterprise application integration,EAI)实践。其实不然。在实现基于面向服务的体系结构(Service-Oriented Architecture,SOA)的解决方案时,正确定义服务是最困难的任务之一。遗憾的是,此方法很少有效。这种方法本质上是“一种技术优先的方法和导致灾难和/或严重过度设计 (over-engineering) 的方法”。1(请参见 参考资料。) 一种更好的面向服务的分解方法基于企业范围的业务模型。此方法包括设计一组定义企业架构蓝图的服务,以支持当前业务目标并提供用于将来变更的功能。此方法要求您“从场景/业务需要开始,参照现有的/新的系统分析那些需要,对准切点,然后为获得有意义的服务做好计划”。1(请参见 参考资料)。以这种方式定义的服务可以实现 IT 与业务功能之间的可跟踪性。此方法是“一个能够帮助您坚持企业架构远景的交付策略的示例”。2(请参见 参考资料)。 本文将讨论一种面向服务的分解方法,此方法符合企业业务驱动因素和面向服务的计算原则。此方法的基础是基于业务模型将企业 IT 功能初步划分为服务,然后重构初始的服务定义,以便服务与总体企业架构目标一致。这种方法可以实现为具有以下活动的多步骤过程:
本文使用虚构的 ACME Insurance 公司作为示例。ACME 专门从事两个保险行业:个人汽车保险和内陆水运保险。ACME 处理与完整的保险服务生命周期相关联的所有问题——包括评级、承保和保险单维护。为了最大限度降低复杂性,本示例完全集中于签发过程。有些细节虽然从保险公司的角度看是必需的,但是如果不会为我们的讨论增添价值,我们将省略这些细节。 保险签发的核心在于用于确定适当的客户保险费的专有评级模型。该模型是由 ACME 的保险代理人随时间推移而开发出来的,它根据与特定行业相关联并由特定保险产品定义的规则和风险因素,从而确定与保险单的签发相关联的风险。 ACME 已经拥有一个保险管理系统。IT 人员开发并发展了该系统,系统中具有若干支持所有必需功能的专有和现成的软件包。如 图 1 所示的应用程序目前支持签发流程。 图 1. 当前的 ACME 应用程序
针对个人汽车保险的产品和保险单管理实现为两个 CICS/COBOL 应用程序。此外,“机动车辆报告”应用程序允许从相应州的机动车辆管理部门访问被保险驾驶员的驾驶记录。
现有的一组应用程序完全支持 ACME 的当前需要。然而,这些应用程序缺乏对以下长期业务目标的支持:
ACME 的现有 IT 系统提供了支持上述目标的所有必需功能,但是这些 IT 系统的架构 或组织结构 使 ACME 难以达到那些目标。当前实现的以应用程序为中心的性质很成问题,因为每个应用程序是单独构建和维护的,没有(或很少)考虑到公司中的其他应用程序。 结果,核心业务功能——保险单签发——不是作为一个整体流程而存在的。其功能散布在现有应用程序之间;每个应用程序负责该流程的一部分,并且总体集成是在事后实现的。 公司的大多数业务目标都要求使该业务流程成为 ACME 的架构的焦点。保险单签发流程的定义良好和外部化的实现是支持企业长期目标的灵活、自适应 IT 架构的关键要素。例如,正在处理的保险单的管理和签发的简化需要签发流程的端到端可见性。如果不外部化该流程,这样的可见性几乎是无法实现的。 ACME 的架构师寻找到一个与业务目标一致的解决方案,并决定采用 SOA 方法来实现保险单签发。 SOA 分解的基础是一个企业业务模型,其中包含了用于满足操作、战术和战略业务目标的资源和流程的主要表示形式。业务模型是成功的面向服务的分解的基本组件,并确保最终的服务在整个企业中的一致性和灵活性(采用 SOA 方法的动机)。必须准备一个高级模型来帮助设定服务的方向、分区和分类。随着 SOA 实现的推进,可以随着时间的推移而逐步开发实现细节。 存在许多定义企业业务架构的方法。有些架构师基于公司的组织结构来解释业务架构。可以使用业务功能或流程模型作为绘制垂直功能与水平流程之间连线的起点,以描述业务中跨功能的流程。 企业业务架构的一般定义如下: “……[企业业务架构] 定义企业价值流及其与所有外部实体和其他企业价值流以及触发实例化的事件之间的关系。它是对企业为满足其客户、在市场中竞争、与供应商交往、维持运营和关怀员工所必需产生的内容的定义。它由架构、工作流和事件组成。价值流是为客户创建成果的活动的端到端集合,该客户可以是最终客户或该价值流的内部最终用户。价值流具有清楚的目标:满足或取悦客户。”3(请参见 参考资料。) 价值流有效地描述了核心企业业务流程,后者包含了从 IT(服务)的功能组件产生结果的有序活动序列。
业务模型的关键组件是对企业业务流程的描述,这些描述定义了支持流程的活动、输入和输出。流程活动为定义企业服务提供了基础。使用业务模型作为将解决方案分解为服务的起点,这样可以促进业务与技术之间的一致性——SOA 方法的目标之一。 由企业业务模型驱动的服务划分符合自顶向下的设计,并代表了从流程到服务和流程的层次结构分解。 从最高级别看,企业系统可表示为编排多个服务的业务流程。一般来说,可以使用编排较低级别服务的子流程来进一步分解每个服务。图 2 显示了到业务流程和服务的层次结构分解。 图 2. 流程、服务和组件的分解
分解是一种沿用已久的技术。取决于具体的目标,可以应用许多分解条件。分解条件对诸如性能、灵活性、全面性、开发时间、可变性、重用等架构目标具有重大的影响。 几个影响层次结构分解的因素如下:
一般来说,这些因素集合起来决定了较高级别的流程具有更大的粒度和更广的可见性,而较低级别的组件具有更细的粒度和有限的可见性。 为了实现层次结构分解,ACME 的业务分析人员通过开发一个用于保险单签发的业务模型,从而开始确定企业业务服务。该模型涵盖公司中的所有关键业务流程,并包括实现流程及其排序所需的主要业务活动。 该 ACME 业务模型基于 IBM Insurance Application Architecture (IAA) 定义的行业标准概念、定义和高级流程,IAA 定义了标准化的保险单签发模型(请参见 参考资料)。遵循 IAA 使得 ACME 可以利用保险行业积累的集体知识。这个基于 IAA 的高级保险单签发流程如 图 3 所示。 图 3. 简化的保险单签发流程
基于该业务模型将解决方案分解为服务产生了一组服务,如 图 4 所示。在此例中,我们仅使用了一个级别的分解。 图 4. 基于层次结构分解的 ACME 服务
基于企业业务模型的层次结构分解可以实现业务与 IT 之间的一致性,但是并不保证最终的服务将遵守基本服务原则。应该将以下附加的服务方面考虑进分解过程中。
下面返回到保险单签发流程的分解:ACME 已购买了一个复杂的文档管理系统,该系统能够处理文档编写和存档。虽然企业业务模型指示这些功能使用单独的服务,但是分解将产生两个严重彼此依赖的服务。将编写和存档任务组合在一起就得出了一个遵守自主边界的服务。
图 5. 重构的 ACME 服务
定义已确定的服务的接口是 SOA 分解的一个重要组成部分。接口定义需要指定服务所交换、使用和生成的消息。 基于企业业务模型的自顶向下的设计能够产生可互操作的语义接口定义。 最终的语义数据模型定义了企业的标准业务对象或实体,例如保险单、索赔等等。围绕语义数据模型(互操作性)实现的 SOA 表示语义 SOA。 语义 SOA 提供了服务之间增强的互操作性:在接口级别,所有服务都使用相同的数据定义进行工作。事实上,这消除了对服务之间的消息转换的需要。由于服务接口是基于标准企业语义模型创建的,因此无论服务使用者是什么,都可以保证每个服务将理解并正确解释所有消息。
尽管语义数据模型好像类似于标准化的企业数据模型,但是两者是完全不同的,不应该彼此混淆。语义数据模型定义了服务所交换的消息。消息实现服务间的通信。因此,消息是瞬态的,并不驻留在数据存储区中(至少不显式驻留在数据存储区中)。 相反,企业数据模型定义了数据库中的数据的数据结构和数据之间的关系。企业数据模型集中于诸如快速检索、低冗余、部分聚合等在数据存储区之外的不相关方面。 实现 SOA 涉及到使现有的企业应用程序能够支持服务。更改基础数据模型是开销极高的任务,通常需要完全重新编写应用程序。相反,SOA 消息基础设施是构建架构的一部分,这意味着可以作为 SOA 实现的一部分创建 SOA 消息基础设施。 存在使用模式和最佳实践来实现 SOA 中的语义互操作性的不同方法。经验表明,用于定义服务的相同企业业务模型还应该包括语义数据定义。例如,IAA 和 ACORD 都定义了用于保险业事务的 XML 消息。这些标准减少了业务合作伙伴彼此创建新数据接口所需的时间和精力。 在定义 SOA 语义数据模型时,务必记住该模型提供 XML 数据消息 而不是数据持久性 的基础。存在几个针对模型创建的重要注意事项。 XML 使用层次结构数据模型。层次结构模型与传统数据库中使用的数据模型具有显著的区别,例如旨在用于快速更新和检索的规范化关系数据模型,或者旨在按各个维度切分的多维数据模型。因此,常见的数据库设计技术(规范化、联结、外键等等)很少适用于这种情况。这些技术通常导致过度复杂的 XML 实现。XML 模型设计通常需要大量的数据反规范化 (de-normalization),并尽量最小化 XML 对象之间的交叉引用。 XML 有效负载将在跨越每个服务边界时进行封送/取消封送,因此使用 XML 中的“小”类型导致了大量的序列化开销,从而对性能产生负面的影响。每个 XML 类型都进行封送/取消封送处理,使其成为一个单独的对象,这意味着使用小 XML 类型导致在执行期间创建和删除许多对象。建议在语义数据模型设计期间增加 XML 对象的大小。 过多的 XML 类型嵌套会导致对有效负载进行更加复杂的 XML 处理。过多的 XML 嵌套通常导致在封送/取消封送过程中创建附加的语言对象,并需要更复杂的表示法来访问数据。最大限度减少 XML 有效负载定义中的嵌套是有利的。 在本文中,您探索了一种面向服务的分解方法,此方法是由面向服务的建模和体系结构(Service-Oriented Modeling and Architecture,SOMA)所定义的服务标识的扩展。此方法是对域分解和目标服务建模5的补充,后者由 SOMA 根据用于确保服务互操作性的企业架构原则和语义消息定义来用于重构。您还了解了:
非常感谢 Edward Kuffert 提出了许多极大地改进本文的建议。 学习
获得产品和技术
讨论
|
|||||||||||||||||||||||||||||
| 最近更新 ( 2008-05-10 21:24:33 ) | |||||||||||||||||||||||||||||

