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