RPC 服務 與 HTTP 服務的區別

2021-10-22 14:51:44 字數 2284 閱讀 7034

1、什麼是rpc

rpc(remote procedure call)—遠端過程呼叫,它是一種通過網路從遠端電腦程式上請求服務,而不需要了解底層網路技術的協議。rpc協議假定某些傳輸協議的存在,如tcp或udp,為通訊程式之間攜帶資訊資料。在osi網路通訊模型中,rpc跨越了傳輸層和應用層。rpc使得開發包括網路分布式多程式在內的應用程式更加容易。

rpc採用客戶機/伺服器(c/s)模式。請求程式就是乙個客戶機,而服務提供程式就是乙個伺服器。首先,客戶機呼叫程序傳送乙個有程序引數的呼叫資訊到服務程序,然後等待應答資訊。在伺服器端,程序保持睡眠狀態直到呼叫資訊到達為止。當乙個呼叫資訊到達,伺服器獲得程序引數,計算結果,傳送答覆資訊,然後等待下乙個呼叫資訊,最後,客戶端呼叫程序接收答覆資訊,獲得程序結果,然後呼叫執行繼續進行。

2、osi網路七層模型

在說rpc和http的區別之前,我覺的有必要了解一下osi的七層網路結構模型,它可以分為以下幾層(自下而上):

第一層:物理層。這一層主要就是傳輸這些二進位制資料。

第二層:鏈路層。將上面的網路層的資料報封裝成資料幀,便於物理層傳輸;

第三層:網路層。定義網路裝置間如何傳輸資料;

第四層:傳輸層。管理著網路中的端到端的資料傳輸;

第五層:會話層。管理使用者的會話,控制使用者間邏輯連線的建立和中斷;

第六層:表示層。定義不同的系統中資料的傳輸格式,編碼和解碼規範等;

第七層:應用層。定義了用於在網路中進行通訊和傳輸資料的介面;

3、rpc呼叫流程

簡單地說一下,乙個完整的rpc架構裡面包含了四個核心的元件,分別是client ,server,client stub以及server stub

1、 客戶端(rpc client):服務呼叫方

3、 服務端存根(server stub):接受客戶端傳送過來的訊息並解包,再呼叫本地服務

4、 服務端(rpc server):真正的服務提供者。

rpc採用c/s模式,請求程式就是乙個客戶端應用,而服務提供者就是乙個伺服器。首先,服務消費者(rpc客戶端應用)呼叫程序傳送乙個有程序引數的呼叫資訊到服務程序,然後等待應答資訊。在服務提供方(rpc伺服器端),程序保持睡眠狀態直到呼叫資訊到達為止。當乙個呼叫資訊到達,伺服器獲得程序引數,呼叫服務端方法對呼叫請求進行計算而得到計算結果,並傳送答覆資訊,然後等待下乙個呼叫資訊;最後,客戶端呼叫程序接收答覆資訊,獲得程序結果,然後呼叫執行繼續進行。

4、rpc架構的作用

rpc 的主要目標是讓構建分布式計算(應用)更容易、透明,在提供強大的遠端呼叫能力時不損失本地呼叫的語義簡潔性。為實現該目標,rpc 框架需提供一種透明呼叫機制讓使用者不必顯式的區分本地呼叫和遠端呼叫。rpc框架負責遮蔽底層的傳輸方式(tcp或者udp)、序列化方式(xml/json/二進位制)和通訊細節。開發人員在使用的時候只需要了解誰在什麼位置提供了什麼樣的遠端服務介面即可,並不需要關心底層通訊細節和呼叫過程。

5、常見rpc技術和框架

(1)、應用級的服務框架:阿里的dubbo/dubbox、google grpc、spring boot/spring cloud。

(2)、遠端通訊協議:rmi、socket、soap(http xml)、rest(http json)。

(3)、通訊框架:mina和netty

6、http服務 vs rpc服務

傳輸協議

rpc,可以基於tcp協議,也可以基於http協議

http,基於http協議

傳輸效率

rpc,使用自定義的tcp協議,可以讓請求報文體積更小,或者使用http2協議,也可以很好的減少報文的體積,提高傳輸效率

http,如果是基於http1.1的協議,請求中會包含很多無用的內容,如果是基於http2.0,那麼簡單的封裝以下是可以作為乙個rpc來使用的,這時標準rpc框架更多的是服務治理

效能消耗,主要在於序列化和反序列化的耗時

rpc,可以基於thrift實現高效的二進位制傳輸

http,大部分是通過json來實現的,位元組大小和序列化耗時都比thrift要更消耗效能

負載均衡

rpc,基本都自帶了負載均衡策略

http,需要配置nginx,haproxy來實現

服務治理(下游服務新增,重啟,下線時如何不影響上游呼叫者)

rpc,能做到自動通知,不影響上游

http,需要事先通知,修改nginx/haproxy配置

RPC與HTTP的區別

1.rpc api和restful api 1 rpc面向過程 內部呼叫建議rpc rpc遠端呼叫不一定跨網路,同一臺主機的兩個程序直接也可以是rpc。rest就是一種rpc rpc可以通過http也可以直接走socket。選用http,是由於其更通用。2.rpc與http的不同特點 2.1 傳輸協...

RPC服務註冊與發現

rpc遠端過程呼叫中,存在2個角色,乙個服務提供者 另乙個服務消費者。那如何讓呼叫者知道,存在哪些服務可以呼叫呢?即如何讓別人使用我們的服務呢?有同學說很簡單嘛,告訴使用者服務的ip以及埠就可以了啊。確實是這樣,這裡問題的關鍵在於是自動告知還是人肉告知。人肉告知的方式 如果你發現你的服務一台機器不夠...

RPC和HTTP的區別?

1.rpc主要是基於tcp ip協議,而http服務主要是基於http協議 http協議是應用層協議。rpc協議假定某些傳輸協議的存在,如tcp或udp,為通訊程式之間攜帶資訊資料。在osi網路通訊模型中,rpc跨越了傳輸層和應用層。rpc使得開發包括網路分布式多程式在內的應用程式更加輕易。2.同步...