PHP程序员简单的开展服务治理架构操作详解(一)


Posted in PHP onMay 14, 2020

本文实例讲述了PHP程序员简单的开展服务治理架构操作。分享给大家供大家参考,具体如下:

不涉及其他的语言及工具,我们从PHP本身来谈如何实现服务治理

本猿人已经写好的服务治理 https://github.com/CrazyCodes/Service-Govern.git

治理什么?

这个专业名词很容易发现治理的是服务,而服务则是我们的项目。管理这些服务方案则叫服务治理。

现在在Server上有四项服务,分别为

  • UserService
  • ShopService
  • GoodsService
  • LiveService

这些服务我们叫它服务提供者(既提供对内服务的应用)

调用服务的应用我们称它为服务消费者,例如

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

Service 是对内服务的而Api是对外服务的

PHP程序员简单的开展服务治理架构操作详解(一)

服务治理考虑的问题就是如何管理这四项服务,让它们如何对外服务,如何监控服务进程

依托实现

在实现服务治理之前,需要了解以下几块知识点

  • thrift
  • rpc
  • swoole

thrift

暂时大可理解为可以通过它去调用其他开发语言的方法

rpc

RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。
RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

服务与服务之间通信可以通过RPC通信,当然也可以选择UDP等

swoole

PHP圈内跨世纪的产物,使用他的原因是因为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);
  }
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
WINDOWS服务器安装多套PHP的另类解决方案
Oct 09 PHP
PHP获得用户使用的代理服务器ip即真实ip
Dec 31 PHP
8个出色的WordPress SEO插件收集
Feb 26 PHP
一个基于PDO的数据库操作类(新) 一个PDO事务实例
Jul 03 PHP
php分页示例分享
Apr 30 PHP
thinkphp使用phpmailer发送邮件的方法
Nov 24 PHP
thinkphp文件处理类Dir.class.php的用法分析
Dec 08 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
Aug 21 PHP
PHPExcel导出2003和2007的excel文档功能示例
Jan 04 PHP
PHP 实现公历日期与农历日期的互转换
Sep 13 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
Oct 24 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
Nov 09 PHP
PHP程序员必须知道的两种日志实例分析
May 14 #PHP
Laravel框架集合用法实例浅析
May 14 #PHP
Laravel框架源码解析之模型Model原理与用法解析
May 14 #PHP
Laravel框架源码解析之入口文件原理分析
May 14 #PHP
Laravel框架源码解析之反射的使用详解
May 14 #PHP
PHP 数组操作详解【遍历、指针、函数等】
May 13 #PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
May 12 #PHP
You might like
php array_merge下进行数组合并的代码
2008/07/22 PHP
php中经典方法实现判断多维数组是否为空
2011/10/23 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
2016/09/22 PHP
常用一些Javascript判断函数
2012/08/14 Javascript
js中substring和substr的详细介绍与用法
2013/08/29 Javascript
使用JavaScript获取电池状态的方法
2014/05/03 Javascript
JS中三目运算符和if else的区别分析与示例
2014/11/21 Javascript
JavaScript取得WEB安全颜色列表的方法
2015/07/14 Javascript
jQuery实现布局高宽自适应的简单实例
2016/05/28 Javascript
JS HTML5拖拽上传图片预览
2016/07/18 Javascript
什么是JavaScript中的结果值?
2016/10/08 Javascript
基于JavaScript实现熔岩灯效果导航菜单
2017/01/04 Javascript
JS中的作用域链
2017/03/01 Javascript
React.js中常用的ES6写法总结(推荐)
2017/05/09 Javascript
AngularJS发送异步Get/Post请求方法
2018/08/13 Javascript
详解Nuxt.js中使用Element-UI填坑
2019/09/06 Javascript
浅谈layui 表单元素的选中问题
2019/10/25 Javascript
Python实现对PPT文件进行截图操作的方法
2015/04/28 Python
Python爬虫框架Scrapy实战之批量抓取招聘信息
2015/08/07 Python
python版微信跳一跳游戏辅助
2018/01/11 Python
Python基础教程之if判断,while循环,循环嵌套
2019/04/25 Python
纽约21世纪百货官网:Century 21
2016/08/27 全球购物
W Concept美国:精选全球独立设计师
2017/02/22 全球购物
银行自荐信范文
2013/10/07 职场文书
公司财务自我评价分享
2013/12/17 职场文书
导购员的岗位职责
2014/02/08 职场文书
《小池塘》教学反思
2014/02/28 职场文书
2014机关党员干部“正风肃纪”思想汇报
2014/09/15 职场文书
2014年国庆节演讲稿
2014/09/19 职场文书
教师学习八项规定六项禁令思想汇报
2014/09/27 职场文书
2015年安全生产工作总结范文
2015/04/02 职场文书
2015年出纳工作总结与计划
2015/05/18 职场文书
《牧场之国》教学反思
2016/02/22 职场文书
JavaScript实现贪吃蛇游戏
2021/06/16 Javascript
快速学习Oracle触发器和游标
2021/06/30 Oracle
关于对TypeScript泛型参数的默认值理解
2022/07/15 Javascript