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進行注冊和搜索

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM