SOA是什么

曾今SOA的概念犹如今日“云计算、大数据”一样,被炒得火热,不少企业便纷纷响应,并宣称会拥抱和实施SOA。而事实上,业界出现了两种极端:一种是由于各类文章和书籍关于SOA的描述往往太过抽象,再加上各大厂商的呼吁,使得SOA往往显得“高大上”,令不少企业和架构师们望而却步。第二种恰好相反,有部分人却认为SOA无非是“新瓶装旧酒”。

 

个人理解,SOA在宏观上确实太复杂,因为它涉及到的不仅仅是技术和架构本身。而从技术的视角来看,并非难以落地。

 

SOA全称“面向服务架构”,它提供的是一种架构风格和理念,而并非是一种技术或者产品。并不是说项目中用了WebService、WCF、Hessian、RMI之类的就是SOA了。

通俗点来讲,SOA提倡将不同应用程序的业务功能封装成“服务”并宿主起来,通常以接口和契约的形式暴露并提供给外界应用访问(通过交换消息),达到不同系统可重用的目的。

流行的WebService等可以看作是实现SOA基础设施的技术方法。当然,实践SOA不仅需要解决服务调用的问题,还包括服务编排、服务治理、服务路由、服务监控等一系列的问题。在大型分布式系统中,SOA被广泛实践,但是在不同的应用场景中,设计方法也大不相同。

 

SOA是一个组件模型,它能将不同的服务通过定义良好的接口和契约联系起来。服务是SOA的基石,在开始服务设计和SOA实践之前,有必要先了解服务的概念以及服务的常见特性。

 

 

何为服务

服务的概念非常宽泛,在宏观上,服务的理解是“为他人做事,满足他人需要,而且通常是不以实物形式提供劳动的…”。在SOA系统中,服务指的是应用程序的功能单元,它通常体现了业务功能。服务是一种抽象,它向服务使用者隐藏了服务内部的实现细节。根据服务设计的基本原则,服务可能会具有以下特性:

l  自治(理)性 

服务应该是独立部署和运行存在的,且边界清晰,应尽量减少对外部的引用和依赖。

l  粗粒度

服务调用是需要开销的,这也是实现松耦合的分布式系统必须付出的代价。因此,应尽量通过一次服务调用传输所有需要的数据,而不是分多次去调用服务和组装数据。

l  可见性

服务是对外提供的,必须在某公共的地方可搜寻和发现,且服务要有必要的描述。

l  无状态

服务不应该依赖于其他服务的上下文、会话等,尽量减少不必要的状态管理流程所带来的资源消耗。但是,对于业务流程服务而言,状态数据是不可避免的。

l  幂等性

当消费者调用服务后,服务调用可能会有“成功、失败、超时”这三种状态,当服务并没有最终响应完成时,消费者可以尝试反复地调用服务,这样仍不会影响到最终结果。

l  可重用性

服务应该是可以被重用的,相同功能应可以调用相同的服务,这也是软件设计的原则。

l  可组合

服务是可以被当作成一个步骤的,服务也可以调用其它的服务。这样能够灵活的组合。

 

有关服务的“粗粒度、无状态、幂等性”等特性,一直是饱受争议的话题,可谓见仁见智。这里有必要说明下,这些特性并不是服务不可或缺的,应当在实践中根据需求来取舍。

SOA所面临的问题

SOA架构将公共的业务拆分出来,形成可共用的服务,最大程度的保障了代码和逻辑的复用,避免了系统的重复建设,并且让应用程序的部署找到了一种持续可扩展的方案,给应用抗负载能力带来了质的飞跃。

SOA架构所面临的一大问题就是如何解决集成服务应用普遍存在的一致性问题,举例来说,同时调用多个服务,当其中一个服务调用失败时,其他服务已经处理执行的结果该如何进行回滚,这在单机本地调用的情况下使用事务比较好处理,而分布式环境下的事务将问题复杂化,并且性能开销难以承受,因此,只有在极端情况下才会考虑强一致性,一般情况下更多的关注最终一致性。另外一个就是安全问题,面向企业的平台级的SOA架构,需要对参数传递、响应内容以及各种用户私有信息的交互,有着更严格的且特殊的安全需求,如何构建一个安全的SOA架构体系,也给技术人员带来了很大的挑战。

在讲了很多“大而空”的理论之后,估计很多人要拍砖了。后面文章中将会讲一些干货,更贴合实际应用。先预告一下后面文章:

1.SOA之基于服务总线的设计

(从设计的角度讲述服务总线--比较适合企业级系统集成的设计方式)

2.大型分布式网站的演变历程

(随着网站快速发展,解决业务复杂化、大流量、稳定性等问题的必经之路。正所谓“天下大势,分久必合,合久必分”。

重点不是讲负载均衡这些手段,而是设计层面的“集中式”到“分布式”)

3.SOA架构体系之通信协议和远程调用(RPC)

(讲解具体的实现技术,对比各自优缺点)

4.SOA之基于服务框架的应用

(服务化实践--介绍流行的服务框架,重点演示一种服务框架的使用)

时间: 2024-09-16 12:43:04

SOA是什么的相关文章

SOA、ESB、NServiceBus、云计算 总结

SOA SOA 是通过功能组件化.服务化,来实现系统集成.解决信息孤岛,这是其主要目标.而更进一步则是实现更快响应业务的变化.更快推出新的应用系统.与此同时,SOA 还实现了整合资源,资源复用. SOA 服务的设计标准是粗粒度.高重用.灵活.标准.性能则并非首要考虑因素. SOA 的两大功能是集成.服务编排(BPEL.BPM).WF 在 SOA 架构中,实现服务编排的功能. 参考架构: 相关资源: SOA 的基本概念及设计原则浅议 SOA 有哪些基本原则 SOA 设计十大原则 SOA 服务设计原

简单SOA框架实现

14.4. Service-oriented architecture (SOA) SOA 与 REST很多相同之处,目前SOA主要是基于SOAP实现,也有基于MQ的实现.而REST只限于HTTP POST/GET/PUT/DELETE等等. 我个人比较喜欢机遇TCP的SOA实现,不喜欢SOAP大量XML传输. 14.4.1. SOAP实现 这里提供一个简单的机遇SOAP实现的SOA框架 index.php入口文件 <?php define ('CONFIG_DIR', '../config/'

企业 SOA 设计(1)–ESB 设计

最近为公司完成了一个 ESB 的设计.下面简要说明一下具体的设计方案.   企业 SOA 整体方案 在前一篇<SOA.ESB.NServiceBus.云计算 总结>中说到,SOA 是面向服务的架构,其核心思想是把业务进行组件化,而业务组件的能力服务化. 我们的整个 SOA 的设计分为两个层面:一个是系统间的 SOA 设计,另一个则是单个系统内的 SOA 设计.系统间的 SOA 设计,主要是设计一个 ESB 系统来实现各业务系统间的交互.而系统内部的 SOA 设计,则是建立一个组件化的技术平台,

用Ajax为SOA增光添彩

ajax 对于那些已看到了动态的.被Ajax渲染过的Web页面的人来说,你算是什么都没看过. 2006年,一波Ajax(Asynchronous JavaScript and XML的简称)产品浪潮将出现在市场上,使IT企业可以选择用工具来构建与桌面功能类似的WebServices前端.随着它的出现,构建这些工具的公司也会构建面向服务架构工具集,把应用层Web技术与表示层Web技术联系到一起. ClearNova公司负责战略的副总裁Steve Benfield说:"Ajax是未来构建Web应用的

XML和SOA安全问题仍然炙手可热

xml|安全|问题     随着Web服务从原始模型到产品的发展,XML的安全问题和加速问题已经提高到主要位置上来了.尽管重量级公司IBM和Cisco系统公司都通过涉入XML设备领域的方式来利用目前的这种需要--IBM最近挖出了DataPower技术公司--但是,Forum系统公司打赌说:这一周他们将把Forum Vantage XML加速器投放市场,并且随着这一举动他们将赢得更多机会. "比起传统的二进制通信协议,XML甚至可以消耗高达50倍的带宽.它有可能导致交互应用性能的下降.仅仅只处理X

XML和SOA 安全问题仍然炙手可热

xml|安全|问题     随着Web服务从原始模型到产品的发展,XML的安全问题和加速问题已经提高到主要位置上来了.尽管重量级公司IBM和Cisco系统公司都通过涉入XML设备领域的方式来利用目前的这种需要--IBM最近挖出了DataPower技术公司--但是,Forum系统公司打赌说:这一周他们将把Forum Vantage XML加速器投放市场,并且随着这一举动他们将赢得更多机会. "比起传统的二进制通信协议,XML甚至可以消耗高达50倍的带宽.它有可能导致交互应用性能的下降.仅仅只处理X

基础教程介绍——什么是SOA?

基础教程 对于面向同步和异步应用的,基于请求/响应模式的分布式计算来说,SOA是一场革命.一个应用程序的业务逻辑(business logic)或某些单独的功能被模块化并作为服务呈现给消费者或客户端.这些服务的关键是他们的松耦合特性.例如,服务的接口和实现相独立.应用开发人员或者系统集成者可以通过组合一个或多个服务来构建应用,而无须理解服务的底层实现.举例来说,一个服务可以用.NET或J2EE来实现,而使用该服务的应用程序可以在不同的平台之上,使用的语言也可以不同. SOA有以下特性 SOA服务

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

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

.NET vs J2EE——面对SOA的荒谬与误解

·.Net与J2EE在金融行业愈来愈呈势均力敌之势,二者均宣称提供了不同于对方的.听起来很迷人的个性化应用服务. ·理性的IT执行官们已经深刻的认识到这样的一个事实:无论是.Net还是J2EE,将来必将在SOA理念的应用中占有各自的一席之地. ·Microsoft的.Net技术在今天的金融市场面前,显得商机无限. ·从前,荒诞与误解依然在.Net与J2EE平台之间萦绕着:似乎没有一个IT决策者能够看透了这层迷雾,继而在两个平台之间做出理性的决择. ·今天,技术执行官们已经能够很好的把握需求动机,

What is SOA?----------对SOA的思考,以及由此想到的人类社会的发展

    SOA short for Service Oriented Architecture,其实是以Service(服务)为最小粒度的网络上的一组具有松散关系的服务的集合(a collection of Services)--------他们之间能够互相交流.    服务,作为其最基本单位,免除了其他人去关注于服务的实现,在这个层面上讲,就比OO要高------OO仅仅达到方法级的不关心,服务则是把一些列相关的方法和对象串联起来,组成服务.      可以这样打个比方,你要向北京的某个人发送