RPC 是一種框架或者說一種架構,主要目標就是讓遠程服務調用更簡單、透明,調用遠程就像調用本地同樣。html
百度百科解釋:apache
RPC(Remote Procedure Call) - 遠程過程調用,它是一種經過網絡從遠程計算機程序上請求服務,而不須要了解底層網絡技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,爲通訊程序之間攜帶信息數據。在OSI網絡通訊模型中,RPC跨越了傳輸層和應用層。RPC使得開發包括網絡分佈式多程序在內的應用程序更加容易。緩存
若是咱們開發簡單的應用,業務流程簡單、流量不大,根本用不着 RPC。安全
當咱們的應用訪問量增長和業務增長時,發現單機已沒法承受,此時能夠根據不一樣的業務(劃分清楚業務邏輯)拆分紅幾個互不關聯的應用,分別部署在不一樣的機器上,此時可能也不須要用到 RPC 。swoole
隨着咱們的業務愈來愈多,應用也愈來愈多,應用與應用相互關聯調用,發現有些功能已經不能簡單劃分開,此時可能就須要用到 RPC。網絡
好比,咱們開發電商系統,須要拆分出用戶服務、商品服務、優惠券服務、支付服務、訂單服務、物流服務、售後服務等等,這些服務之間都相互調用,這時內部調用最好使用 RPC ,同時每一個服務均可以獨立部署,獨立上線。架構
也就說當咱們的項目太大,須要解耦服務,擴展性強、部署靈活,這時就要用到 RPC ,主要解決了分佈式系統中,服務與服務之間的調用問題。負載均衡
RPC 架構主要包括三部分:框架
服務提供者啓動後主動向服務註冊中心(Registry)註冊機器IP、端口以及提供的服務列表;
服務消費者啓動時向服務註冊中心(Registry)獲取服務提供方地址列表。
服務註冊中心(Registry)可實現負載均衡和故障切換。
(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框架 開發難度大,須要的專業人員比較多,對初學者難度比較大。
這篇文章分享了,我認爲的 RPC 是什麼樣的。
主要包括在什麼場景下使用 RPC,RPC 的原理及調用過程,還有 RPC 的優缺點和 PHP 經常使用的 RPC 框架。
等我研究了具體某一種 RPC,再分享給你們。
本文歡迎轉發,轉發請註明做者和出處,謝謝!