什么是RPC?


什么是RPC?

百度解釋:RPC(Remote Procedure Call)— 遠程過程調用,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通信程序之間攜帶信息數據。

可能各位看了這句話,還是不懂。那我舉個例子。平時老婆經常給我發指令,陽台的衣服收下,面對面發就是本地過程調用,通過微信,或者電話告訴我。然后我再執行就是遠程過程調用。

什么情況下使用 RPC ?

例如開發電商系統,需要拆分出用戶服務、商品服務、優惠券服務、支付服務、訂單服務、物流服務、售后服務等等,這些服務之間都相互調用,這時內部調用最好使用 RPC ,同時每個服務都可以獨立部署,獨立上線。 也就說當我們的項目太大,需要解耦服務,擴展性強、部署靈活,這時就要用到 RPC ,主要解決了分布式系統中,服務與服務之間的調用問題。

RPC 框架原理

RPC 架構主要包括三部分:

  • 服務注冊中心(Registry),負責將本地服務發布成遠程服務,管理遠程服務,提供給服務消費者使用。
  • 服務提供者(Server),提供服務接口定義與服務實現類。
  • 服務消費者(Client),通過遠程代理對象調用遠程服務。

服務提供者啟動后主動向服務注冊中心(Registry)注冊機器IP、端口以及提供的服務列表;

服務消費者啟動時向服務注冊中心(Registry)獲取服務提供方地址列表。

服務注冊中心(Registry)可實現負載均衡和故障切換。

RPC 調用過程

(1) 客戶端(client)以本地調用方式調用服務;

(2) 客戶端存根(client stub)接收到調用后,負責將方法、參數等組裝成能夠進行網絡傳輸的消息體(將消息體對象序列化為二進制);

(3) 客戶端通過 sockets 將消息發送到服務端;

(4) 服務端存根(server stub)收到消息后進行解碼(將消息對象反序列化);

(5) 服務端存根(server stub)根據解碼結果調用本地的服務;

(6) 本地服務執行並將結果返回給服務端存根(server stub);

(7) 服務端存根(server stub)將返回結果打包成消息(將結果消息對象序列化);

(8) 服務端(server)通過 sockets 將消息發送到客戶端;

(9) 客戶端存根(client stub)接收到結果消息,並進行解碼(將結果消息發序列化);

(10) 客戶端(client)得到最終結果。

RPC 就是要把 2、3、4、7、8、9 這些步驟都封裝起來。

RPC 優點

  • 跨語言(C++、PHP、Java、Python ...)
  • 協議私密,安全性較高
  • 數據傳輸效率高
  • 支持動態擴展

RPC 缺點

一個完善的 RPC框架 開發難度大,需要的專業人員比較多,對初學者難度比較大。

PHP RPC 有哪些?

小結

這篇文章分享了,我認為的 RPC 是什么樣的。

主要包括在什么場景下使用 RPC,RPC 的原理及調用過程,還有 RPC 的優缺點和 PHP 常用的 RPC 框架。

等我研究了具體某一種 RPC,再分享給大家。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM