【IT168 技术文章】
本文来自于 Rational Edge:发生于面向服务的体系架构中的业务事务是非常复杂的,因为服务常常是异步、无状态、分布式,且不透明的。本文将介绍事务协调服务如何编排并管理该复杂性。
插图 事务几乎是所有业务交互的必要部分。事务的存在是为了确保适当地记录下特定业务运作的所有部分,如果任何一个单独的部分失败了,那么为了维持数据一致性,事务在整体上应该失败。由于基于 Web 服务的特性,面向服务体系架构的到来为事务管理增加了一层复杂性,服务常常是异步的、无状态的、分布式的,且不透明的。为了让商家从面向服务的方法中获得充分的价值,服务开发人员必须了解事务管理的机制,包括资源募集、业务功能协调、一致性控制,及恢复。
这个两部分的文章讨论了在复杂的面向服务的体系架构中实现事务的特性,以及周围的问题。此处是第一部分,我通过一个事务协调服务(Transaction Coordination Service,TCS)来介绍事务管理,其必须具有组织并控制复杂的业务运作的能力,包括资源募集、业务功能管理、并发控制,及失败恢复。第二部分将介绍事务控制服务(Transaction Control Service)的候选架构。
自动化及业务运作
一百年前,业务运作是劳动密集的。办公室中充满了繁忙,忙碌的职员必需跟踪每个业务交互并且维护一个用于订单、交付,和支付的有组织且一致的记账系统。他们利用人工技术,如双份的会计账目,用以确保在错误实质上影响到业务之前检测并分辨出它们。一个业务“事务”是完整的账目记录,从拿到订单,到客户为产品或服务的最终支付。
现今,软件自动化已经允许以几乎无人的方式来处理业务运作。在没有人工干涉的情况下,接收 Web 订单、评估收费,并交付产品。因此,在维持一个高水平的记账精确性的同时,对商家来说,处理操作已经更加快捷且更加便宜。事实上,事务已经复杂得多,并且在对客户的最终交付时,可能涉及许多公司。例如,设想一个光缆电信服务,客户从电信厂商那里购买卫星频道接入、宽带因特网、蜂窝服务,及因特网游戏预定。该厂商依次与其他厂商签署协议,提供每一种服务并且分享最终付款的一部分。缺少了某种形式的自动化监控,管理这样复杂的业务交互会十分困难(且昂贵)。因而,业务运作现在可能会涉及许多独立的软件系统,以分布式的异步方式进行交互。
面向服务的体系架构(Service- Oriented Architectures,SOA)的引入将此互操作性带到甚至更高层的复杂性。在基于 SOA 的系统中,服务是以松散耦合且独立于平台的方式由一个系统提供给另一个系统的(经常来自多个竞争的公司)。这些服务可以提供任意层次的业务功能,从订单管理,到记账,到存货清单,到执行。通过将一组服务收集到一起,就可能建立一个任意复杂的业务运作,所有的都跨越分布式的网络无缝地交互。当来自一个操作的业务是另一个所需时,错综复杂的部分出现了:例如,存货清单分配需要一个订单号,其顺次生成一个用来计算月记账综述的记账系统所使用的记录。确保此环境下的数据一致性需要事务协调服务(Transaction Coordination Service,TCS)的某种形式的事务管理。TCS 必须有能力组织并控制复杂业务运作,包括资源募集、业务功能管理、一致性控制,及失败恢复。
协调分布式的服务
处理分布式的服务需要非常了解要自动化的业务功能。面向服务的体系架构灵活性(这样服务可以快速地换入换出)的代价是组织并控制业务活动的额外费用。每个服务只提供整个业务事务的一小部分,结果是一个操作进入另一个的处理中(例如订单执行和记账)。要成功地创建复杂、相互依赖的一系列服务,服务协调者(Services Coordinator)(也就是,系统架构师)必须定义每个服务接口,那些服务创建并消费的工作产品,以及处理异常条件的规则。
第一步是定义业务功能,由信息自动化支持的业务过程的一个确定部分。利用 XML 说明业务流和参与者的规范,最近由商业伙伴联盟(包括 IBM、BEA Systems、Microsoft、SAP AG,和 Siebel Systems)发布。该规范称为 Business Process Execution Language for Web Services (BPEL4WS) 1 。该规范允许以独立于平台的方式定义业务功能,类似于 WSDL(Web 服务描述语言(Web Services Description Language))对 Web 服务的声明。当然,实现 BPEL 定义的客户系统必须解析并解释规范的 XML 标签,但是此方法比对服务描述和序列信息硬编码要灵活得多。业务事务由另一组标准来描述 —— WS-Transaction —— 业务功能绑在一起(WS-Coordination)形成要么是工作的独立单元(WS-AtomicTransaction),要么是长期进行操作的集合(WS-BusinessActivity) 2 。