天天看點

我眼中的 RPC

目錄

  • 什麼是 RPC ?
  • 什麼情況下使用 RPC ?
  • RPC 架構原理
  • RPC 調用過程
  • RPC 優點
  • RPC 缺點
  • PHP RPC 有哪些?
  • 小結
  • 推薦閱讀

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

百度百科解釋:

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

如果我們開發簡單的應用,業務流程簡單、流量不大,根本用不着 RPC。

當我們的應用通路量增加和業務增加時,發現單機已無法承受,此時可以根據不同的業務(劃厘清楚業務邏輯)拆分成幾個互不關聯的應用,分别部署在不同的機器上,此時可能也不需要用到 RPC 。

随着我們的業務越來越多,應用也越來越多,應用與應用互相關聯調用,發現有些功能已經不能簡單劃分開,此時可能就需要用到 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 這些步驟都封裝起來。

  • 跨語言(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 浮點數高精度運算

本文歡迎轉發,轉發請注明作者和出處,謝謝!

我眼中的 RPC

作者:新亮筆記(關注公衆号,可申請添加微信好友)

出處:https://www.cnblogs.com/xinliangcoder

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

rpc