目錄
- 什麼是 RPC ?
- 什麼情況下使用 RPC ?
- RPC 架構原理
- RPC 調用過程
- RPC 優點
- RPC 缺點
- PHP RPC 有哪些?
- 小結
- 推薦閱讀
RPC 是一種架構或者說一種架構,主要目标就是讓遠端服務調用更簡單、透明,調用遠端就像調用本地一樣。
百度百科解釋:
RPC(Remote Procedure Call) - 遠端過程調用,它是一種通過網絡從遠端計算機程式上請求服務,而不需要了解底層網絡技術的協定。RPC協定假定某些傳輸協定的存在,如TCP或UDP,為通信程式之間攜帶資訊資料。在OSI網絡通信模型中,RPC跨越了傳輸層和應用層。RPC使得開發包括網絡分布式多程式在内的應用程式更加容易。
如果我們開發簡單的應用,業務流程簡單、流量不大,根本用不着 RPC。
當我們的應用通路量增加和業務增加時,發現單機已無法承受,此時可以根據不同的業務(劃厘清楚業務邏輯)拆分成幾個互不關聯的應用,分别部署在不同的機器上,此時可能也不需要用到 RPC 。
随着我們的業務越來越多,應用也越來越多,應用與應用互相關聯調用,發現有些功能已經不能簡單劃分開,此時可能就需要用到 RPC。
比如,我們開發電商系統,需要拆分出使用者服務、商品服務、優惠券服務、支付服務、訂單服務、物流服務、售後服務等等,這些服務之間都互相調用,這時内部調用最好使用 RPC ,同時每個服務都可以獨立部署,獨立上線。
也就說當我們的項目太大,需要解耦服務,擴充性強、部署靈活,這時就要用到 RPC ,主要解決了分布式系統中,服務與服務之間的調用問題。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SN5UjM0cjN1ATMtEDN0UzM0QTOwATM1ATOxAjMtADN4kDOz8CX1ATOxAjMvwFM0gTO4MzLcd2bsJ2Lc12bj5ycn9Gbi52YugTMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)
RPC 架構主要包括三部分:
- 服務注冊中心(Registry),負責将本地服務釋出成遠端服務,管理遠端服務,提供給服務消費者使用。
- 服務提供者(Server),提供服務接口定義與服務實作類。
- 服務消費者(Client),通過遠端代理對象調用遠端服務。
服務提供者啟動後主動向服務注冊中心(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 就是要把 2、3、4、7、8、9 這些步驟都封裝起來。
- 跨語言(C++、PHP、Java、Python ...)
- 協定私密,安全性較高
- 資料傳輸效率高
- 支援動态擴充
一個完善的 RPC架構 開發難度大,需要的專業人員比較多,對初學者難度比較大。
- Thrift:http://thrift.apache.org/
- gRPC:http://doc.oschina.net/grpc
- Yar:https://www.php.net/manual/zh/book.yar.php
- Swoole-RPC:https://wiki.swoole.com/wiki/page/683.html
- Hprose:https://hprose.com/
這篇文章分享了,我認為的 RPC 是什麼樣的。
主要包括在什麼場景下使用 RPC,RPC 的原理及調用過程,還有 RPC 的優缺點和 PHP 常用的 RPC 架構。
等我研究了具體某一種 RPC,再分享給大家。
- 系統的講解 - PHP 接口簽名驗證
- 系統的講解 - PHP 緩存技術
- 系統的講解 - SSO 單點登入
- 系統的講解 - PHP WEB 安全防禦
- 系統的講解 - PHP 浮點數高精度運算
本文歡迎轉發,轉發請注明作者和出處,謝謝!
作者:新亮筆記(關注公衆号,可申請添加微信好友)
出處:https://www.cnblogs.com/xinliangcoder
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。