廣義的遠(yuǎn)程通訊技術(shù)包括:RPC灵嫌,WebService鼻百,RMI,JMS,EJB荸频,JNDI
一、概念解釋
-
RPC:遠(yuǎn)程過程調(diào)用户辫,廣義的RPC和與MQ并列屬于系統(tǒng)間的交互方式脾猛,跨平臺,通過http通信贤姆,通信的過程相當(dāng)于http遠(yuǎn)程傳送參數(shù)(串行化技術(shù))榆苞,本質(zhì)上是一個請求相應(yīng)模型。特征為隱藏底層通信細(xì)節(jié)霞捡,不需要直接處理Socket通訊和Http通信
- rpc的實(shí)現(xiàn):理論上來說WebService坐漏,gRPC,dubbo,微博Motan赊琳,thrift都是廣義RPC技術(shù)的實(shí)現(xiàn)街夭。
-
CORBA:面向?qū)ο蟮木幊腆w系規(guī)范,分布式系統(tǒng)躏筏,跨語言板丽,對標(biāo)RMI(競爭關(guān)系)。
- CORBA的實(shí)現(xiàn):omniORB趁尼,TAO埃碱。
SOAP:簡單對象訪問協(xié)議,微軟聯(lián)合廠商對xml-rpc標(biāo)準(zhǔn)化乃正,soap協(xié)議就是聯(lián)合標(biāo)準(zhǔn)化的結(jié)果,而且微軟搶先完善了soap協(xié)議婶博,推出了webservice瓮具。對象訪問協(xié)議指的是使用XML描述web service的信息(URI/類/參數(shù)/返回值),理論上SOAP就是一段xml
-
WebService:屬于廣義rpc的一種(常見的廣義rpc實(shí)現(xiàn)還有xml-rpc和json-rpc)凡人,支持異構(gòu)系統(tǒng)間的交互名党, 支持不同語言的通信,使用http通信挠轴,通過serlvet提供XML格式的數(shù)據(jù)传睹,是SOAP協(xié)議的封裝,WSDL是它的描述方式岸晦。
- 基于SOAP實(shí)現(xiàn)WebService:引入JAX-WS規(guī)范(java實(shí)現(xiàn)soap的一個規(guī)范欧啤,為了簡化基于soap的java開發(fā),使用jax-ws可以讓開發(fā)者不編寫任何生產(chǎn)和處理soap的代碼启上,jax-ws運(yùn)行時會將api的調(diào)用轉(zhuǎn)換為soap的消息)基于jax-ws的開發(fā)框架有ApacheAxis2和ApacheCXF(結(jié)合spring邢隧,是常用框架)
- 基于REST的實(shí)現(xiàn)WebService:對應(yīng)有JAX-RS規(guī)范,基于jax-rs的框架有ApacheWink冈在,Jersey倒慧,Spring REST
WSDL:webservice描述語言,描述SOAP協(xié)議的包券,也是段XML
-
RMI:遠(yuǎn)程調(diào)用對象纫谅,其實(shí)是java實(shí)現(xiàn)了RPC的一組接口
- 實(shí)現(xiàn):沒有框架,本身就是這種技術(shù)的實(shí)現(xiàn)
JMS:MQ
-
EJB:大型分布式溅固,rmi-iiop協(xié)議
- 直接對標(biāo)spring體系:因?yàn)镋JB是官方指定的標(biāo)準(zhǔn)付秕,各個容器廠商都會不予余力的開發(fā)新版本來支持EJB標(biāo)準(zhǔn),因此符合EJB的規(guī)范的容器侍郭,一般能適應(yīng)企業(yè)的方方面面盹牧,而開源的spring結(jié)構(gòu)體系就是個不統(tǒng)一的標(biāo)準(zhǔn)俩垃,你不能將spring+structs的架構(gòu)遷移到spring+WebWork励幼,更不能輕易將Spring+hibernate遷移到Spring+iBatis汰寓,但是因?yàn)镋JB的標(biāo)準(zhǔn)問題,可以在WebSphere苹粟,WebLogic和JBOSS之間切換有滑。因?yàn)镋JB的過于重量級和難以使用,相當(dāng)于民間開發(fā)了一套技術(shù)(spring)來覆蓋了官方的EJB所提供的技術(shù)嵌削。
二毛好、廣義RPC發(fā)展歷程
-
廣義RPC的技術(shù)發(fā)展歷程
以下按照時間順序排序- CORBA
- DCOM,COM+
- JAVA RMI
- .net remoting
- XML-RPC苛秕,SOAP肌访,WebService(冗余數(shù)據(jù)多,處理速度慢)
- Hessian(二進(jìn)制艇劫,官方只提供了java的實(shí)現(xiàn))
- JSON-RPC(沒有統(tǒng)一實(shí)現(xiàn))
- Microsoft WCF吼驶,WebAPI(微軟技術(shù)整合)
- ZeroC Ice,Thrift店煞,GRPC
下圖為技術(shù)發(fā)展簡圖:
三蟹演、狹義RPC技術(shù)框架
由于目前跨內(nèi)存調(diào)用的普遍性,RPC往往代稱更加具體的基于底層協(xié)議二進(jìn)制流的RPC框架,與WebService最大的不同就是: 狹義的RPC基于二進(jìn)制流的序列化和反序列化,故不能夠提供跨語言的服務(wù),但是比基于文本解析的WebService更加高效。
狹義RPC框架一般需要高性能的網(wǎng)絡(luò)框架顷蟀,如Netty酒请,Mina,高性能的序列化反序列化框架鸣个,尋址方式羞反,如果是帶會話的RPC,還要有會話和狀態(tài)保持功能囤萤。
當(dāng)下XML-RPC昼窗,SOAP,WebService技術(shù)的缺陷:
- 冗余數(shù)據(jù)太多阁将,處理速度太慢膏秫。
- RPC 風(fēng)格的 Web Service 跨語言性不佳,而 Document 風(fēng)格的 Web Service 又太過難用做盅。
- Web Service 沒有解決用戶的真正問題缤削,只是把一個問題變成了另一個問題。
- Web Service 的規(guī)范太過復(fù)雜吹榴,以至于在 .NET 和 Java 平臺以外沒有真正好用的實(shí)現(xiàn)亭敢,甚至沒有可用的實(shí)現(xiàn)。
- 跨語言跨平臺只是 Web Service 的一個口號图筹,雖然很多人迷信這一點(diǎn)帅刀,但事實(shí)上它并沒有真正實(shí)現(xiàn)让腹。