一蛾扇、概述
接口調(diào)用通常包含兩個部分攘烛,序列化和通信協(xié)議:
1??常見的序列化協(xié)議包括json、xml镀首、hession坟漱、protobuf、thrift蘑斧、text靖秩、bytes等;
2??通信協(xié)議比較流行的是http竖瘾、soap沟突、websockect。
首先解釋下兩種接口調(diào)用:
1??Rest:嚴格的說接口很規(guī)范捕传,操作對象即為資源惠拭,對資源的四種操作(post、get庸论、put职辅、delete),并且參數(shù)都放在 URL 上聂示。不嚴格的說 Http+json域携、Http+xml,常見的 http api 都可以稱為 Rest 接口鱼喉。
2??RPC:常說的遠程方法調(diào)用秀鞭,就是像調(diào)用本地方法一樣調(diào)用遠程方法,通信協(xié)議大多采用二進制方式扛禽。RPC通撤姹撸基于TCP實現(xiàn),常用框架例如dubbo编曼,netty豆巨、mina、thrift掐场。
二往扔、http vs 高性能二進制協(xié)議
http相對更規(guī)范贩猎,更標準,更通用瓤球,無論哪種語言都支持http協(xié)議融欧。如果是對外開放API敏弃,外部的編程語言多種多樣卦羡,無法拒絕對每種語言的支持。相應的麦到,如果采用http绿饵,無疑在實現(xiàn)SDK之前,支持了所有語言瓶颠,所以現(xiàn)在開源中間件拟赊,基本最先支持的幾個協(xié)議都包含RESTful。
RPC協(xié)議性能要高的多粹淋,例如Protobuf吸祟、Thrift、Kyro等桃移,(如果算上序列化)吞吐量大概能達到http的二倍屋匕。響應時間也更為出色。千萬不要小看這點性能損耗借杰,公認微服務做的比較好的过吻,例如,netflix蔗衡、阿里纤虽,曾經(jīng)都傳出過為了提升性能而合并服務。如果是交付型的項目绞惦,性能更為重要逼纸,因為你賣給客戶往往靠的就是性能上微弱的優(yōu)勢。
無論是Google济蝉、Amazon杰刽、netflix(據(jù)說很可能轉向grpc),還是阿里堆生,實際上內(nèi)部都是采用性能更高的RPC方式专缠。而對外開放的才是RESTful。
Rest 調(diào)用及測試都很方便淑仆,RPC就顯得有點麻煩涝婉,但是RPC的效率是毋庸置疑的。所以建議在多系統(tǒng)之間采用RPC蔗怠,對外提供服務墩弯,Rest是很適合的吩跋。
duboo在生產(chǎn)者和消費者兩個微服務之間的通信采用的就是RPC,無疑在服務之間的調(diào)用RPC更變現(xiàn)的優(yōu)秀渔工。
三锌钮、RPC在微服務中的利用
1??RPC 框架是架構微服務化的首要基礎組件 ,它能大大降低架構微服務化的成本引矩,提高調(diào)用方與服務提供方的研發(fā)效率梁丘,屏蔽跨進程調(diào)用函數(shù)(服務)的各類復雜細節(jié)。
2??RPC 框架的職責是:讓調(diào)用方感覺就像調(diào)用本地函數(shù)一樣調(diào)用遠端函數(shù)旺韭;讓服務提供方感覺就像實現(xiàn)一個本地函數(shù)一樣來實現(xiàn)服務氛谜。
四、RPC的好處
RPC 的主要功能目標是讓構建分布式計算(應用)更容易区端,在提供強大的遠程調(diào)用能力時不損失本地調(diào)用的語義簡潔性值漫。 為實現(xiàn)該目標,RPC 框架需提供一種透明調(diào)用機制讓使用者不必顯式的區(qū)分本地調(diào)用和遠程調(diào)用织盼。
服務化的一個好處就是杨何,不限定服務的提供方使用什么技術選型,能夠實現(xiàn)大公司跨團隊的技術解耦沥邻。
如果沒有統(tǒng)一的服務框架---RPC框架危虱,各個團隊的服務提供方就需要各自實現(xiàn)一套序列化、反序列化谋国、網(wǎng)絡框架槽地、連接池、收發(fā)線程芦瘾、超時處理捌蚊、狀態(tài)機等“業(yè)務之外”的重復技術勞動,造成整體的低效近弟。所以缅糟,統(tǒng)一RPC框架把上述“業(yè)務之外”的技術勞動統(tǒng)一處理,是服務化首要解決的問題
五祷愉、幾種協(xié)議
- Socket使用時可以指定協(xié)議TCP窗宦、UDP等;
- RIM使用Jrmp協(xié)議二鳄,Jrmp又是基于TCP/IP赴涵;
- RPC底層使用Socket接口,定義了一套遠程調(diào)用方法订讼;
- HTTP是建立在TCP上髓窜,不是使用Socket接口,需要連接方主動發(fā)數(shù)據(jù)給服務器,服務器無法主動發(fā)數(shù)據(jù)給客戶端寄纵。
- Web Service提供的服務是基于web容器的鳖敷,底層使用http協(xié)議,類似一個遠程的服務提供者程拭,比如天氣預報服務定踱,對各地客戶端提供天氣預報,是一種請求應答的機制恃鞋,是跨系統(tǒng)跨平臺的崖媚。就是通過一個servlet,提供服務出去山宾。
- hessian是一套用于建立web service的簡單的二進制協(xié)議至扰,用于替代基于XML的web service鳍徽,是建立在rpc上的资锰,hessian有一套自己的序列化格式將數(shù)據(jù)序列化成流,然后通過http協(xié)議發(fā)送給服務器阶祭。