SOA的主要目的是实现业务的敏捷性, 而BPM(业务流程管理)是SOA价值的关键所在。 但在SOA实践中, 对于BPM仍面临着不少困惑与选择。 有些项目把业务流产品用作工作流设计, 而有些工作流为主的产品工具却作为业务流实现。这里简单地讨论一下BPM中业务流与工作流的作用区别。
简言之, 业务流程管理主要包含业务建模, 组装, 部署及管理。 使用业务流或工作流工具似乎都能设计开发业务流程管理。 但从SOA的角度, 服务的划分及交互通常是项目关注的重点。 所以, SOA强调的是如何灵活组合业务服务。 而业务流的核心功能是编排流程服务, 并且主要针对企业级应用整合。 同时利用BPM工作流的主要功能, 诸如: 活动(任务)节点的人工任务配置, 流程运转时的活动节点调控等。
现在来简要概述一下工作流与业务流的主要区别:
- 架构规范
工作流, 顾名思义, 主要是定义, 创建及执行工作流。 它一般使用WFML, XPDL流程定义等规范, XML/WSDL等Web服务规范, 及其它一些便于开发的规范(例如jPDL等)。 建模可基于BPMN标准。 基本上是面向应用构件的流程管理架构。 主要用于系统应用内或系统应用间。 流程管理周期一般为: 建模/开发, 部署, 管理。 项目重点为设计, 快速开发。 流程导向可由人员为中心, 文档路由等。 注重页面流。 重用性较差。
业务流一般使用BPEL执行语言规范, 并结合使用SCA/SDO等。 建模可基于BPMN标准。 业务流主要是服务组合, 服务编排及并发处理。 它是面向服务的企业级端到端业务流程管理。 主要用于跨系统, 跨部门的企业系统。 人员服务可基于BPEL4People规范。 流程管理周期为建模, 开发/组装, 部署, 管控(可包括服务注册仓库)。流程项目重点为建模, 组装及群体合作转换。 流程导向以业务为中心, 注重企业级应用需求及流程优化。 流程即服务(规范化)。
- 开发运行
工作流的建模与开发使用统一流程模板。 一般依据工作流模式。 流程较可控。 使用的编程语言及模式为C++, Java, SQL, JS, MVC 等。 编程除错基本反映在程序层面。 学习上手较快。 开发周期较短。 业务流程监控一般表现在流程或活动节点。
业务流一般建模与开发分开进行。 强调业务为导向。 流程状态及动态性可通过服务组合与其他系统关联。 当流程跨越多个用户及交互时,
与组织结构的变化关联较大。 服务可动态绑定。 编程语言及模式通常为SCA, SDO, XQuery, XPath, BPEL等。 编程除错反映在建模和流程界面。 技术掌握具有一定的曲线要求。 业务流程监控涉及流程/任务以及业务对象层。 监控的复杂性相对增加。
- 接口差异
工作流比较适于图像, 文档等传输。 使用变量参数, 一般无松散持久层。 内嵌人员接口。 系统接口主要是应用层面, 而非系统事务性整合。
业务流数据接口关联主要通过SDO/业务对象, 更加适应结构性数据。 人员接口为内嵌或独立的人工服务。 系统接口针对外部, 适应企业级系统与系统交互整合, 接口标准化。
- 产品技术
工作流一般使用私有技术或J2EE等。 流程引擎将任务, 人员组织等内置。 通过引擎进行队列, 优化。
业务流以标准形式兼容不同技术。 流程引擎构成技术服务组件, 属于产品化中间件。
概括而言, 在BPM中, 业务流偏于应用业务整合及业务动态组合。 工作流则偏于人员交互等。 BPM通常同时包括工作流和业务流, 集流程调控与企业应用整合于一身。 在项目中, 取决于业务需求, 往往采用不同的流程架构设计。 例如, 侧重于人员交互的流程管理以工作流为主, 而强调业务服务组件的灵活性以业务流为主, 并可外加人员服务。 当然, 也可同时采用工作流与业务流形成综合业务流程管理系统, 例如, 以工作流为导向, 利用业务流的组合服务, 同时利用企业整合的中介服务等。
在SOA/BPM 初始阶段, 如果一个企业没有较深的IT或ERP根基, 实施业务流会有相当的阻力。 因为业务流程管理并非主要是技术问题。 对于有些中小型企业或应用(特别是那些没有规范支撑的人工流程模式), 某些随意包干, 或带有自由流功能的工作流系统一般更易于接受。
值得一提的是, 工作流与业务流的定义范围有相当程度的交叠与互斥, 这取决于采用的流程管理产品(或几个不同产品)及架构设计。 工作流可以理解为技术层面的东西或办公自动化, 而SOA关注业务流的实现, 并且关注流程的生命周期管理。 其实, 工作流或业务流本身并无绝对优势, 用好用对才是关键。
本文仅代表作者的个人观点,不代表任何公司立场。