公眾號(hào):程序員面試經(jīng)驗(yàn)分享(jobbible)
REST與RPC比較與應(yīng)用場(chǎng)景
REST與RPC概念
什么是REST
REST是一種架構(gòu)風(fēng)格,指的是一組架構(gòu)約束條件和原則押框。滿足這些約束條件和原則的應(yīng)用程序或設(shè)計(jì)就是 RESTful汽煮。REST規(guī)范把所有內(nèi)容都視為資源拷姿,網(wǎng)絡(luò)上一切皆資源蜗帜。
REST并沒有創(chuàng)造新的技術(shù)献汗,組件或服務(wù)敢订,只是使用Web的現(xiàn)有特征和能力。 可以完全通過HTTP協(xié)議實(shí)現(xiàn)罢吃,使用 HTTP 協(xié)議處理數(shù)據(jù)通信楚午。REST架構(gòu)對(duì)資源的操作包括獲取、創(chuàng)建尿招、修改和刪除資源的操作正好對(duì)應(yīng)HTTP協(xié)議提供的GET矾柜、POST、PUT和DELETE方法泊业。
HTTP動(dòng)詞與REST風(fēng)格CRUD對(duì)應(yīng)關(guān)系:
什么是RPC
遠(yuǎn)程方法調(diào)用把沼,就是像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程方法。常見RPC框架結(jié)構(gòu)圖:
RPC框架要做到的最基本的三件事:
服務(wù)端如何確定客戶端要調(diào)用的函數(shù)吁伺;
在遠(yuǎn)程調(diào)用中饮睬,客戶端和服務(wù)端分別維護(hù)一個(gè)【ID->函數(shù)】的對(duì)應(yīng)表, ID在所有進(jìn)程中都是唯一確定的篮奄±Τ睿客戶端在做遠(yuǎn)程過程調(diào)用時(shí),附上這個(gè)ID窟却,服務(wù)端通過查表昼丑,來確定客戶端需要調(diào)用的函數(shù),然后執(zhí)行相應(yīng)函數(shù)的代碼夸赫。
如何進(jìn)行序列化和反序列化菩帝;
客戶端和服務(wù)端交互時(shí)將參數(shù)或結(jié)果轉(zhuǎn)化為字節(jié)流在網(wǎng)絡(luò)中傳輸,那么數(shù)據(jù)轉(zhuǎn)化為字節(jié)流的或者將字節(jié)流轉(zhuǎn)換成能讀取的固定格式時(shí)就需要進(jìn)行序列化和反序列化茬腿,序列化和反序列化的速度也會(huì)影響遠(yuǎn)程調(diào)用的效率呼奢。
如何進(jìn)行網(wǎng)絡(luò)傳輸(選擇何種網(wǎng)絡(luò)協(xié)議);
多數(shù)RPC框架選擇TCP作為傳輸協(xié)議切平,也有部分選擇HTTP握础。如gRPC使用HTTP2。不同的協(xié)議各有利弊悴品。TCP更加高效禀综,而HTTP在實(shí)際應(yīng)用中更加的靈活简烘。
REST與RPC比較
都是網(wǎng)絡(luò)交互的協(xié)議規(guī)范。通常用于多個(gè)微服務(wù)之間的通信協(xié)議定枷。
REST RPC
通信協(xié)議 HTTP 一般使用TCP
性能 低 高
靈活度 高 低
高與低是對(duì)實(shí)現(xiàn)兩種規(guī)范框架的相對(duì)比較孤澎,但也不是絕對(duì)的,需要根據(jù)實(shí)際情況而定依鸥。
REST與RPC應(yīng)用場(chǎng)景
REST和RPC都常用于微服務(wù)架構(gòu)中亥至。
1、HTTP相對(duì)更規(guī)范贱迟,更標(biāo)準(zhǔn)姐扮,更通用,無論哪種語言都支持http協(xié)議衣吠。如果你是對(duì)外開放API茶敏,例如開放平臺(tái),外部的編程語言多種多樣缚俏,你無法拒絕對(duì)每種語言的支持惊搏,現(xiàn)在開源中間件,基本最先支持的幾個(gè)協(xié)議都包含RESTful忧换。
RPC在微服務(wù)中的利用
2恬惯、 RPC 框架作為架構(gòu)微服務(wù)化的基礎(chǔ)組件 ,它能大大降低架構(gòu)微服務(wù)化的成本亚茬,提高調(diào)用方與服務(wù)提供方的研發(fā)效率酪耳,屏蔽跨進(jìn)程調(diào)用函數(shù)(服務(wù))的各類復(fù)雜細(xì)節(jié)。讓調(diào)用方感覺就像調(diào)用本地函數(shù)一樣調(diào)用遠(yuǎn)端函數(shù)刹缝、讓服務(wù)提供方感覺就像實(shí)現(xiàn)一個(gè)本地函數(shù)一樣來實(shí)現(xiàn)服務(wù)碗暗。
最后建議
REST調(diào)用及測(cè)試都很方便,RPC就顯得有點(diǎn)繁瑣梢夯,但是RPC的效率是毋庸置疑的言疗,所以建議在多系統(tǒng)之間的內(nèi)部調(diào)用采用RPC。對(duì)外提供的服務(wù)颂砸,Rest更加合適噪奄。