EasySwoole RPC
基礎概念介紹
很多傳統的 Phper
并不懂 RPC
是什么,RPC
全稱 Remote Procedure Call
,中文譯為 遠程過程調用
,其實你可以把它理解為是一種架構性上的設計,或者是一種解決方案。
例如在某龐大商場系統中,你可以把整個商場拆分為 N
個微服務(理解為 N
個獨立的小模塊也行),例如:
- 訂單系統
- 用戶管理系統
- 商品管理系統
- 等等
那么在這樣的架構中,就會存在一個 API 網關
的概念,或者是叫 服務集成者
。我的 API 網關
的職責,就是把一個請求,拆分成 N
個小請求,分發到各個小服務里面,再整合各個小服務的結果,返回給用戶。例如在某次下單請求中,那么大概發送的邏輯如下:
- API 網關接受請求
- API 網關提取用戶參數,請求用戶管理系統,獲取用戶余額等信息,等待結果
- API 網關提取商品參數,請求商品管理系統,獲取商品剩余庫存和價格等信息,等待結果
- API 網關融合用戶管理系統、商品管理系統的返回結果,進行下一步調用(假設滿足購買條件)
- API 網關調用用戶管理信息系統進行扣款,調用商品管理系統進行庫存扣減,調用訂單系統進行下單(事務邏輯和撤回可以用
請求 id
保證,或者自己實現其他邏輯調度) - API 網關返回綜合信息給用戶
而在以上發生的行為,就稱為 遠程過程調用
。而調用過程實現的通訊協議可以有很多,比如常見的 HTTP
協議。而 EasySwoole RPC
采用自定義短鏈接的 TCP
協議實現,每個請求包,都是一個 JSON
,從而方便實現跨平臺調用。
微服務相關概念說明
什么是服務熔斷?
簡單理解,一般是 某個服務故障
或者是 異常
引起的,類似現實世界中的 "保險絲",當某個異常條件被觸發,直接熔斷整個服務,而不是一直等到此服務超時。
什么是服務降級?
簡單理解,一般是從整體負荷考慮,就是當某個服務熔斷之后,服務器將不再被調用,此時客戶端可以自己準備一個本地的 fallback
回調,返回一個缺省值,這樣做,雖然服務水平下降,但總比服務直接掛掉要強。服務降級處理是在客戶端實現完成的,與服務端沒有關系。
什么是服務限流?
簡單理解,例如某個服務器最多同時僅能處理 100
個請求,或者是 CPU 負載達到百分之80
的時候,為了保護服務的穩定性,則不再希望繼續收到 新的連接。那么此時就要求客戶端不再對其發起請求。因此 EasySwoole RPC
提供了 NodeManager
(節點管理器)接口,你可以以任何形式來 監控你的服務提供者,在 getNodes()
方法中,返回對應的服務器節點信息即可。
RPC 5.x 全新特性
- 協程調度
- 服務自動發現
- 服務熔斷
- 服務降級
- Openssl 加密
- 跨平臺、跨語言支持
- 支持接入第三方注冊中心
組件要求
- php: >=7.1.0
- ext-swoole: >=4.4.5
- ext-json: >=1.0
- ext-sockets: *
- ext-openssl: >=7.1
- easyswoole/spl: ^1.0
- easyswoole/utility: ^1.0
- easyswoole/component: ^2.0
安裝方法
composer require easyswoole/rpc=5.x
倉庫地址
執行流程
基礎使用 Demo
關于 RPC 5.x
版本使用的基礎 demo
可查看 Github RPC 5.x Demo Github 或者 Gitee RPC 5.x Demo Gitee