Safeco的复合应用模型2010-02-06 infoq JJ Dubray……罗小平Safeco是一家总部位于西雅图的保险公司,它提供汽车、房屋和小企业保险业务。Safeco建设了一个全国性的代理商网络。调查表明,这些代理商高度认可公司目前的Web销售服务平台,认为它是业界最好的。这个平台前端用.NET开发,后端则是使用了多年的IMS应用系统。2006年初,Safeco为了提升产品研发和业务流程运作水平,启动了SOA系统项目。即便仅从IT角度看,此项任务也是颇具挑战性的,因为我们每次启动的新产品、解决方案和流程优化项目往往都是独立的,缺乏对系统一致性和项目边界的精确度量。我们还必须在减低解决方案实现成本的同时,显著提高对用户的响应速度,从而满足市场需要并实现我们的财务目标。SOA介绍SOA是实现业务改进和敏捷的良方,因为它的可重用模型为通过复用和扩展现有组件实现新的解决方案提供了可能。现在,通过分布式、特别是面向服务技术,我们可以在性能、扩展性、可靠性、安全性和互用性等多个方面赋予IT资源(数据和代码)复用能力,并确保复用成本低廉。依靠传统手段,每次在新地点配置IT资源时,都需要耗费一份预算。而使用新的模型,将能从逻辑而非物理上建立一个统一的信息系统。具体来说,就是依靠新型的代理、服务等这些提供了数据和功能访问能力的技术来实现这个目标的。当然,SOA并非等同于服务概念,它其实是一个完整的、组件构成式的应用模型(参见图1):所有操作都被定义为规范的、具有严格边界的活动,如用户交互、服务调用甚至整个流程。这些活动之间实现了松散耦合(如各活动的实现技术和调用堆栈可以不同,但它们之间的连接通道是专用的,安全授权等级是统一管理的)。每个服务都是整个企业业务流程的一个组成部分,它们协作完成复杂的业务功能。

图1 SOA中,整个应用的各个部件松散耦合在SOA中,基础模型上的重要变化,就是将现有应用转化为“Systems of record”(译者注:可理解为原始数据源或数据的第一产生地),并通过实现了Act、Record、Inform和Compute等活动的服务接口予以呈现。成功转化的关键是将业务流程实例的状态从业务对象的内容中分离出来。分离形成的服务,应该不依赖于它的应用环境。比如,它们不需要知道用户在某个时刻调用它们的原因。服务的实现目标是强化整个系统的集成能力;每个服务,本质上都可以看作是一个纯粹的数据接口层。至于服务的应用环境管理则由业务流程层负责(参见图2)。通常情况下,SOA都将依赖于业务流程引擎实现系统功能流转。一旦应用模型各层松散耦合后,BAM(Business Activity Monitoring。通过消息流实现对事件的监控)就容易建立了。甚至通过CEP(Complex Event Processing),BAM还可将各个事件相互关联起来。

图2 SOA应用模型技术选择Safeco在其项目中选择了Microsoft的WCF(Windows Communication Foundation)实现服务层、IBM的WPS(WebSphere Process Server)实现流程层和ASP.NET实现表现层(参见图2)。WCF是迄今为止最为优秀的服务容器之一。Microsoft是业界第一个创新实现服务容器的公司。此容器的特点在于编程模型不依赖于特定技术:用.NET编写的同样代码,可以用各种分布式技术发布,而不局限于WebService。作为WCF的搭档,Service Factory用向导化方式帮助开发者轻松创建完整的服务工程——其基础可以是WSDL文档,也可以是一系列定义了各种操作方法的类。Java在WCF的启发下,也发布了新的组件模型(SCA)。通过SCA,任何Java代码都可使用在发布时选择的分布式技术实现调用。 SCA提出了一种新的装配式编程模型,技术人员可通过依赖注入(Dependency Injection pattern)的帮助,快速集成各种服务和组件(无论是用Java、C++还是BPEL编写的)。SCA的这种装配机制是过去那种在运行时注册逻辑(非物理)路由方式的优秀替代者。对于任何可装配实现的系统来说,都可在装配时而非开发时选择中间件技术。IBM的WPS是一个基于BPEL的业务流程引擎,它可以说是SCA规范的前身。WPS并不了解业务内部细节,它是一个以流程为中心的集成平台——流程本身的定义,则可以利用WBM(WebSphere Business Modeler)这个建模工具来实现和优化。因此,对复杂解决方案的装配,通常应该由集成技术员而非业务分析师完成。至于在表现层选择ASP.NET,主要是因为Safeco的开发团队与这项技术素有渊源,选择其他技术,可能在未来造成被动。当然,我们仍然希望SOA在未来能一直保持让用户根据自身需要、为支持各种用户交互能力而自由选择实现技术的能力。