学习和研究在企业中实施面向服务架构(SOA),简单回顾SOA和ESB,重点关注微软在SOA领域的相关指导和.NET社区的相关开源的解决方案,和大家一起来探讨如何在企业里实现SOA,期望有实施SOA经验的同学发表意见。
一、SOA的历史
1996年,Gartner最早提出SOA。2002年12月,Gartner提出SOA是"现代应用开发领域最重要的课题",SOA并不是一个新事
物,IT组织已经成功建立并实施SOA应用软件很多年了,BEA、IBM、等厂商看到了它的价值,纷纷跟进。SOA的目标在于让IT变得更有弹性,以更快
地响应业务单位的需求,实现实时企业(Real-Time Enterprise,这是Gartner为SOA描述的愿景目标)。而BEA的CIO
Rhonda早在2001年6月就提出要将BEA的IT基础架构转变为SOA,并且从对整个企业架构的控制能力、提升开发效率、加快开发速度、降低在客户
化和人员技能的投入等方面取得了不错的成绩。
SOA是在计算环境下设计、开发、应用、管理分散的逻辑(服务)单元的一种规范。这个定义决定了SOA的广泛性。SOA要求开发者从服务集成的
角度来设计应用软件,即使这么做的利益不会马上显现。SOA要求开发者超越应用软件来思考,并考虑复用现有的服务,或者检查如何让服务被重复利用。SOA
鼓励使用可替代的技术和方法(例如消息机制),通过把服务联系在一起而非编写新代码来构架应用。经过适当构架后,这种消息机制的应用允许公司仅通过调整原
有服务模式而非被迫进行大规模新的应用代码的开发,使得在商业环境许可的时间内对变化的市场条件做出快速的响应。
SOA也不仅仅是一种开发的方法论--它还包含管理。例如,应用SOA后,管理者可以方便的管理这些搭建在服务平台上的企业应用,而不
是管理单一的应用模块。其原理是,通过分析服务之间的相互调用,SOA使得公司管理人员方便的拿到什么时候、什么原因、哪些商业逻辑被执行的数据信息,这
样就帮助了企业管理人员或应用架构师迭代地优化他们的企业业务流程、应用系统。
SOA的一个中心思想就是使得企业应用摆脱面向技术的解决方案的束缚,轻松应对企业商业服务变化、发展的需要。企业环境中单个应用程序
是无法包容业务用户的(各种)需求的,即使是一个大型的ERP解决方案,仍然不能满足这个需求在不断膨胀、变化的缺口,对市场快速做出反应,商业用户只能
通过不断开发新应用、扩展现有应用程序来艰难的支撑其现有的业务需求。通过将注意力放在服务上,应用程序能够集中起来提供更加丰富、目的性更强的商业流
程。其结果就是,基于SOA的企业应用系统通常会更加真实地反映出与业务模型的结合。服务是从业务流程的角度来看待技术的--这是从上向下看的。这种角度
同一般的从可用技术所驱动的商业视角是相反的。服务的优势很清楚:它们会同业务流程结合在一起,因此能够更加精确地表示业务模型、更好地支持业务流程。相
反我们可以看到以应用程序为中心的企业应用模型迫使业务用户将其能力局限为应用程序的能力。
企业流程(enterprise
process)是流经企业框架的空气,它赋予业务模型里的组件以生命,并更加清晰地定义了它们之间的关系。流程定义了同业务模型进行交互操作的专门方
法。例如,会计可能是企业服务系统的一个组件--但是将发票寄给客户却是一个业务流程。服务被定义用来支持业务流程,因而贯穿整个流程始终的是:各种服务
组件在流程和逻辑实现过程中的装配操作。理解业务流程是定制服务的关键所在。
二、SOA 的描述所适用的原则
- 利用显式的与实现无关的接口来定义服务。
- 利用强调位置透明性和可互操作性的通信协议。
- 封装可重用业务功能的服务的定义。
图 1说明了这些原则。注意,虽然 Web 服务技术非常符合这些原则,但它并不是唯一符合这些原则的技术。
图 1: SOA 的原则
为了实现 SOA,应用程序和基础架构都必须支持 SOA 原则。启用 SOA 应用程序涉及到创建服务接口,服务接口可以直接也可以间接地通过使用适配器用于现有的或新的功能。从最基本的级别来看,启用该基础架构涉及到规划功能来将服务请求路由和传递给正确的服务提供者。然而,基础架构支持在不影响服务的客户端的情况下由另一个服务实现替代原有的服务实现也是至关重要的。这不仅需要根据 SOA 原则指定服务接口,而且需要基础架构允许客户端代码以独立于所涉及的服务位置和通信协议的方式来调用服务。
三、ESB是什么?
根据维基百科的ESB定义,ESB有如下特性:
- 它是面向服务架构的实现。
- 它通常是操作系统和编程语言无关的;它应能在Java和.Net应用程序之间工作。
- 它使用XML(可扩展标识语言)作为标准通信语言。
- 它支持Web服务标准。
- 它支持消息传递(同步、异步、点对点、发布-订阅)。
- 它包含基于标准的适配器(如J2C/JCA),用于集成传统系统。
- 它包含对服务编制(orchestration)和编排(choreography)的支持。
- 它包含智能、基于内容的路由服务(itenerary路由)。
- 它包含标准安全模型,用于ESB的认证、授权和审计。
- 它包含转换服务(通常是使用XSLT),在发送应用和接收应用之间转换格式,简化数据格式和值的转换。
- 它包含基于模式(schema)的验证,用于发送和接收消息。
- 它可以统一应用业务规则,充实其它来源的消息,分拆和组合多个消息,以及处理异常。
- 它可以条件路由,或基于非集中策略的消息转换,即不需要集中规则引擎。
- 它可监视不同SLA(服务级别合约)的消息响应门限,以及在SLA中定义的其它特性。
- 它(常常)简化“服务类别”,向更高或更低优先级用户做出适当的响应。
- 它支持队列,在应用临时不可用时用来保存消息。
- 它由(地理)分布式环境中的选择性部署应用适配器组成
对于其中一些厂商(IBM、微软)来说,ESB是将一系列能力联结在一起的一种模式,而其他厂商认为ESB是一种产品。在2005年,微软Identity Platform的产品经理Rich Turner写道:
ESB[产品]是一根聪明的管子,用来连接各个愚笨的节点。[……]Web Service的途径让节点本身也变得聪明,减少了对底下聪明管道的需要,并确保了跨越任何平台与设备的开放的通讯。