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