1. 程式人生 > >SOA,Webservice,SOAP,REST,RPC,RMI的區別與聯系

SOA,Webservice,SOAP,REST,RPC,RMI的區別與聯系

但是 apach apache get 客戶端 封裝格式 nbsp 組件 ESS

SOA,Webservice,SOAP,REST,RPC,RMI的區別與聯系

SOA面向服務的軟件架構(Service Oriented Architecture)

是一種計算機軟件的設計模式,主要應用於不通應用組件中通過某種協議來互操作

它的基本設計原理是:服務提供了一個簡單的接口,抽象了底層的復雜性,然後用戶可以訪問獨立的服務,而不需要去了解服務底層平臺實現。

正因為SOA架構實現不依賴於技術,因此能夠被各種不同的技術實現。

例如:

SOAP, RPC

REST

DCOM

CORBA

OPC-UA

Web services

DDS

Java RMI

WCF (Microsoft‘s implementation of web services now forms a part of WCF)

Apache Thrift

SORCER

因此REST、SOAP、RPC、RMI、DCOM等都是SOA的一種實現而已

2、RMI

SOA思想提出以後,就有很多基於在這個模型上的產物,很多適用於分布式的產物,同事也是越來越龐大系統的產物。Java RMI (Remote Method Invocation 遠程方法調用)是用Java在JDK1.1中實現的,它大大增強了Java開發分布式應用的能力。而RMI就是開發百分之百純Java的網絡分布式應用系統的核心解決方案,所以如果不是java的系統就不能使用RMI,這也是其缺點之一。RMI全部的宗旨就是盡可能簡化遠程接口對象的使用,相當於在服務器端暴露服務,通過bind或者rebind方法註冊到RMIRegistry中,註冊的信息中包含url,以及相應的類。客戶端在在註冊中心根據url得到遠程對象(stub,存根),然後調用stub遠程調用方法,底層的一些stub怎麽連接服務器,怎麽獲取結果返回,下面的參考鏈接都應該有講到。

參考文章:http://www.jianshu.com/p/2c78554a3f36

http://blog.csdn.net/guyuealian/article/details/51992182

3、RPC

了解上面的RMI,它的主要的流程就是Client<-->stub<-->[NETWORK]<-->skeleton<-->Server,還有一個比較重要的概念就是RMIRegistry

,其實大家網上去查RPC的時候流程其實都差不多,可能叫法和底層東西有點不一樣,其實其實現所遵循的模型還是類似的。主要的區別的話是RMI是只適用於java的,而RPC任何語言都可以;第二點就是他們兩者的調用方式不一樣,最終的目標還是一致

其與RMI大致的區別

1)RPC 跨語言,而 RMI只支持Java。

(2)RMI 調用遠程對象方法,允許方法返回 Java 對象以及基本數據類型,而RPC 不支持對象的概念,傳送到 RPC

服務的消息由外部數據表示 (External Data Representation, XDR) 語言表示,這種語言抽象了字節序類和數據類型結

構之間的差異。只有由 XDR 定義的數據類型才能被傳遞, 可以說 RMI 是面向對象方式的 Java RPC 。

(3)在方法調用上,RMI中,遠程接口使每個遠程方法都具有方法簽名(url)。如果一個方法在服務器上執行,但是沒有相

匹配的簽名被添加到這個遠程接口上,那麽這個新方法就不能被RMI客戶方所調用。

在RPC中,當一個請求到達RPC服務器時,這個請求就包含了一個參數集和一個文本值,通常形成“classname.methodname”的形式。這就向RPC服務器表明,被請求的方法在為 “classname”的類中,名

叫“methodname”。然後RPC服務器就去搜索與之相匹配的類和方法,並把它作為那種方法參數類型的輸入。這裏的

參數類型是與RPC請求中的類型是匹配的。一旦匹配成功,這個方法就被調用了,其結果被編碼後返回客戶方。說的直白一點就是rmi是自己寫一個url,如果正確就獲得相應的stub,而rpc的url是從註冊中心去拿的,不會出現url不對的情況

http://blog.jobbole.com/92290/

4、soap

全稱Simple Object Access Protocol簡單對象訪問協議,是交換數據的一種協議規範,是一種輕量的、簡單的、基於XML(標準通用標記語言下的一個子集)的協議,它被設計成在WEB上交換結構化的和固化的信息。關鍵詞——協議,實現分布式,webservice的一種協議,一種解決方式。

參考文章:http://blog.csdn.net/zhangzeyuaaa/article/details/20041015

5、rest

比如有個url:http:www.test.com/user/1,這個地址既要表示刪除id為1的用戶、又要表示修改id為1的用戶,還要表達獲取id為1的用戶,那麽,就要用到http1.1的不同的請求方法:get、post、delete、put,

對於rest這個東西,其實本人一點也沒有接觸吧,一下兩個網址,本人認為比較好,大夥可以去看一下,本人就rest就不多闡述了(怕誤導大家,哈哈)

http://www.ruanyifeng.com/blog/2011/09/restful.html

http://www.jianshu.com/p/65ab865a5e9f

Web Service

Web Service提供的服務是基於web容器的,底層使用http協議,類似一個遠程的服務提供者,比如天氣預報服務,對各地客戶端提供天氣預報,是一種請求應答的機制,是跨系統跨平臺的。

首先客戶端從服務器的到WebService的WSDL,同時在客戶端聲稱一個代理類(Proxy Class) 這個代理類負責與WebService

服務器進行Request 和Response 當一個數據(XML格式的)被封裝成SOAP格式的數據流發送到服務器端的時候,就會生成一個進程對象並且把接收到這個Request的SOAP包進行解析,然後對事物進行處理,處理結束以後再對這個計算結果進行SOAP

包裝,然後把這個包作為一個Response發送給客戶端的代理類(Proxy Class),同樣地,這個代理類也對這個SOAP包進行解析處理,繼而進行後續操作。這就是WebService的一個運行過程。

webservice是一種標準,他可以通過soap或rest的方式來實現。

傳統的soap-webservice,使用了soap協議(基於xml包裝)等。如果使用restful-webservice的話,則不需要soap與之相關的協議等,而是通過最簡單的 http 協議傳輸數據 ( 包括 xml 或 json) 。既簡化了設計,也減少了網絡傳輸量(因為只傳輸代表數據的 xml 或 json ,沒有額外的 xml 包裝)。

Web Service主要涉及的概念:

1. Http傳輸信道

2. XML的數據格式

3. SOAP封裝格式

4. WSDL的描述方式

5. UDDI UDDI是一種目錄服務,企業可以使用它對Webservices進行註冊和搜索

SOA,Webservice,SOAP,REST,RPC,RMI的區別與聯系