REST、SOA、SOAP、RPC
SOA:
面向服務的軟件架構(Service Oriented Architecture),是一種計算機軟件的設計模式,主要應用於不通應用組件中通過某種協議來互操作,例如典型的通過網絡協議。因此SOA是獨立於任何廠商、產品與技術的。
因此REST、SOAP、RPC、RMI、DCOM等都是SOA的一種實現而已。
SOAP:
SOAP (Simple Object Access Protocol) 顧名思義,是一個嚴格定義的信息交換協議,用於在Web Service中把遠程調用和返回封裝成機器可讀的格式化數據。事實上SOAP數據使用XML數據格式,定義了一整套復雜的標簽,以描述調用的遠程過程、參數、返回值和出錯信息等等。而且隨著需要的增長,又不得增加協議以支持安全性,這使SOAP變得異常龐大,背離了簡單的初衷。另一方面,各個服務器都可以基於這個協議推出自己的API,即使它們提供的服務及其相似,定義的API也不盡相同,這又導致了WSDL的誕生。WSDL (Web Service Description Language) 也遵循XML格式,用來描述哪個服務器提供什麽服務,怎樣找到它,以及該服務使用怎樣的接口規範,簡言之,服務發現。現在,使用Web Service的過程變成,獲得該服務的WSDL描述,根據WSDL構造一條格式化的SOAP請求發送給服務器,然後接收一條同樣SOAP格式的應答,最後根據先前的WSDL解碼數據。絕大多數情況下,請求和應答使用HTTP協議傳輸,那麽發送請求就使用HTTP的POST方法。
SOAP = HTTP+XML+RPC
對於RPC本身可以走HTTP ,TCP等不同的協議,比如淘寶的Dubbo框架,RPC是可以選擇走TCP協議還是走HTTP協議的。
REST (REpresentational State Transfort) 形式上應該表述為客戶端通過申請資源來實現狀態的轉換,在這個角度系統可以看成一臺虛擬的狀態機。REST應該滿足這樣的特點:1)客戶端和服務器結構;2)連接協議具有無狀態性;3)能夠利用Cache機制增進性能;4)層次化的系統;
說到底,REST只是一種架構風格,而不是協議或標準。但這種新的風格(也許已經歷史悠久?)對現有的以SOAP為代表的Web Service造成的沖擊也是革命性的,因為它面向資源,甚至連服務也抽象成資源,因為它和HTTP緊密結合,因為它服務器無狀態。
無狀態通信,是指服務端(響應端)不保存任何與特定HTTP請求相關的資源,應用狀態必須由請求方在請求過程中提供。要求在網絡通信過程中,任意一個Web請求必須與其他請求隔離,當請求端提出請求時,請求本身包含了響應端為響應這一請求所需的全部信息。
https://blog.csdn.net/Jmilk/article/details/50461577
RPC(Remote Procedure Call Protocol)——遠程過程調用協議,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通信程序之間攜帶信息數據。在OSI網絡通信模型中,RPC跨越了傳輸層和應用層。RPC使得開發包括網絡分布式多程序在內的應用程序更加容易。
通常的實現有 XML-RPC , JSON-RPC , 通信方式基本相同, 所不同的只是傳輸數據的格式。
REST 不是一種協議,它是一種架構, 一種 Web Service 能夠如果滿足 REST 的幾個條件, 通常就稱這個系統是 Restful 的。
RPC框架與具體的協議無關。RPC 可基於 HTTP 或 TCP 協議,Web Service 就是基於 HTTP 協議的 RPC,它具有良好的跨平臺性,但其性能卻不如基於 TCP 協議的 RPC。
1. TCP/HTTP:眾所周知,TCP 是傳輸層協議,HTTP 是應用層協議,而傳輸層較應用層更加底層,在數據傳輸方面,越底層越快,因此,在一般情況下,TCP 一定比 HTTP 快。
RPC是以動詞為中心的, REST是以名詞為中心的, 此處的 動詞指的是一些方法, 名詞是指資源。
你會發現,以動詞為中心,意味著,當你要需要加入新功能時,你必須要添加更多的動詞, 這時候服務器端需要實現 相應的動詞(方法), 客戶端需要知道這個新的動詞並進行調用。
而以名詞為中心, 假使我請求的是 hostname/friends/, 無論這個URI對應的服務怎麽變化,客戶端是無需 關註和更新的,而這種變化對客戶端也是透明的。
Dubbo
HSF
Mesh
REST、SOA、SOAP、RPC