soa通讯
A. SOA是什么
SOA是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来。
接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。
SOA是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯模型。SOA可以看作是B/S模型、XML(标准通用标记语言的子集)/Web Service技术之后的自然延伸。
SOA将能够帮助软件工程师们站在一个新的高度理解企业级架构中的各种组件的开发、部署形式,它将帮助企业系统架构者以更迅速、更可靠、更具重用性架构整个业务系统。较之以往,以SOA架构的系统能够更加从容地面对业务的急剧变化。
(1)soa通讯扩展阅读:
SOA的主要优势:
1、SOA可通过互联网服务器发布,从而突破企业内网的限制,实现与供应链上下游伙伴业务的紧密结合。通过SOA架构,企业可以与其业务伙伴直接建立新渠道,建立新伙伴的成本得以降低。
2、SOA与平台无关,减少了业务应用实现的限制。要将企业的业务伙伴整合到企业的“大”业务系统中,对其业务伙伴具体采用什么技术没有限制。
3、SOA具有低耦合性特点,业务伙伴对整个业务系统的影响较低。在企业与各业务伙伴关系不断发生变化的情况下,节省的费用会越来越多。
4、SOA具有可按模块分阶段进行实施的优势。可以成功一步再做下一步,将实施对企业的冲击减少到最小。
B. 什么是SOA,谈谈你的SOA的理解。service orientied architecture 如何实现线程间的通讯。
Web服务(Web Services)在很多人眼里还是个十分神秘的概念,究其根源,我想主要是由于Web服务被宣传得很多,但实际应用却鲜见,给人一种很复杂和难以理解的感觉。另外,Web服务是基于XML的,不少人对XML本身也缺乏理解,虽然他们可能每天都在写XML格式的配置文件。
提到Web服务的起源就一定要先说一说SOA(面向服务的体系结构),和很多具有划时代意义的软件技术一样,SOA的出现根本上也是为了解决软件危机问题。做过项目的人都有过这种感受,随着项目推进,模块之间关系越来越紧密,任何一个小的修改都可能引起整个系统的不稳定,而客户需求偏偏总是在改变,结果是项目以差不多失败的结果告终。
从(分布式)软件发展的趋势来看,C/S->B/S->SOA,模块之间的耦合度是由紧密到松散的,松散的耦合有利于修改。我们常说的各种设计模式,其中大部分不也是为了降低类之间的耦合度吗。
这里我引用一下IBM网站上对SOA的定义:面向服务的体系结构(service-oriented architecture)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。(全文)
说得通俗一点就是,系统中分为三种角色:服务提供者、服务使用者和注册中心,提供者发布服务到注册中心,使用者通过注册中心发现所需服务,然后与该服务的提供者绑定,并调用服务。
那么Web服务和SOA是什么关系呢,可以这样说,Web服务是SOA的一种实现,有点像Tomcat和JSP/Servlet规范的关系。SOA是一个比较虚的概念,例如它只提出定义一些接口和协议,那么这些东西具体应该怎样定义呢,Web服务就将它们具体化了:Web服务使用的协议都是基于XML的;SOA只说应该有三种角色,而Web服务里这三种角色都有具体的实现方式。看到这里你应该会问,那么SOA还有哪些实现呢?CORBA、DCOM和J2EE都可以算是,但我认为它们不能算很纯粹,至少它们并不都具有中立的协议。
现在该用一个具体的例子来说明一下Web服务了,假设我们的系统中需要一项功能是查询当地的天气情况(世界时间、货币汇率等等,都一样),显然我们不会自己做一个从气象部门数据库中查找数据的程序,这需要很多手续也没有必要,更要命的是,这样做会增加我们与气象部门的耦合度。试想某一天气象部门的数据库结构改变了,我们将不得不修改自己的代码,如果他们忘记通知我们这一改变,想象一下客户会看到什么?
为了利用Web服务,我们从某一注册中心查找和天气有关的服务,在结果中也许我们会选择收费较低,或者收费稍高但更稳定和准确的服务。从注册中心我们能够得到所选服务的完整描述,其中包含了各种数据类型和调用方式,利用这些信息,可以使用工具生成这些必要的类,以及客户端Stub,利用这个Stub就可以调用远程的Web服务了。在我们的例子中,调用后服务提供者会返回一个含有结果的消息,在我们的系统中可以从这个消息里得到所要的结果,并显示给客户。这样就形成一个完整的Web服务调用。这种调用方式被称为静态调用,因为在Stub里服务提供者的地址(被称为调用端点endpoint)是写定的,还有另外一种方式被称为动态调用,以后会讲到。
那么Web服务和以前的RPC(远程过程调用)有什么分别呢?RPC通常要求调用者和被调用者是同构的,即使用同样的语言编写,而Web服务没有这个要求(诀窍在于使用了XML封装消息),这就大大增加了灵活程度;另外,Web服务的调用除这种类似RPC的方式外,还可以是基于消息的方式,服务使用者可以只接收消息,或是只发送消息,在一些应用中这种方式十分有用。
内容总结一下就是:Web服务是SOA的实现,Web服务不是RPC。