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

本文讲的是认清面向服务架构SOA的真实面目,【IT168 资讯】软件业从最初的面向过程、面向对象,到后来的面向组件、面向集成,直到现在的面向服务,走过了一条螺旋上升的曲线。其实,自从上世纪70年代提出“软件危机”,诞生软件工程学科以来,为了彻底摆脱软件系统开发泥潭,一直也没有放弃努力。
  在经典软件工程理论中,不管是瀑布方法还是原型方法,都是从需求分析做起,一步一步构建起形形色色的软件系统。但是,需求变更像一个挥之不去的阴影,时刻伴随着系统左右。每一个实际应用系统的开发者都饱尝了在系统进入开发阶段、测试阶段,甚至上线阶段遭遇应接不暇的需求变更的极端痛苦。客户将变更的需求视为bug(错误)是测试上线阶段的主要问题。
  如何解决这一问题?能否来一场软件开发和架构的革命?SOA架构的提出,就是被人看成这样的一场革命。其实质就是要将系统模型与系统实现分割开来。
  1.定义
  SOA并不是一个新概念,有人就将CORBA和DCOM等组件模型看成SOA架构的前身。早在1996年,GartnerGroup就已经提出了SOA的预言,不过那个时候仅仅是一个“预言”,当时的软件发展水平和信息化程度还不足以支撑这样的概念走进实质性应用阶段。到了近一两年,SOA的技术实现手段渐渐成熟了。在BEA、IBM等软件巨头的极力推动下,才得以慢慢风行起来。Gartner为SOA描述的愿景目标是实现实时企业(Real-TimeEnterprise)。
  关于SOA,目前尚未有一个统一的、业界广泛接受的定义。一般认为:SOA,面向服务的架构是一个组件模型,它将应用程序的不同功能单元服务(service),通过服务间定义良好的接口和契约(contract)联系起来。接口采用中立的方式定义,独立于具体实现服务的硬件平台、操作系统和编程语言,使得构建在这样的系统中的服务可以使用统一和标准的方式进行通信。这种具有中立的接口定义(没有强制绑定到特定的实现上)的特征称为服务之间的松耦合。
  从这个定义中,我们看到下面两点:
  软件系统架构:SOA不是一种语言,也不是一种具体的技术,更不是一种产品,而是一种软件系统架构,它尝试给出在特定环境下推荐采用的一种架构,从这个角度上来说,它其实更像一种架构模式(Pattern),是一种理念架构,是人们面向应用服务的解决方案框架。
  服务(service)是整个SOA实现的核心。SOA架构的基本元素是服务,SOA指定一组实体(服务提供者、服务消费者、服务注册表、服务条款、服务代理和服务契约),这些实体详细说明了如何提供和消费服务。遵循SOA观点的系统必须要有服务,这些服务是可互操作的、独立的、模块化的、位置明确的、松耦合的并且可以通过网络查找其地址。
  2.SOA三种角色的关系
  服务是一个自包含的、无状态(stateless)的实体,可以由多个组件组成。它通过事先定义的界面响应服务请求。它也可以执行诸如编辑和处理事务(transaction)等离散性任务。服务本身并不依赖于其他函数和过程的状态。用什么技术实现服务,并不在其定义中加以限制。
  服务提供者(service provider)提供符合契约(contract)的服务,并将它们发布到服务代理。
  服务请求者(serviceconsumer)也叫服务使用者,它发现并调用其他的软件服务来提供商业解决方案。从概念上来说,SOA本质上是将网络、传输协议和安全细节留给特定的实现来处理。服务请求者通常称为客户端,但是,也可以是终端用户应用程序或别的服务。
  服务代理者(service broker)作为储存库、电话黄页或票据交换所,产生由服务提供者发布的软件接口。
  这三种 SOA 参与者:服务提供者、服务代理者以及服务请求者通过3个基本操作:发布(publish)、查找(find)、绑定(bind)相互作用。服务提供者向服务代理者发布服务。服务请求者通过服务代理者查找所需的服务,并绑定到这些服务上。服务提供者和服务请求者之间可以交互。
  所谓服务的无状态,是指服务不依赖于任何事先设定的条件,是状态无关的(state-free)。在SOA架构中,一个服务不会依赖于其他服务的状态。它们从客户端接受服务请求。因为服务是无状态的,它们可以被编排(orchestrated)和序列化(sequenced)成多个序列(有时还采用流水线机制),以执行商业逻辑。编排指的是序列化服务并提供数据处理逻辑。但不包括数据的展现功能。
  3.SOA特征
  基于上面讨论,我们给出SOA的下面一些特征:
  服务的封装(encapsulation)。将服务封装成用于业务流程的可重用组件的应用程序函数。它提供信息或简化业务数据从一个有效的、一致的状态向另一个状态的转变。封装隐藏了复杂性。服务的API保持不变,使得用户远离具体实施上的变更。
  服务的重用(reuse)。服务的可重用性设计显着地降低了成本。为了实现可重用性,服务只工作在特定处理过程的上下文(context)中,独立于底层实现和客户需求的变更。
  服务的互操作(interoperability)。互操作并不是一个新概念。在CORBA、DCOM、webservice中就已经采用互操作技术了。在SOA中,通过服务之间既定的通信协议进行互操作。主要有同步和异步两种通信机制。SOA提供服务的互操作特性更利于其在多个场合被重用。
  服务是自治的(Autonomous)功能实体。服务是由组件组成的组合模块,是自包含和模块化的。
  SOA非常强调架构中提供服务的功能实体的完全独立自主的能力。传统的组件技术,如。NETRemoting,EJB,COM或者CORBA,都需要有一个宿主(Host或者Server)来存放和管理这些功能实体;当这些宿主运行结束时这些组件的寿命也随之结束。这样当宿主本身或者其它功能部分出现问题的时候,在该宿主上运行的其它应用服务就会受到影响。
  SOA架构中非常强调实体自我管理和恢复能力。常见的用来进行自我恢复的技术,比如事务处理(Transaction),消息队列(MessageQueue),冗余部署(RedundantDeployment)和集群系统(Cluster)在SOA中都起到至关重要的作用。
  服务之间的松耦合度(LooslyCoupled)。服务请求者到服务提供者的绑定与服务之间应该是松耦合的。这就意味着,服务请求者不知道提供者实现的技术细节,比如程序设计语言、部署平台,等等。服务请求者往往通过消息调用操作,请求消息和响应,而不是通过使用API和文件格式。
  这个松耦合使会话一端的软件可以在不影响另一端的情况下发生改变,前提是消息模式保持不变。在一个极端的情况下,服务提供者可以将以前基于遗留代码(例如,COBOL)的实现完全用基于Java语言的新代码取代,同时又不对服务请求者造成任何影响。这种情况是真实的,只要新代码支持相同的通信协议。
  服务是位置透明的(locationtransparency)。服务是针对业务需求设计的。需要反应需求的变化,即所谓敏捷(agility)设计。要想真正实现业务与服务的分离。就必须使得服务的设计和部署对用户来说是完全透明的。也就是说,用户完全不必知道响应自己需求的服务的位置,甚至不必知道具体是哪个服务参与了响应。
  4.三个抽象级
  从概念上讲,SOA 中有三个主要的抽象级别:
  操作:代表单个逻辑工作单元(LUW)的事务。执行操作通常会导致读、写或修改一个或多个持久性数据。SOA操作可以直接与面向对象(OO)的方法相比。它们都有特定的结构化接口,并且返回结构化的响应。完全同方法一样,特定操作的执行可能涉及调用附加的操作。
  服务:代表操作的逻辑分组。服务可以分层,以降低耦合度和复杂性。一个服务的粒度(granularity)大小也与系统的性能息息相关。粒度太小,会增加服务间互操作通讯的开销;粒度太大,又会影响服务面对需求变化的敏捷性。
  业务流程:为实现特定业务目标而执行的一组长期运行的动作或活动。业务流程通常包括多个业务调用。
  在SOA中,业务流程包括依据一组业务规则按照有序序列执行的一系列操作。操作的排序、选择和执行称为服务或流程编排。典型的情况是调用已编排服务来响应业务事件。从建模的观点来看,由此带来的挑战是如何描述设计良好的操作、服务和流程抽象的特征以及如何系统地构造它们。这些涉及服务建模、特征抽取的问题已经成为现阶段人们关注的焦点。

时间: 2024-09-14 11:50:15

认清面向服务架构SOA的真实面目的相关文章

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

学习和研究在企业中实施面向服务架构(SOA),简单回顾SOA和ESB,重点关注微软在SOA领域的相关指导和.NET社区的相关开源的解决方案,和大家一起来探讨如何在企业里实现SOA,期望有实施SOA经验的同学发表意见. 一.SOA的历史      1996年,Gartner最早提出SOA.2002年12月,Gartner提出SOA是"现代应用开发领域最重要的课题",SOA并不是一个新事物,IT组织已经成功建立并实施SOA应用软件很多年了,BEA.IBM.等厂商看到了它的价值,纷纷跟进.S

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

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

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

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

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

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

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

医疗领域中的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