soa是什么

SOA在过去2008年里可以说是大行其道,无数软件厂商、咨询公司和企业的热捧,使其近乎成为了软件业2008年最火的关键词,在盘点2008年的热门关键词之时,我们不妨来回顾下SOA,SOA的英文全称为service oriented architecture,面向服务的体系架构是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。
+ Q& R7 |8 S4 c1 W0 S; O$ I  w从SOA的概念中,不难发现三点:第一,SOA不是一个可以拿来就使用的技术,而是一种架构和组织IT基础结构及业务功能的方法;第二,基于SOA架构的软件系统相对于传统架构更加柔性,更加能够适合企业依据业务情况对软件系统进行快速调整和重新部署;第三,SOA的出现可以使得企业在解决多系统集成方面获得新的思路和方案。6 X( X1 H9 {. u
另外,从这个定义中还可以发现一点就是,对于企业级的应用来说,SOA可以为企业对于业务应用和管理带来一个新的理念:“服务组件化管理”。这与软件组件化概念一致。一个“相对独立,完整的”服务可以方便的被以各种方式组合成为一个大型的服务。
( O9 X3 ~2 D7 K! E9 Y5 B这一点听起来确实很美,但确是如此吗?企业级的IT应用现阶段分为两大类,一类是技术系统应用,一类是业务管理系统应用。其中对企业来说应用最为复杂也最具价值的则非业务管理系统莫属了。然而就以ERP在企业中应用现状看,SOA,距离我们到底有多远?
. w! P) s2 x; [0 T8 v0 @首先,ERP在目前企业中应用可以说并不成熟,多数企业还处于信息孤岛状态,没有掌握ERP的核心理念。特别是当企业处于成长期时,企业组织架构、业务流程与职责权限于是,经常会发生由于企业组织架构的调整导致信息系统无法为企业提供足够的支撑,而大多数企业在这个时候,都会期望能够找到一个快捷的方法解决这样的问题。事实上,很多企业在企业发生变革之后,对于信息系统的调整都处于随心而动的状态,也就是说不假思索的要求信息系统在很短的时间内完成调整和重新部署。我们知道当企业变革时,最先反映的是组织架构的调整。其实,组织架构的调整,对企业的影响通常只存在一个方面,那就是部门职责的变动,而部门职责的变动更多的是表现在权限的变动,权限的调整相信对任何软件系统都是一个非常简单的事情。另外,权限变动还会带来报表的问题,目前中国企业特别是国有企业的报表有一个非常显著的特点就是无定性,报表格式无定性,报表数据无定性,可以说是“年年变,月月变,日日变”,与其花更多的钱去选一个所谓的先进架构的软件,还不如去买一个灵活一点的报表工具更实际。  d* q/ `, I7 x) t* R
如果说,企业变革导致业务流程发生变化,那么相信即使你应用了SOA架构也不能很方便快捷的对系统进行调整。业务流程变化可以简单的归为两类,一类是流程增加,也就是流程变长,这种情况下,可能会导致软件功能的增加,也可能会涉及客户化开发,系统的调整就会变得复杂。而另外一种情况,流程缩短。流程的缩短通常会表现为流程环节的减少,对于这种情况,只要是基于组件技术的系统都能够简单应对,那么SOA架构的软件属于奢侈品。6 k; k2 F( Z- c# U: ^6 F
其次,我们有必要来一起分析一下,企业IT应用服务都包括哪些方面。一般情况下,企业IT应用服务会更多的表现在两个方面,一是IT系统本身的应用,包括IT系统选型,IT系统实施以及IT系统的维护,另一方面企业内部的IT管理,例如IT治理方面。很显然SOA在IT管理方面起到的作用微乎其微,更多的是为企业IT管理提供一个新的思路。
* L7 N) Z$ _) I5 |3 u# k. [; g: M另一方面,SOA又确实能够发挥作用。例如,很多企业都提出了设计软件与ERP系统进行集成。但是又没有多少企业能够真正实现这样的集成,但是在应用SOA架构之后,在一定程度上就会显得更好解决一点。因为基于SOA架构的系统就如同大家都处于一个平台,执行同样的开发标准,两个系统之间的接口相对标准化。说的简单点,SOA就好象一个拥有标准接口的电脑主板,企业的各个应用系统就如同内存、CPU等等,集成的过程,就如同往这个主板上插上各种插件,以此实现了数据全面集成,当然这里还要考虑的是集成的成本与集成后的效率。( ]( ^: s. }1 T
第三,SOA并不是新生事物,事实上大型IT组织成功构建和部署SOA应用已有多年的历史,而这个历史要比现有的XML和Web服务要长很多,IBM CICS和BEA TUXEDO就是过去被用于构建SOA应用的两种技术范例。同时,SOA也并不是一种现成的技术,而是一种架构和组织IT基础结构及业务功能的方法。无论是IBM还是BEA,特别是BEA是以中间件见长,而通过中间件将各系统进行集成无疑是一个相对有效的方法。所以,SOA更多的将会被中间件厂商所采用,而对于大型管理信息系统公司来讲,更多的是应用SOA理念和原则,设计更为开放和标准的接口,以使得自己的信息系统更好适应未来集成的需要。# a& s. r4 L1 C5 k: S3 q
第四,SOA应用实际上还要求企业自身具备良好的流程管理体系。要进行流程管理,首先必须要求企业的业务流程是成体系的;第二,要求企业的流程是清晰可快速识别的;第三,企业流程必须要完整的资料记录,包括流程描述,流程图以及流程变更记录。同时,要想在流程变更时能够快速对系统进行修改,还要求企业的业务流程能够同系统流程相互关联,能够实现良好的互动。
9 j& R; ?$ J" u因此,SOA对于企业的应用绝不是探囊取物般简单,而是需要企业内外部的各方面资源以及与软件厂商、甚至是咨询公司充分配合才能发挥其作用,这样的成本能否被企业所接受,将是企业所必须考虑的问题,否则一次失败的SOA应用后果将远远大于一个局部信息系统应用失败所带来的后果。

面向服务架构SOA(Service-Oriented Architecture)是一种架构模型和一套设计方法学,其目的是最大限度地重用应用程序中立型的服务以提高IT适应性和效率。它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用。服务层是SOA的基础,可以直接被应用调用,从而有效控制系统中与软件代理交互的人为依赖性。SOA的关键是“服务”的概念,W3C将服务定义为:“服务提供者完成一组工作,为服务使用者交付所需的最终结果。最终结果通常会使使用者的状态发生变化,但也可能使提供者的状态改变,或者双方都产生变化”。

 

在最近的软件发展中,面向服务架构(SOA, service-oriented architecture)成为了时下的热门话题。这篇文章将向大家介绍SOA, 讨论企业为什么需要SOA,什么是SOA, 从核心,平台,服务品质3个层面来解释SOA的基础构成。
By Raghu R. Kodali
对于面向同步和异步应用的,基于请求/响应模式的分布式计算来说,SOA是一场革命。一个应用程序的业务逻辑(business logic)或某些单独的功能被模块化并作为服务呈现给消费者或客户端。这些服务的关键是他们的松耦合特性。例如,服务的接口和实现相独立。应用开发人员或者系统集成者可以通过组合一个或多个服务来构建应用,而无须理解服务的底层实现。举例来说,一个服务可以用.NET或J2EE来实现,而使用该服务的应用程序可以在不同的平台之上,使用的语言也可以不同。
SOA有以下特性
        SOA服务具有平台独立的自我描述XML文档。Web服务描述语言(WSDL, Web Services Description Language)是用于描述服务的标准语言。
        SOA 服务用消息进行通信,该消息通常使用XML Schema来定义(也叫做XSD, XML Schema Definition)。消费者和提供者或消费者和服务之间的通信多见于不知道提供者的环境中。服务间的通讯也可以看作企业内部处理的关键商业文档。
        在一个企业内部,SOA服务通过一个扮演目录列表(directory listing)角色的登记处(Registry)来进行维护。应用程序在登记处(Registry)寻找并调用某项服务。统一描述,定义和集成(UDDI, Universal Description, Definition, and Integration)是服务登记的标准。
        每项SOA服务都有一个与之相关的服务品质(QoS, quality of service)。QoS的一些关键元素有安全需求(例如认证和授权),可靠通信(译注:可靠消息是指,确保消息“仅且仅仅”发送一次,从而过滤重复信息。),以及谁能调用服务的策略。
为什么选择SOA?
不同种类的操作系统,应用软件,系统软件和应用基础结构(application infrastructure)相互交织,这便是IT企业的现状。一些现存的应用程序被用来处理当前的业务流程(business processes),因此从头建立一个新的基础环境是不可能的。企业应该能对业务的变化做出快速的反应,利用对现有的应用程序和应用基础结构(application infrastructure)的投资来解决新的业务需求,为客户,商业伙伴以及供应商提供新的互动渠道,并呈现一个可以支持有机业务(organic business)的构架。SOA凭借其松耦合的特性,使得企业可以按照模块化的方式来添加新服务或更新现有服务,以解决新的业务需要,提供选择从而可以通过不同的渠道提供服务,并可以把企业现有的或已有的应用作为服务, 从而保护了现有的IT基础建设投资。
如图1的例子所示,一个使用SOA的企业,可以使用一组现有的应用来创建一个供应链复合应用(supply chain composite application),这些现有的应用通过标准接口来提供功能。

Figure 1. Supply chain application. Click on thumbnail to view full-sized image.        
服务架构
为了实现SOA,企业需要一个服务架构,图2显示了一个例子:

Figure 2. A sample service architecture. Click on thumbnail to view full-sized image.       
在图2中, 服务消费者(service consumer)可以通过发送消息来调用服务。这些消息由一个服务总线(service bus)转换后发送给适当的服务实现。这种服务架构可以提供一个业务规则引擎(business rules engine),该引擎容许业务规则被合并在一个服务里或多个服务里。这种架构也提供了一个服务管理基础(service management infrastructure),用来管理服务,类似审核,列表(billing),日志等功能。此外,该架构给企业提供了灵活的业务流程,更好地处理控制请求(regulatory requirement),例如Sarbanes Oxley(SOX),并且可以在不影响其他服务的情况下更改某项服务。
SOA基础结构
要运行,管理SOA应用程序,企业需要SOA基础,这是SOA平台的一个部分。SOA基础必须支持所有的相关标准,和需要的运行时容器。图3所示的是一个典型的SOA基础结构。接下来的章节将逐一讨论该结构的每个部分。

Figure 3. A typical SOA infrastructure. Click on thumbnail to view full-sized image.        
SOAP, WSDL, UDDI
WSDL,UDDI和SOAP是SOA基础的基础部件。WSDL用来描述服务;UDDI用来注册和查找服务;而SOAP,作为传输层,用来在消费者和服务提供者之间传送消息。SOAP是Web服务的默认机制,其他的技术为可以服务实现其他类型的绑定。一个消费者可以在UDDI注册表(registry)查找服务,取得服务的WSDL描述,然后通过SOAP来调用服务。
WS-I Basic Profile
WS-I Basic Profile,由Web服务互用性组织(Web Services Interoperability Organization)提供,是SOA服务测试与互用性所需要的核心构件。服务提供者可以使用Basic Profile测试程序来测试服务在不同平台和技术上的互用性。
J2EE 和 .Net
尽管J2EE和.NET平台是开发SOA应用程序常用的平台,但SOA不仅限于此。像J2EE这类平台,不仅为开发者自然而然地参与到SOA中来提供了一个平台,还通过他们内在的特性,将可扩展性,可靠性,可用性以及性能引入了SOA世界。新的规范,例如 JAXB(Java API for XML Binding),用于将XML文档定位到Java类;JAXR(Java API for XML Registry)用来规范对UDDI注册表(registry)的操作;XML-RPC(Java API for XML-based Remote Procedure Call)在J2EE1.4中用来调用远程服务,这使得开发和部署可移植于标准J2EE容器的Web服务变得容易,与此同时,实现了跨平台(如.NET)的服务互用。
服务品质
在企业中,关键任务系统(mission-critical system,译注:关键任务系统是指如果一个系统的可靠性对于一个组织是至关重要的,那么该系统就是该企业的关键任务系统。比如,电话系统对于一个电话促销企业来说就是关键任务系统,而文字处理系统就不那么关键了。)用来解决高级需求,例如安全性,可靠性,事物。当一个企业开始采用服务架构作为工具来进行开发和部署应用的时候,基本的Web服务规范,像WSDL,SOAP,以及UDDI就不能满足这些高级需求。正如前面所提到的,这些需求也称作服务品质(QoS,quality of services)。与QoS相关的众多规范已经由一些标准化组织(standards bodies)提出,像W3C(World Wide Web Consortium)和OASIS(the Organization for the Advancement of Structured Information Standards)。下面的部分将会讨论一些QoS服务和相关标准。
安全
Web服务安全规范用来保证消息的安全性。该规范主要包括认证交换, 消息完整性和消息保密。该规范吸引人的地方在于它借助现有的安全标准,例如,SAML(as Security Assertion Markup Language)来实现web服务消息的安全。OASIS正致力于Web服务安全规范的制定。
可靠
在典型的SOA 环境中,服务消费者和服务提供者之间会有几种不同的文档在进行交换。具有诸如“仅且仅仅传送一次”( once-and-only-once delivery),“最多传送一次”( at-most-once delivery),“重复消息过滤”(duplicate message elimination),“保证消息传送”(guaranteed message delivery)等特性消息的发送和确认,在关键任务系统(mission-critical systems)中变得十分重要。WS-Reliability 和 WS-ReliableMessaging是两个用来解决此类问题的标准。这些标准现在都由OASIS负责。
策略
服务提供者有时候会要求服务消费者与某种策略通信。比如,服务提供商可能会要求消费者提供Kerberos安全标示,才能取得某项服务。这些要求被定义为策略断言(policy assertions)。一项策略可能会包含多个断言。WS-Policy用来标准化服务消费者和服务提供者之间的策略通信。
控制
当企业着手于服务架构时,服务可以用来整合数据仓库(silos of data),应用程序,以及组件。整合应用意味着例如异步通信,并行处理,数据转换,以及校正等进程请求必须被标准化。在SOA中,进程是使用一组离散的服务创建的。BPEL4WS 或者 WSBPEL(Web Service Business Process Execution Language)是用来控制这些服务的语言。WSBPEL目前也由OASIS负责。
管理
随着企业服务的增长,所使用的服务和业务进程的数量也随之增加,一个用来让系统管理员管理所有运行在多相环境下的服务的管理系统就显得尤为重要。WSDM(Web Services for Distributed Management)规定了任何根据WSDM实现的服务都可以由一个WSDM适应(WSDM-compliant)的管理方案来管理。
其它的qos特性,比如合作方之間的溝通和通訊,多個服務之間的事務處理,都在WS-Coordination 和 WS-Transaction 標準中描述, 這些都是OASIS 的工作.
SOA 不是Web服务
在理解SOA和Web服务的关系上,经常发生混淆。根据2003年4月的Gartner报道,Yefim V. Natis就这个问题是这样解释的:“Web服务是技术规范,而SOA是设计原则。特别是Web服务中的WSDL,是一个SOA配套的接口定义标准:这是Web服务和SOA的根本联系。”从本质上来说,SOA是一种架构模式,而Web服务是利用一组标准实现的服务。Web服务是实现SOA的方式之一。用Web服务来实现SOA的好处是你可以实现一个中立平台,来获得服务,而且随着越来越多的软件商支持越来越多的Web服务规范,你会取得更好的通用性。
SOA的优势
SOA的概念并非什么新东西,SOA不同于现有的分布式技术之处在于大多数软件商接受它并有可以实现SOA的平台或应用程序。SOA伴随着无处不在的标准,为企业的现有资产或投资带来了更好的重用性。SOA能够在最新的和现有的应用之上创建应用;SOA能够使客户或服务消费者免予服务实现的改变所带来的影响;SOA能够升级单个服务或服务消费者而无需重写整个应用,也无需保留已经不再适用于新需求的现有系统。总而言之,SOA以借助现有的应用来组合产生新服务的敏捷方式,提供给企业更好的灵活性来构建应用程序和业务流程。
About the author
Raghu R. Kodali is consulting product manager and SOA evangelist for Oracle Application Server. Kodali leads next-generation SOA initiatives and J2EE feature sets for Oracle Application Server, with particular expertise in EJB, J2EE deployment, Web services, and BPEL. Prior to product management, Kodali held presales and technical marketing positions in Oracle Asia-Pacific, based in Singapore. Prior to Oracle, he worked as software developer with National Computer Systems, Singapore. He holds a master's degree in computer science and is a frequent speaker at technology conferences. Kodali maintains an active blog at Loosely Coupled Corner


About this entry