我眼中的 RPC

什麼是 RPC ?

RPC 是一種框架或者說一種架構,主要目標就是讓遠程服務調用更簡單、透明,調用遠程就像調用本地同樣。html

百度百科解釋:apache

RPC(Remote Procedure Call) - 遠程過程調用,它是一種經過網絡從遠程計算機程序上請求服務,而不須要了解底層網絡技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,爲通訊程序之間攜帶信息數據。在OSI網絡通訊模型中,RPC跨越了傳輸層和應用層。RPC使得開發包括網絡分佈式多程序在內的應用程序更加容易。緩存

什麼狀況下使用 RPC ?

若是咱們開發簡單的應用,業務流程簡單、流量不大,根本用不着 RPC。安全

當咱們的應用訪問量增長和業務增長時,發現單機已沒法承受,此時能夠根據不一樣的業務(劃分清楚業務邏輯)拆分紅幾個互不關聯的應用,分別部署在不一樣的機器上,此時可能也不須要用到 RPC 。swoole

隨着咱們的業務愈來愈多,應用也愈來愈多,應用與應用相互關聯調用,發現有些功能已經不能簡單劃分開,此時可能就須要用到 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 就是要把 二、三、四、七、八、9 這些步驟都封裝起來。

RPC 優勢

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

RPC 缺點

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

PHP RPC 有哪些?

小結

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

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

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

推薦閱讀

本文歡迎轉發,轉發請註明做者和出處,謝謝!

相關文章
相關標籤/搜索