廣義的遠程通訊技術包括:RPC,WebService,RMI,JMS,EJB,JNDI
一、概念解釋
-
RPC:遠程過程調(diào)用,廣義的RPC和與MQ并列屬于系統(tǒng)間的交互方式,跨平臺,通過http通信,通信的過程相當于http遠程傳送參數(shù)(串行化技術),本質(zhì)上是一個請求相應模型。特征為隱藏底層通信細節(jié),不需要直接處理Socket通訊和Http通信
- rpc的實現(xiàn):理論上來說WebService,gRPC,dubbo,微博Motan,thrift都是廣義RPC技術的實現(xiàn)。
-
CORBA:面向?qū)ο蟮木幊腆w系規(guī)范,分布式系統(tǒng),跨語言,對標RMI(競爭關系)。
- CORBA的實現(xiàn):omniORB,TAO。
SOAP:簡單對象訪問協(xié)議,微軟聯(lián)合廠商對xml-rpc標準化,soap協(xié)議就是聯(lián)合標準化的結(jié)果,而且微軟搶先完善了soap協(xié)議,推出了webservice。對象訪問協(xié)議指的是使用XML描述web service的信息(URI/類/參數(shù)/返回值),理論上SOAP就是一段xml
-
WebService:屬于廣義rpc的一種(常見的廣義rpc實現(xiàn)還有xml-rpc和json-rpc),支持異構(gòu)系統(tǒng)間的交互, 支持不同語言的通信,使用http通信,通過serlvet提供XML格式的數(shù)據(jù),是SOAP協(xié)議的封裝,WSDL是它的描述方式。
- 基于SOAP實現(xiàn)WebService:引入JAX-WS規(guī)范(java實現(xiàn)soap的一個規(guī)范,為了簡化基于soap的java開發(fā),使用jax-ws可以讓開發(fā)者不編寫任何生產(chǎn)和處理soap的代碼,jax-ws運行時會將api的調(diào)用轉(zhuǎn)換為soap的消息)基于jax-ws的開發(fā)框架有ApacheAxis2和ApacheCXF(結(jié)合spring,是常用框架)
- 基于REST的實現(xiàn)WebService:對應有JAX-RS規(guī)范,基于jax-rs的框架有ApacheWink,Jersey,Spring REST
WSDL:webservice描述語言,描述SOAP協(xié)議的,也是段XML
-
RMI:遠程調(diào)用對象,其實是java實現(xiàn)了RPC的一組接口
- 實現(xiàn):沒有框架,本身就是這種技術的實現(xiàn)
JMS:MQ
-
EJB:大型分布式,rmi-iiop協(xié)議
- 直接對標spring體系:因為EJB是官方指定的標準,各個容器廠商都會不予余力的開發(fā)新版本來支持EJB標準,因此符合EJB的規(guī)范的容器,一般能適應企業(yè)的方方面面,而開源的spring結(jié)構(gòu)體系就是個不統(tǒng)一的標準,你不能將spring+structs的架構(gòu)遷移到spring+WebWork,更不能輕易將Spring+hibernate遷移到Spring+iBatis,但是因為EJB的標準問題,可以在WebSphere,WebLogic和JBOSS之間切換。因為EJB的過于重量級和難以使用,相當于民間開發(fā)了一套技術(spring)來覆蓋了官方的EJB所提供的技術。
二、廣義RPC發(fā)展歷程
-
廣義RPC的技術發(fā)展歷程
以下按照時間順序排序- CORBA
- DCOM,COM+
- JAVA RMI
- .net remoting
- XML-RPC,SOAP,WebService(冗余數(shù)據(jù)多,處理速度慢)
- Hessian(二進制,官方只提供了java的實現(xiàn))
- JSON-RPC(沒有統(tǒng)一實現(xiàn))
- Microsoft WCF,WebAPI(微軟技術整合)
- ZeroC Ice,Thrift,GRPC
下圖為技術發(fā)展簡圖:

三、狹義RPC技術框架
由于目前跨內(nèi)存調(diào)用的普遍性,RPC往往代稱更加具體的基于底層協(xié)議二進制流的RPC框架,與WebService最大的不同就是: 狹義的RPC基于二進制流的序列化和反序列化,故不能夠提供跨語言的服務,但是比基于文本解析的WebService更加高效。
狹義RPC框架一般需要高性能的網(wǎng)絡框架,如Netty,Mina,高性能的序列化反序列化框架,尋址方式,如果是帶會話的RPC,還要有會話和狀態(tài)保持功能。
當下XML-RPC,SOAP,WebService技術的缺陷:
- 冗余數(shù)據(jù)太多,處理速度太慢。
- RPC 風格的 Web Service 跨語言性不佳,而 Document 風格的 Web Service 又太過難用。
- Web Service 沒有解決用戶的真正問題,只是把一個問題變成了另一個問題。
- Web Service 的規(guī)范太過復雜,以至于在 .NET 和 Java 平臺以外沒有真正好用的實現(xiàn),甚至沒有可用的實現(xiàn)。
- 跨語言跨平臺只是 Web Service 的一個口號,雖然很多人迷信這一點,但事實上它并沒有真正實現(xiàn)。