千鋒教育2023版Java面試寶典Java面試200題(含美團、字節(jié)、阿里大廠真

談談RPC是什么?它的執(zhí)行流程
RPC全程為remote procedure call,即遠程過程調用。
- 使用RPC可以像本地調用一樣調用遠程服務,RPC是進程間的通信方式。
- 例如現(xiàn)在有A、B兩臺服務器,分別在兩臺服務器上各部署一個應用,A服務器上的應用想要調用B服務器上的應用的方法,由于兩個應用不在同一個內存空間,所以不能直接調用,需要通過網(wǎng)絡來表達調用的語義和傳達調用的數(shù)據(jù)。(RPC指的是整個網(wǎng)絡遠程調用過程)
- 一個完成的RPC架構中包含四個組件:
- 客戶端(Client):服務調用方。
- 客戶端存根(Client Stub):存放服務端的地址消息,再將客戶端的請求參數(shù)打包成網(wǎng)絡消息,然后通過網(wǎng)絡遠程發(fā)送給服務方。
- 服務端(Server):真正的服務提供者。
- (服務端存根)Server Stub:這個Stub可以理解為存根。接收客戶端發(fā)送過來的消息,將消息解包,并調用本地的方法。
- 調用過程:
- 客戶端以本地調用方式(即以接口方式)調用服務;
- 客戶端存根接收到調用后,負責將方法、參數(shù)等組裝成能夠進行網(wǎng)絡傳輸?shù)南Ⅲw。
- 客戶端通過sockets將消息發(fā)送到服務端。
- 服務端存根收到消息后進行解碼(將消息對象反序列化)。
- 服務端存根根據(jù)解碼結果調用本地的服務。
- 本地服務執(zhí)行并將結果返回給服務端存根。
- 服務端存根將返回的結果打包成消息(將結果消息對象序列化)。
- 服務端通過sockets將消息發(fā)送到客戶端。
- 客戶端存根接收到結果消息,并進行解碼。
- 客戶端得到最終結果。
- PRC的目標就是要把2、3、4、7、8、9的步驟封裝起來。在Java中RPC框架比較多,例如:Hessian、gRPC、Thrift、HSF、Dubbo等,其核心就是通訊和序列化。
標簽: