PHP程序員簡單的開展服務治理架構(gòu)操作詳解(一)
本文實例講述了PHP程序員簡單的開展服務治理架構(gòu)操作。分享給大家供大家參考,具體如下:
不涉及其他的語言及工具,我們從PHP本身來談如何實現(xiàn)服務治理
本猿人已經(jīng)寫好的服務治理 https://github.com/CrazyCodes/Service-Govern.git 治理什么?這個專業(yè)名詞很容易發(fā)現(xiàn)治理的是服務,而服務則是我們的項目。管理這些服務方案則叫服務治理。
現(xiàn)在在Server上有四項服務,分別為
UserService ShopService GoodsService LiveService這些服務我們叫它服務提供者(既提供對內(nèi)服務的應用)
調(diào)用服務的應用我們稱它為服務消費者,例如
User-Api Shop-Api Goods-Api Live-ApiService 是對內(nèi)服務的而Api是對外服務的
服務治理考慮的問題就是如何管理這四項服務,讓它們?nèi)绾螌ν夥眨绾伪O(jiān)控服務進程
依托實現(xiàn)在實現(xiàn)服務治理之前,需要了解以下幾塊知識點
thrift rpc swoolethrift暫時大可理解為可以通過它去調(diào)用其他開發(fā)語言的方法
rpcRPC(Remote Procedure Call)—遠程過程調(diào)用,它是一種通過網(wǎng)絡從遠程計算機程序上請求服務,而不需要了解底層網(wǎng)絡技術(shù)的協(xié)議。RPC協(xié)議假定某些傳輸協(xié)議的存在,如TCP或UDP,為通信程序之間攜帶信息數(shù)據(jù)。在OSI網(wǎng)絡通信模型中,RPC跨越了傳輸層和應用層。RPC使得開發(fā)包括網(wǎng)絡分布式多程序在內(nèi)的應用程序更加容易。RPC采用客戶機/服務器模式。請求程序就是一個客戶機,而服務提供程序就是一個服務器。首先,客戶機調(diào)用進程發(fā)送一個有進程參數(shù)的調(diào)用信息到服務進程,然后等待應答信息。在服務器端,進程保持睡眠狀態(tài)直到調(diào)用信息到達為止。當一個調(diào)用信息到達,服務器獲得進程參數(shù),計算結(jié)果,發(fā)送答復信息,然后等待下一個調(diào)用信息,最后,客戶端調(diào)用進程接收答復信息,獲得進程結(jié)果,然后調(diào)用執(zhí)行繼續(xù)進行。服務與服務之間通信可以通過RPC通信,當然也可以選擇UDP等
swoolePHP圈內(nèi)跨世紀的產(chǎn)物,使用他的原因是因為Swoole本身支持RPC通信,所以我們本章通過Swoole Rpc的方法去實現(xiàn)消費者與服務提供者之間的通信
實現(xiàn)RPC通信服務治理非常重要的一個環(huán)節(jié),要在無感知的情況讓消費者A調(diào)用服務提供者A,B,C,當然實際情況下,這是永遠不可能的,根本不在一個內(nèi)存空間中,我們需要自己模擬出來這種使用方式
$userSerivce = $client->client (’UserService’);$result = $userSerivce->getUserInfo ([’user_id’ => 100]);var_dump($result);
在消費者內(nèi)沒有UserService,更沒有g(shù)etUserInfo 方法,這些都在服務提供者的應用中,如何去調(diào)用它們?
首先通過php的__call 方法去截取一個不存在的方法
public function __call($name, $arguments){ $client = new ClientRpc($this->serviceName);$response = $client->send ($this->serviceName, $name, $arguments);return (json_decode ($response, true)); }
獲取后調(diào)用自己寫的send 方法,swoole出場
class ClientRpc{ protected $client; public function __construct($service_name, $centerConfig) { $this->client = new swoole_client(SWOOLE_SOCK_TCP); $center = Dispatcher::loadBalance ($service_name, $centerConfig); $this->client->connect ($center[’ip’], $center[’port’], 0.5); } public function send($service, $action, $arguments) { $request = new Request();$request->setService ($service); $request->setAction ($action); $request->setParameters ($arguments[0]); // 重組參數(shù),組合成你希望的格式,最后轉(zhuǎn)成json發(fā)送到服務提供者 $this->client->send (json_encode ((array)$request)); return $this->client->recv (); } public function __destruct() { $this->client->close (); unset($this->client); }}
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O計入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設計有所幫助。
相關(guān)文章: