什么是 RPC ?
RPC 是一種框架或者說一種架構,主要目標就是讓遠程服務呼叫更簡單、透明,呼叫遠程就像呼叫本地一樣,
百度百科解釋:
RPC(Remote Procedure Call) - 遠程程序呼叫,它是一種通過網路從遠程計算機程式上請求服務,而不需要了解底層網路技術的協議,RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通信程式之間攜帶資訊資料,在OSI網路通信模型中,RPC跨越了傳輸層和應用層,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 這些步驟都封裝起來,
RPC 優點
跨語言(C++、PHP、Java、Python ...)
協議私密,安全性較高
資料傳輸效率高
支持動態擴展
RPC 缺點
一個完善的 RPC框架 開發難度大,需要的專業人員比較多,對初學者難度比較大,
PHP 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,再分享給大家,這里我還準備了一分學習圖和資料,如下:

鏈接:https://pan.baidu.com/s/1v5gm7n0L7TGyejCmQrMh2g 提取碼:x2p5
免費分享,但是X度限制嚴重,如若鏈接失效點擊鏈接或搜索加群 群號518475424,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/117786.html
標籤:PHP
上一篇:微信掃描帶引數二維碼事件
