摘要:管理這些服務方案則叫服務治理。協議假定某些傳輸協議的存在,如或,為通信程序之間攜帶信息數據。請求程序就是一個客戶機,而服務提供程序就是一個服務器。在服務器端,進程保持睡眠狀態直到調用信息到達為止。
不涉及其他的語言及工具,我們從PHP本身來談如何實現服務治理
本猿人已經寫好的服務治理 https://github.com/CrazyCodes...治理什么?
這個專業名詞很容易發現治理的是服務,而服務則是我們的項目。管理這些服務方案則叫服務治理。
現在在Server上有四項服務,分別為
UserService
ShopService
GoodsService
LiveService
這些服務我們叫它服務提供者(既提供對內服務的應用)
調用服務的應用我們稱它為服務消費者,例如
User-Api
Shop-Api
Goods-Api
Live-Api
Service 是對內服務的而Api是對外服務的
圖片來源 http://blog.csdn.net/suifeng3...
服務治理考慮的問題就是如何管理這四項服務,讓它們如何對外服務,如何監控服務進程
依托實現在實現服務治理之前,需要了解以下幾塊知識點
thrift
rpc
swoole
thrift暫時大可理解為可以通過它去調用其他開發語言的方法
rpcRPC(Remote Procedure Call)—遠程過程調用,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通信程序之間攜帶信息數據。在OSI網絡通信模型中,RPC跨越了傳輸層和應用層。RPC使得開發包括網絡分布式多程序在內的應用程序更加容易。
RPC采用客戶機/服務器模式。請求程序就是一個客戶機,而服務提供程序就是一個服務器。首先,客戶機調用進程發送一個有進程參數的調用信息到服務進程,然后等待應答信息。在服務器端,進程保持睡眠狀態直到調用信息到達為止。當一個調用信息到達,服務器獲得進程參數,計算結果,發送答復信息,然后等待下一個調用信息,最后,客戶端調用進程接收答復信息,獲得進程結果,然后調用執行繼續進行。
服務與服務之間通信可以通過RPC通信,當然也可以選擇UDP等
swoolePHP圈內跨世紀的產物,使用他的原因是因為Swoole本身支持RPC通信,所以我們本章通過Swoole Rpc的方法去實現消費者與服務提供者之間的通信
實現RPC通信服務治理非常重要的一個環節,要在無感知的情況讓消費者A調用服務提供者A,B,C,當然實際情況下,這是永遠不可能的,根本不在一個內存空間中,我們需要自己模擬出來這種使用方式
$userSerivce = $client->client ("UserService"); $result = $userSerivce->getUserInfo (["user_id" => 100]); var_dump($result);
在消費者內沒有UserService,更沒有getUserInfo 方法,這些都在服務提供者的應用中,如何去調用它們?
首先通過php的__call 方法去截取一個不存在的方法
public function __call($name, $arguments) { $client = new ClientRpc($this->serviceName); $response = $client->send ($this->serviceName, $name, $arguments); return (json_decode ($response, true)); }
獲取后調用自己寫的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]); // 重組參數,組合成你希望的格式,最后轉成json發送到服務提供者 $this->client->send (json_encode ((array)$request)); return $this->client->recv (); } public function __destruct() { $this->client->close (); unset($this->client); } }鳴謝
周夢康 [https://mengkang.net/]
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28321.html
摘要:是一種使用松耦合的黑盒子服務構建業務應用的體系架構,這些服務可以通過編排連接在一起以實現特定的功能。在一個中如何實現松耦合實現松耦合一種策略是使用服務接口中為服務來限制服務之間的依賴性,對消費者隱藏服務實現。 服務治理所治理的服務需要合理的部署與管理,本章我們講一下SOA(面向服務架構),本人語言文筆不好,所以本章內容使用問答模式,參考了 [SOA面試題(http://www.jdon...
摘要:服務治理治理的絕筆是服務,在一家公司有玩各種語言的程序員,如何去統一管理他們開發的服務,這是一個問題。請求程序就是一個客戶機,而服務提供者就是一個服務器。在服務器端,進程保持睡眠狀態直到調用信息到達為止。 服務治理 治理的絕筆是服務,在一家公司有玩各種語言的程序員,如何去統一管理他們開發的服務,這是一個問題。 上一章主要講了下服務治理需要什么,如何實現,這章我們詳細的肢解一下服務治理的...
摘要:為了解決這一系列問題,微博從年開發了語言的框架,并基于此完成了服務化改造。這些經歷之下微博也積累了一套服務治理型的服務化體系。的版,所要解決的是微博平臺內部服務之間的調用,因此協議時,其實并沒有考慮到跨語言的問題,用的是對比較友好的。 showImg(https://segmentfault.com/img/remote/1460000012601596?w=1080&h=606); ...
摘要:一引言華為數字化轉型的邏輯和方法,看起來似乎并不非常復雜。華為在年提出實現全聯接的智能華為,成為行業標桿的數字化轉型目標。但是,華為的數字化轉型之道真的好學嗎其實不然。華為真正提出數字化轉型,是在年。一、引言華為數字化轉型的邏輯和方法,看起來似乎并不非常復雜。筆者將《華為.數字化轉型必修課》課程的主要內容,概括為一個愿景、三大目標、四個基礎、五大內容、三大要求、六大案例,用下圖來表示:?一個...
閱讀 2505·2023-04-25 19:31
閱讀 2239·2021-11-04 16:11
閱讀 2805·2021-10-08 10:05
閱讀 1515·2021-09-30 09:48
閱讀 2315·2019-08-30 15:56
閱讀 2406·2019-08-30 15:56
閱讀 2173·2019-08-30 15:53
閱讀 2268·2019-08-30 15:44