SOA 的面向流程的建模,第 2 部分: 流程模式
 

2009-10-09 作者:Ruud Schoonderwoerd 来源:IBM

 
本文内容包括:
了解一组与 SOA 一致的业务流程模型,这些模式均使用了第 1 部分描述的分解技术。每个模式都属于分解框架的某个层。有针对使用者、长时间运行的流程、人员活动和短时间运行的流程的模式。在本系列中,您将了解一项新的业务流程分解技术,以帮助您指定与面向服务的体系结构(Service-Oriented Architecture,SOA)一致的业务流程。

流程模式

第 1 部分介绍了一项流程分解技术,可供用于帮助将业务流程与基于面向服务的体系结构(Service-Oriented Architecture,SOA)的目标体系结构保持一致。此技术根据松散耦合的层堆栈(与 SOA 解决方案堆栈非常相似)组织各个流程,如图 1 中所示。

图 1. 与 SOA 一致的流程堆栈
图 1. 与 SOA 一致的流程堆栈

本文将演示使用此技术的业务流程模型,展示其实际使用。模式是标识 IT 解决方案重复行为的有用方法,可以应用于流程模型。

这些模式旨在抛砖引玉,您还可以将分解框架应用到各种新情况。

模式根据图 1 中所示,从使用者流程层开始组织为多个层。

对于本文中的每个模式,提供了以下信息:

问题
此模式尝试解决什么问题?
解决方案
除流程关系图之外的关于解决方案的任何其他信息。为何此解决方案优于其他解决方案?
流程控制者
此模式中什么控制流程流,以及流程通常如何实现。
重用
在此模式中重用的其他模式。
示例
此模式的用途的示例。

符号

业务流程模式使用业务流程建模符号(Business Process Modeling Notation,BPMN)V1.1。BPMN(请参见参考资料)是图形流程符号的行业标准,受到各种流程建模工具的支持,如 IBM® WebSphere® Business Modeler。

这里所使用的 BPMN 已进行了扩展(按照标准的规定),具有图 2 中所示的图标。

图 2. 关系图的关键图标
图 2. 关系图的关键图标

BPMN 标准支持两种类型的子流程:嵌入型和独立型。嵌入的子流程属于父流程。它们实际上是父流程的折叠部分。独立子流程可以在不同的流程内使用。在下面的模式中,只要使用了子流程符号(方框包含着的“+”),始终意味着调用另一个独立流程。

在本文的流程关系图中,“transaction”(事务)一词可能会缩写为“Txn”。

按照图 1 中的各个层的顺序,本文剩下的部分将讨论:

使用者流程模式

使用者层中的流程模式是特定于应用程序(代表企业的入站通道)的流程的蓝图。它们调用由短时间运行或长时间运行的业务流程实现的业务流程服务,或自动化活动实现的服务操作。所有特定于通道和应用程序的逻辑都驻留在这个层中。

自助事务

图 3. 自助事务
图 3. 自助事务
问题
您需要建模使用基于 Web 的用户界面中的表单输入业务事务的流程。可以使用不同的通道调用这个相同的业务事务。
解决方案
流程模型是用户界面流,包含在事务执行前验证服务的调用。通过与执行事务模式结合,此模式可帮助将通道细节与独立于通道的业务流程分离开。另外还可以通过将故障向用户报告来防止不必要的手动错误纠正工作(由于 Web 事务故障产生的)。
流程控制者
使用者层,屏幕流。这通常使用任意用户界面技术实现,如具有页面流控制器的 Java™Server Page (JSP)。
重用
执行事务,一个短时间运行的流程模式。
示例
大部分在线事务都涉及到完成表单,如订单处理或抵押申请。

具有转发机制的关键事务

图 4. 具有转发机制的关键事务
图 4. 具有转发机制的关键事务
问题
这是前面提到的自助事务模式的变体。这里,一名办事员输入事务的详细信息,这些信息通过纸质表格或与客户的电话对话得到。如果事务导致错误,办事员可以决定将其转发给其他人,如主管或专家。
解决方案
如果有问题,用户可以将事务转发给专家。如果验证被拒绝,或验证本身(如果是短时间运行的)返回业务级别异常,通常会发生这种情况。
流程控制者
使用者层,屏幕流。这通常使用任意用户界面技术实现,如具有页面流控制器的 JSP。
重用
短时间运行的流程模式执行事务和长时间运行的流程模式解决事务问题
示例
有人尝试在商店中购买一个移动电话,但是由于某个未知原因,订单事务未能被中央系统接受。为了不丢失业务,商店办事员会将订单转发到中央操作,但仍然从客户收取款项(在流程中的前面某个步骤中进行),并将电话交给客户。中央操作然后解决订单事务的任何未完结问题,以便随后进行网络部署。

采用企业内容管理(Enterprise Content Management,ECM)的纸面事务

图 5. 采用 ECM 的纸面事务
图 5. 采用 ECM 的纸面事务
问题
纸质表格送达组织,并送到 ECM 部门,进行扫描、存储和数据提取。
解决方案
此模式的关键方面是使用提取的数据调用事务,如图 6 中所示。此模式假定 ECM 系统不能处理此事务的业务异常。使用“即发即弃”(Fire and Forget) 机制调用具有内置问题解决方法的事务变体。
流程控制者
使用者层,ECM 系统。
重用
具有问题解决方法的执行事务,长时间运行的流程模式。
示例
处理以纸质表格形式提交给政府组织的地址变更。

拒绝错误的 B2B 批处理事务

图 6. 拒绝错误的 B2B 批处理事务
图 6. 拒绝错误的 B2B 批处理事务
问题
企业向外部组织公开接口,以采用批量格式接收特定事务。
解决方案
各个事务的数据从批量数据中提取,并作为短时间运行的流程逐一单个调用。会对事务所产生的异常进行比较和合并,以便返回到调用组织。

B2B 通道重用也可以用于其他通道的相同事务逻辑。出于性能原因,在使用所讨论的 SOA 原则实现此模式时,如果涉及的量极大,则可能不是最好的解决方案。要采用其他方式,例如,实现可以基于直接操作数据库的脚本。

流程控制者
使用者层,ESB 类型平台。
重用
执行事务短时间运行流程模式。
示例
移动电信组织将其前一周的放号情况提交到目录服务中。目录服务根据模式处理此批处理任务。

这个 B2B 场景有很多变体。

这里使用的流程模型旨在演示 B2B 通道的流程或服务重用,并非始终是建模 B2B 模型的最好方法。

长时间运行的流程模式

长时间运行的流程层中的流程由使用者层直接调用,或通过短时间运行的流程层中的事件触发。长时间运行的流程使用 SOA 参考体系结构中的业务流程服务调用。它们通常使用业务流程管理(Business Process Management,BPM)平台实现。

具有问题解决方法的执行事务

图 7. 具有问题解决方法的执行事务
图 7. 具有问题解决方法的执行事务
问题
使用者流程需要执行事务,但没有能力处理可能会出现的异常(问题)。
解决方案
使用长时间运行的流程将事务执行作为短时间运行的子流程包括,并将对应的异常作为长时间运行的子流程处理。此模式允许进行事务处理,具有问题解决方法,而且两个功能间并没有紧密耦合。
流程控制者
(SOA 参考体系结构的)业务流程层,编排的长时间运行的流程,使用 BPM 引擎实现。
重用
短时间运行的流程模式执行事务和长时间运行的流程模式解决事务问题
示例
业务合作伙伴自身没有错误纠正工具的 B2B 事务。基于纸张的脱机事务。

验证确认

图 8. 验证确认
图 8. 验证确认
问题
使用者流程需要提交事务(代表图 8 中的订单)。您希望将事务表示为长时间运行的流程。但使用者需要立即知道基本验证是否成功。使用者还需要流程的句柄,以在后面的阶段接收状态信息。
解决方案
有多个解决方案可以采纳。这里所述的是长时间运行的流程,其中首先包含的是一个短时间运行的验证,然后是向使用者提供订单 ID 的步骤,然后是长时间运行的履行流程。此模式允许长时间运行的流程在长时间运行的部分开始前返回句柄或中间结果。
流程控制者
(SOA 参考体系结构的)业务流程层,长时间运行的流程,使用 BPM 引擎实现。
重用
不适用
示例
大多数下订单应用程序需要立即确认订单,但履行则是长时间运行的流程。

对于这个问题,有一个替代解决方案(作者偏向于采用这个方案)。您可以设置一个独立的短时间运行的流程,如下订单。此流程的结果是一个“即发即弃”(Fire and Forget) 事件,会导致启动长时间运行的流程履行订单。此解决方案在执行事务模式中有效。

解决事务问题

图 9. 解决事务问题
图 9. 解决事务问题
问题
事务存在问题(错误或异常),必须由企业中一个或多个专家进行处理。
解决方案
采用特定于事务或特定于出现的问题(取决于共性存在于何处,本示例假定是前一种情况)的独立长时间运行的流程来解决问题。不过,它独立于事务,因此,如果事务导致一个或多个异常,则使用者应用程序可以选择是否调用它。

根据事务的问题的类型,问题将分配到特定于问题类型的解决子流程。这些可能很简单,仅涉及到一名专家,也可能很复杂,涉及到自己的长时间运行的流程。多个问题按顺序解决。每个问题解决子流程的输出都是一个标志,指示对事务进行了什么处理。

例如,事务可能重新提交成功,重新提交未成功有遗留问题,或被完全拒绝。如果仍然有问题,则会根据其类型进行重新分配。问题通常不能以并行方式进行解决,因为解决问题可能会导致事务有效负载的变化。

此解决方案可以通过多种方式进行重用:

  • 将问题解决同事务分离,分别用于不同技能熟练程度的用户的多个使用者可能会在不同的环境下调用此流程。
  • 通过采用独立的特定于问题的子流程,可以在出现相同问题的各个流程中重用这些子流程。
流程控制者
(SOA 参考体系结构的)业务流程层,长时间运行的流程,使用 BPM 引擎实现。
重用
人员活动模式解决简单问题和长时间运行的流程模式解决复杂问题
示例
合作伙伴自身没有错误纠正工具的 B2B 事务。基于纸张的脱机事务,没有和联机事务一样的对客户的直接反馈。

解决复杂问题

问题
出现了需要多个专家提供信息或进行批准的事务问题。
解决方案
当前没有专门用于标识这个长时间运行的流程的特定模式。很多不同的场景都包含了本文中定义的其他模式的元素。这里仅将其作为参考列出。
流程控制者
(SOA 参考体系结构的)业务流程层,长时间运行的流程,使用 BPM 引擎实现。
重用
不适用
示例
专家审查,调查潜在欺诈,多次审批。

编排的租用履行流程

图 10. 编排的租用履行流程
图 10. 编排的租用履行流程
问题
当客户租用某个东西时,组织可能希望从始到终跟踪客户情况。此流程并不由企业进行完全控制,因为它依赖于客户领取租借物品并按时返回。客户可能不会在需要时完全按照规定的步骤进行。
解决方案
出租流程通过新预定事件触发。将立即分配所出租的资源。接下来所发生的情况不依赖于业务逻辑(如其他模式中使用的 BPMN 决策网关),而依赖于外部事件,如:
  • 客户取消预定。
  • 客户提货,出租开始。
  • 预定截止期限到期。
将使用 BPMN 基于事件的网关。无论发生什么事件,首先要确定业务流程的路径。resource usage started 事件假定由独立的短时间运行的流程引发,记录出租开始(例如,客户领取物品)。resource usage completed 事件设置为由记录出租结束的类似短时间运行的流程引发。

resource usage completed 事件还可以触发完全独立的 prepare resource for next usage 流程。这不是客户情况的一部分。

流程控制者
(SOA 参考体系结构的)业务流程层,长时间运行的流程,使用 BPM 引擎实现。
重用
不适用。
示例
DVD 租赁、酒店预定、汽车出租。

人员活动模式

人员活动层代表编排的长时间运行的流程(或工作流流程)内由某个人员执行的活动。人员活动在人员开始活动前出现在相应角色的工作列表中。

解决简单问题

图 11. 解决简单问题
图 11. 解决简单问题
问题
可以由单个人解决的事务问题。虽然活动可能需要具有高级资格或专业级专家,但也将其定位为“简单”问题。您需要定义此人用于处理问题的步骤。事务可能需要重新运行,因此解决问题的人需要关于是否成功的即时反馈,而这个人在必要的情况下可能需要时间来更新事务。
解决方案
这是人员活动,当用户从任务列表(通过 BPM 用户界面呈现)中选择时启动。此活动包括在解决事务问题流程中。此流程模型实际上代表屏幕流。活动的结果传递回进行调用的长时间运行的流程,可以为以下任意情况:
  • 事务已成功完成。
  • 事务被拒绝,并通知了客户。
  • 事务已保存,等待从客户请求更多信息。
  • 事务有需要进一步解决的问题。
  • 活动已取消。
  • 活动需要重新分配给另一个人。

这里定义的步骤由相同的人员执行,具有明确定义的输入和输出。事务的执行是此活动的一部分,因此执行此活动的人员可以获得关于是否成功的即时反馈。

流程控制者
人员活动层,屏幕流。
重用
短时间运行的流程模型执行事务
示例
任意有人员问题解决步骤的流程。

短时间运行的流程模型

短时间运行的编排流程经常代表与客户的目标直接关联的业务事务。下面的模式解决此类事务的处理。

执行事务

图 12. 执行事务
图 12. 执行事务
问题
您需要业务流程实现事务,并可以跨多个不同通道(使用者)进行重用。此事务可以为下订单、申请或更改业务数据。
解决方案
事务的元素包含在短时间运行的业务流程中。任何事务中第一步都是执行业务验证。它们可以并行进行,如图 12 中所示,也可以顺序进行。将执行每个验证并比较结果,以在失败的情况下将这些返回到调用应用程序。验证之后,将更新基础系统,按图中所示并行进行,或按顺序进行。

很多事务都需要履行流程。在此示例中,将会在生成事件的情况下在后台启动。事务 ID 返回到使用者,以查询履行流程的状态。

此模式适用于很多事务类型,如下订单、申请抵押贷款或申请驾照。它允许联机使用者应用程序获得关于事务是否成功的即时反馈。用户可以申请纠正或尝试重新提交。脱机使用者应用程序(例如,没有用户的应用程序)可以重用此功能,并通过调用使用解决事务问题模式的流程或调用直接使用具有问题解决方法的执行事务模式的流程确保解决问题。

流程控制者
业务流程层,短时间运行的流程,使用 BPM 引擎或自定义代码(例如,Java)实现。
重用
不适用。
示例
下订单。

具有补偿的执行事务

图 13. 具有补偿的执行事务
图 13. 具有补偿的执行事务
问题
执行事务相同的问题,但我们还需要确保事务的原子性,即如果服务之一失败,从流程内调用的服务将回滚到之前的状态。
解决方案
这是执行事务 的高级版本。补偿 事件触发流程内的各个补偿中间事件。每个中间事件都会导致调用具有 undo 函数的服务的此函数。尽管在提交 操作(“更新系统”活动)之前执行的验证步骤应该确保提交 操作成功,但实际中,这并不是 100% 可靠。此模式实现万无一失方法,涵盖了提交故障。
流程控制者
业务流程层,短时间运行的流程,使用 BPM 引擎实现。
重用
不适用。
示例
下订单。

总结

本文演示了使用分解技术将业务流程与 SOA 体系结构保持一致的业务流程模式。您了解了在定义要在 SOA 解决方案(如 IBM SOA 参考体系结构)上实现的业务流程时可以使用的模式。每个模式都代表属于以下某个流程层之一的流程:使用者流程、长时间运行的流程、人员活动流程和短时间运行的流程。

参考资料

学习 获得产品和技术
  • 下载 IBM 产品评估版 ,并开始使用来自 DB2、Lotus、Rational、Tivoli 和 WebSphere® 的应用程序开发工具和中间件产品。
讨论
  • 参加 IT 体系结构论坛,交流技巧和技术,分享关于 IT 体系结构这一广泛主题的其他相关信息。

火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织