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

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

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進行註冊和搜尋