面向服务架构(SOA)和企业服务总线(ESB)

学习和研究在企业中实施面向服务架构(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有如下特性:

  1. 它是面向服务架构的实现。
  2. 它通常是操作系统和编程语言无关的;它应能在Java和.Net应用程序之间工作。
  3. 它使用XML(可扩展标识语言)作为标准通信语言。
  4. 它支持Web服务标准。
  5. 它支持消息传递(同步、异步、点对点、发布-订阅)。
  6. 它包含基于标准的适配器(如J2C/JCA),用于集成传统系统。
  7. 它包含对服务编制(orchestration)和编排(choreography)的支持。
  8. 它包含智能、基于内容的路由服务(itenerary路由)。
  9. 它包含标准安全模型,用于ESB的认证、授权和审计。
  10. 它包含转换服务(通常是使用XSLT),在发送应用和接收应用之间转换格式,简化数据格式和值的转换。
  11. 它包含基于模式(schema)的验证,用于发送和接收消息。
  12. 它可以统一应用业务规则,充实其它来源的消息,分拆和组合多个消息,以及处理异常。
  13. 它可以条件路由,或基于非集中策略的消息转换,即不需要集中规则引擎。
  14. 它可监视不同SLA(服务级别合约)的消息响应门限,以及在SLA中定义的其它特性。
  15. 它(常常)简化“服务类别”,向更高或更低优先级用户做出适当的响应。
  16. 它支持队列,在应用临时不可用时用来保存消息。
  17. 它由(地理)分布式环境中的选择性部署应用适配器组成

对于其中一些厂商(IBM、微软)来说,ESB是将一系列能力联结在一起的一种模式,而其他厂商认为ESB是一种产品。在2005年,微软Identity Platform的产品经理Rich Turner写道

ESB[产品]是一根聪明的管子,用来连接各个愚笨的节点。[……]Web Service的途径让节点本身也变得聪明,减少了对底下聪明管道的需要,并确保了跨越任何平台与设备的开放的通讯。

四、如何用.NET技术建立完整的SOA环境

微软发布了一个名为“真实世界里的面向服务架构(SOA)”的电子书。这本书表达了微软对面向服务架构的观点,并包括了数个展示如何用微软产品和技术实现SOA的真实案例。书中解释到,SOA的功能型架构本身是松散的,即每个服务本身可以作为企业的IT资产存在、也可以作为生产流程中的处理环节存在,但总体上他们提供了一个完整的视图,而且与独立应用不同,这个视图的内容不是分层的、而是平的,借助这个视图可以提供如下可重用能力:

  • 消息机制服务
  • 工作处理流程服务
  • 数据服务
  • 用户体验服务
  • 主体身份的识别、认证、授权服务
  • 还有通盘的管理能力

所有这些能力用微软的产品描述就是下图:

与强调SCA、SDO等公共标准的Java平台不同,微软平台相应的封装也不是通过商用服务器平台完成,而是更多地借助WCF实现;其中最为重要的ESB角色重则由BizTalk担当,轻则由用户通过扩展WCF + WF完成;至于服务的治理,相对更为统一,与Windows平台其他产品无异,向下借助统一的WMI体系,配合MOM和System Center对SOA的基础平台部分进行治理,向上借助WS_Management协议对服务进行集中管理。

实施SOA集成在所难免,各企业集成的方式大概主要有3种:

  • 购买某厂商的SOA套件,这样无论是组成上的兼容性还是技术支持都有保证,代价就是花费不菲;
  • 集成多种开源的服务器产品和开发框架,显性成本上很划算,但技术实施的成败的风险比较大;
  • 更多依赖操作系统自带的产品,根据IT范围的大小,选择少量的商业产品或开源服务器产品,兼容性风险比全部开源产品要小,成本上也比全盘采购商业套件廉价。《SOA in the Real World》里更多倡导的就是这第三条道路。

微软还赞助了一个针对北美500家拥有1000名员工,或超过这个数字的企业的综合应用平台的研究。其目的旨在确定哪种软件平台被用于构建关键任务的应用,以及什么是首选供应商的关键组件平台等。

五、开源的.NET ESB项目介绍

ESB.NET企业级服务总线:ESB.NET是开源的企业级服务总线,采用的协议是MS-PL。ESB.NET主要包含了MSMQ消息队列机智,SOAP消息收发,ROUTER服务路由,WCF,WSE消息扩展(消息加解密,压缩),还有WF工作流。

开源的通信框架NServiceBus :NServiceBus 是一个用于构建企业级 .NET系统的开源通讯框架。它在消息发布/订阅支持、工作流集成和高度可扩展性等方面表现优异,因此是很多分布式系统基础平台的理想选择。,它能够帮助开发人员在搭建企业.NET系统时避免很多典型的常见问题。同时,该框架也提供了一些可伸缩的关键特征,比如对发布/订阅的支持、集成的长时间工作流及深入的扩展能力等。据作者说,其本意是为构建分布式应用软件创建一个理想的基础设施。

Mass Transit -- .Net Service Bus:Mass Transit是一个.NET平台上的用于构建松耦合应用程序的服务总线框架,这个服务总线支持YAGNI原则(YAGNI原则,就是通过重构提取公因式当出现一次时,不分层,以后业务复杂了,马上抽象出一个层次来,分层是依赖倒置原则和模版方法模式的应用。)。通过一套严密的关注点,Mass Transit和应用程序之间的接触最小化和清晰的接口.

时间: 2024-08-08 00:05:00

面向服务架构(SOA)和企业服务总线(ESB)的相关文章

认清面向服务架构SOA的真实面目

本文讲的是认清面向服务架构SOA的真实面目,[IT168 资讯]软件业从最初的面向过程.面向对象,到后来的面向组件.面向集成,直到现在的面向服务,走过了一条螺旋上升的曲线.其实,自从上世纪70年代提出"软件危机",诞生软件工程学科以来,为了彻底摆脱软件系统开发泥潭,一直也没有放弃努力. 在经典软件工程理论中,不管是瀑布方法还是原型方法,都是从需求分析做起,一步一步构建起形形色色的软件系统.但是,需求变更像一个挥之不去的阴影,时刻伴随着系统左右.每一个实际应用系统的开发者都饱尝了在系统进

从面向服务架构(SOA)学习:微服务时代应该借鉴的5条经验教训

[编者按]本文作者为 Matt McLarty,通过介绍 SOA 的兴衰变化,总结了微服务应该借鉴的5条经验教训.文章系国内 ITOM 管理平台 OneAPM 编译呈现. SOA 的兴衰变化让我们更了解如何充分利用微服务 正如笔者在上文<微服务架构是敏捷软件架构>中提到的,笔者对微服务架构的第一反应,就是质疑它跟面向服务架构(SOA)有何区别.还有很多人将这两种架构联系在一起.詹姆斯·刘易斯和马丁·福勒在他们的权威博客中包含了一个侧边栏,进行微服务和 SOA 的对比.对此,怀疑派做出的回应是二

面向服务架构(SOA)的原则

架构 分布式计算将网络上分布的软件资源看作是各种服务.面向服务架构是一种不错的解决方案.但这种架构不是什么新思想:CORBA和DCOM就很类似,但是,这些过去的面向服务架构都受到一些难题的困扰:首先,它们是紧密耦合的,这就意味着如分布计算连接的两端都必须遵循同样API的约束.打比方说,如果一个COM对象的代码有了更改,那么访问该对象的代码也必须作出相应更改.其二,这些面向服务架构受到厂商的约束.Microsoft控制DCOM自不必说,CORBA也只是一个伪装的标准化努力,事实上,实现一个CORB

我的WCF之旅(7):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的继承

当今的IT领域,SOA已经成为了一个非常时髦的词,对SOA风靡的程度已经让很多人对SOA,对面向服务产生误解.其中很大一部分人甚至认为面向服务将是面向对象的终结,现在的面向对象将会被面向服务完全代替.在开始本Blog之前,我先来谈谈我对SOA和OO的区别,首先申明,这只是一家之言,欢迎大家批评指正,并且关于SO的谈论不是本Blog的主题,只是主题的引子,在这里只是简单讨论而已 . OO和SO之间具有共同的部分,在运用的领域上存在交集,只有在基于他们交集层面上谈论谁是谁非才有意义,下面是我对SO和

用面向服务架构改进医疗系统表现

医疗领域中的SOA 技术迅速的发展及其在医疗领域中的应用导致医疗组织堆积了许多不能彼此交互的系统.但是,从业务上来说,这些系统不仅需要组织内协同工作,而且还要求能从外部访问.在这种状况下,集成的负担往往落在了那些为完成一项任务而不得不访问多个系统的使用者身上.但是,使用面向服务架构(SOA)可以改善重要信息的交付,而且能在成本.安全和部署风险均可接受的条件下使得数据在整个医疗社区内共享. 管理不断增长的系统集合是当今医疗组织要面临的挑战.创建.集成和维护这些系统的代价越来越大,同时对系统用户的要

《走进SAP(第2版)》——2.6 面向服务架构

2.6 面向服务架构 走进SAP(第2版)网络服务面向服务架构(SOA)是一种封装各种服务或软件模块的系统架构,使用这种架构,业务流程能够灵活地组合与再利用.这些服务所映射的业务流程可以进行组合,然后映射到更复杂的业务流程.这种方法使软件开发更加经济与快捷.每项服务都可以通过互联网作为网络服务(Web service)进行使用.这样用户就不会觉察到应用程序的复杂性.SOA是建立在将网络服务作为模块的基础上的,这种软件开发方式能够整合各种应用程序并且能够共享功能和信息. 可重用性2.6.1 什么

如何才能打造一个高效的面向服务架构?

[编者按]在"著名的推特论战:Microservices vs. Monolithic"一文中,我们曾分享过Netflix.ThougtWorks及Etsy工程师在Microservices上的辩论.在看完整个辩论过程后,或许会有一大部分人认同面向服务这个架构体系.然而事实上,Microservices的执行却并不简单.那么究竟如何才能打造一个高效的面向服务架构?这里我们不妨看向MixRadio首席架构师Steve Robbins的分享. 以下为译文 MixRadio提供了一个免费的音

SOA面向服务架构的概念及应用

什么是SOA SOA(Service-Oriented Architecture),即面向服务的架构.SOA是一种粗粒度.松耦合服务架构,服务之间通过简单.精确定义接口进行通讯,不涉及底层编程接口和通讯模型. SOA可以看作是B/S模型.XML(标准通用标记语言的子集)/Web Service技术之后的自然延伸. 阿里巴巴的Dubbo是SOA的典型实现. 基本特征 SOA的实施具有几个鲜明的基本特征:粗粒度的服务接口分级松散耦合可重用的服务服务接口设计管理标准化的服务接口支持各种消息模式精确定义

我的WCF之旅(5):面向服务架构(SOA)和面向对象编程(OOP)的结合

对于.NET重载(Overloading)--定义不同参数列表的同名方法(顺便提一下,我们但可以在参数列表上重载方法,我们甚至可以在返回类型层面来重载我们需要的方法--页就是说,我们可以定义两个具有相同参数列表但不同返回值类型的两个同名的方法.不过这种广义的Overloading不被我们主流的.NET 语言所支持的--C#, VB.NET, 但是对于IL来说,这这种基于返回值类型的Overloading是支持的).相信大家听得耳朵都要起老茧了.我想大家也清楚在编写传统的XML Web Servi