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