欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP程序員簡(jiǎn)單的開(kāi)展服務(wù)治理架構(gòu)操作詳解(一)

 更新時(shí)間:2020年05月14日 11:12:33   作者:CrazyCodes  
這篇文章主要介紹了PHP程序員簡(jiǎn)單的開(kāi)展服務(wù)治理架構(gòu)操作,結(jié)合實(shí)例形式詳細(xì)分析了PHP開(kāi)展服務(wù)治理架構(gòu)操作相關(guān)原理、RPC通信實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了PHP程序員簡(jiǎn)單的開(kāi)展服務(wù)治理架構(gòu)操作。分享給大家供大家參考,具體如下:

不涉及其他的語(yǔ)言及工具,我們從PHP本身來(lái)談如何實(shí)現(xiàn)服務(wù)治理

本猿人已經(jīng)寫(xiě)好的服務(wù)治理 https://github.com/CrazyCodes/Service-Govern.git

治理什么?

這個(gè)專(zhuān)業(yè)名詞很容易發(fā)現(xiàn)治理的是服務(wù),而服務(wù)則是我們的項(xiàng)目。管理這些服務(wù)方案則叫服務(wù)治理。

現(xiàn)在在Server上有四項(xiàng)服務(wù),分別為

  • UserService
  • ShopService
  • GoodsService
  • LiveService

這些服務(wù)我們叫它服務(wù)提供者(既提供對(duì)內(nèi)服務(wù)的應(yīng)用)

調(diào)用服務(wù)的應(yīng)用我們稱(chēng)它為服務(wù)消費(fèi)者,例如

  • User-Api
  • Shop-Api
  • Goods-Api
  • Live-Api

Service 是對(duì)內(nèi)服務(wù)的而Api是對(duì)外服務(wù)的


服務(wù)治理考慮的問(wèn)題就是如何管理這四項(xiàng)服務(wù),讓它們?nèi)绾螌?duì)外服務(wù),如何監(jiān)控服務(wù)進(jìn)程

依托實(shí)現(xiàn)

在實(shí)現(xiàn)服務(wù)治理之前,需要了解以下幾塊知識(shí)點(diǎn)

  • thrift
  • rpc
  • swoole

thrift

暫時(shí)大可理解為可以通過(guò)它去調(diào)用其他開(kāi)發(fā)語(yǔ)言的方法

rpc

RPC(Remote Procedure Call)—遠(yuǎn)程過(guò)程調(diào)用,它是一種通過(guò)網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)程序上請(qǐng)求服務(wù),而不需要了解底層網(wǎng)絡(luò)技術(shù)的協(xié)議。RPC協(xié)議假定某些傳輸協(xié)議的存在,如TCP或UDP,為通信程序之間攜帶信息數(shù)據(jù)。在OSI網(wǎng)絡(luò)通信模型中,RPC跨越了傳輸層和應(yīng)用層。RPC使得開(kāi)發(fā)包括網(wǎng)絡(luò)分布式多程序在內(nèi)的應(yīng)用程序更加容易。
RPC采用客戶(hù)機(jī)/服務(wù)器模式。請(qǐng)求程序就是一個(gè)客戶(hù)機(jī),而服務(wù)提供程序就是一個(gè)服務(wù)器。首先,客戶(hù)機(jī)調(diào)用進(jìn)程發(fā)送一個(gè)有進(jìn)程參數(shù)的調(diào)用信息到服務(wù)進(jìn)程,然后等待應(yīng)答信息。在服務(wù)器端,進(jìn)程保持睡眠狀態(tài)直到調(diào)用信息到達(dá)為止。當(dāng)一個(gè)調(diào)用信息到達(dá),服務(wù)器獲得進(jìn)程參數(shù),計(jì)算結(jié)果,發(fā)送答復(fù)信息,然后等待下一個(gè)調(diào)用信息,最后,客戶(hù)端調(diào)用進(jìn)程接收答復(fù)信息,獲得進(jìn)程結(jié)果,然后調(diào)用執(zhí)行繼續(xù)進(jìn)行。

服務(wù)與服務(wù)之間通信可以通過(guò)RPC通信,當(dāng)然也可以選擇UDP等

swoole

PHP圈內(nèi)跨世紀(jì)的產(chǎn)物,使用他的原因是因?yàn)镾woole本身支持RPC通信,所以我們本章通過(guò)Swoole Rpc的方法去實(shí)現(xiàn)消費(fèi)者與服務(wù)提供者之間的通信

實(shí)現(xiàn)RPC通信

服務(wù)治理非常重要的一個(gè)環(huán)節(jié),要在無(wú)感知的情況讓消費(fèi)者A調(diào)用服務(wù)提供者A,B,C,當(dāng)然實(shí)際情況下,這是永遠(yuǎn)不可能的,根本不在一個(gè)內(nèi)存空間中,我們需要自己模擬出來(lái)這種使用方式

$userSerivce = $client->client ('UserService');
$result = $userSerivce->getUserInfo (['user_id' => 100]);
var_dump($result);

在消費(fèi)者內(nèi)沒(méi)有UserService,更沒(méi)有g(shù)etUserInfo 方法,這些都在服務(wù)提供者的應(yīng)用中,如何去調(diào)用它們?

首先通過(guò)php的__call 方法去截取一個(gè)不存在的方法

public function __call($name, $arguments)
{
  $client = new ClientRpc($this->serviceName);
      
  $response = $client->send ($this->serviceName, $name, $arguments);
      
  return (json_decode ($response, true));
      
}

獲取后調(diào)用自己寫(xiě)的send 方法,swoole出場(chǎng)

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ā)送到服務(wù)提供者
    $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)容感興趣的讀者可查看本站專(zhuān)題:《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語(yǔ)法入門(mén)教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門(mén)教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • PHP版微信公眾平臺(tái)紅包API

    PHP版微信公眾平臺(tái)紅包API

    這篇文章主要介紹了PHP版微信公眾平臺(tái)微信API類(lèi),目前主要實(shí)現(xiàn)了微信紅包接口,陸續(xù)會(huì)繼續(xù)進(jìn)行更新,非常的實(shí)用,這里推薦給小伙伴們,有需要的朋友可以參考下。
    2015-04-04
  • Yii1.1框架實(shí)現(xiàn)PHP極光推送消息通知功能

    Yii1.1框架實(shí)現(xiàn)PHP極光推送消息通知功能

    這篇文章主要介紹了Yii1.1框架實(shí)現(xiàn)PHP極光推送消息通知的相關(guān)資料,需要的朋友可以參考下
    2018-09-09
  • Laravel中數(shù)據(jù)遷移與數(shù)據(jù)填充的詳細(xì)步驟

    Laravel中數(shù)據(jù)遷移與數(shù)據(jù)填充的詳細(xì)步驟

    這篇文章主要給大家介紹了關(guān)于Laravel中數(shù)據(jù)遷移與數(shù)據(jù)填充的相關(guān)資料,文中通過(guò)示例代碼給大家詳細(xì)介紹了實(shí)現(xiàn)的步驟,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起看看吧。
    2017-12-12
  • Yii2如何批量添加數(shù)據(jù)

    Yii2如何批量添加數(shù)據(jù)

    批量添加這個(gè)操作,在實(shí)際開(kāi)發(fā)中經(jīng)常用得到,今天小編抽空給大家整理些有關(guān)yii2批量添加的問(wèn)題,感興趣的朋友一起看看吧
    2016-05-05
  • php中看實(shí)例學(xué)正則表達(dá)式

    php中看實(shí)例學(xué)正則表達(dá)式

    php中看實(shí)例學(xué)正則表達(dá)式,下面的文章都是通過(guò)實(shí)例說(shuō)明來(lái)教你學(xué)習(xí)正則表達(dá)式,需要的朋友可以參考下。
    2006-12-12
  • ThinkPHP CURD方法之where方法詳解

    ThinkPHP CURD方法之where方法詳解

    這篇文章主要介紹了ThinkPHP CURD方法的where方法,需要的朋友可以參考下
    2014-06-06
  • ThinkPHP5+Layui實(shí)現(xiàn)圖片上傳加預(yù)覽功能

    ThinkPHP5+Layui實(shí)現(xiàn)圖片上傳加預(yù)覽功能

    這篇文章主要介紹了ThinkPHP5+Layui實(shí)現(xiàn)圖片上傳加預(yù)覽功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-08-08
  • Yii2中的場(chǎng)景(scenario)和驗(yàn)證規(guī)則(rule)詳解

    Yii2中的場(chǎng)景(scenario)和驗(yàn)證規(guī)則(rule)詳解

    Yii2的rule用于對(duì)模型屬性進(jìn)行驗(yàn)證,scenario用戶(hù)定義不同場(chǎng)景下需要驗(yàn)證的模型,下面這篇文章主要給大家介紹了關(guān)于Yii2中場(chǎng)景(scenario)和驗(yàn)證規(guī)則(rule)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2018-01-01
  • PHP一個(gè)簡(jiǎn)單的無(wú)需刷新爬蟲(chóng)

    PHP一個(gè)簡(jiǎn)單的無(wú)需刷新爬蟲(chóng)

    今天小編就為大家分享一篇關(guān)于PHP一個(gè)簡(jiǎn)單的無(wú)需刷新爬蟲(chóng),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • 關(guān)于Yii2框架跑腳本時(shí)內(nèi)存泄漏問(wèn)題的分析與解決

    關(guān)于Yii2框架跑腳本時(shí)內(nèi)存泄漏問(wèn)題的分析與解決

    這篇文章主要給大家介紹了關(guān)于Yii2框架跑腳本時(shí)內(nèi)存泄漏問(wèn)題的分析與解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Yii2具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12

最新評(píng)論