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 相关文章推荐
搜索引擎技术核心揭密
Oct 09 PHP
PHP 编程安全性小结
Jan 08 PHP
php自动获取字符串编码函数mb_detect_encoding
May 31 PHP
php中截取中文字符串的代码小结
Jul 17 PHP
采用thinkphp自带方法生成静态html文件详解
Jun 13 PHP
PHP反射机制用法实例
Aug 28 PHP
php可应用于面包屑导航的递归寻找家谱树实现方法
Feb 02 PHP
服务器迁移php版本不同可能诱发的问题
Dec 22 PHP
PHP如何使用Memcached
Apr 05 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
Nov 12 PHP
laravel-admin 中列表筛选方法
Oct 03 PHP
laravel清除视图缓存的代码
Oct 23 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
Docker配置PHP开发环境教程
2016/12/21 PHP
图片之间的切换
2006/06/26 Javascript
javascript静态的url如何传递
2007/05/03 Javascript
原生js做的手风琴效果的导航菜单
2013/11/08 Javascript
页面加载完毕后滚动条自动滚动一定位置
2014/02/20 Javascript
jQuery()方法的第二个参数详解
2015/04/29 Javascript
jQuery鼠标事件汇总
2015/08/30 Javascript
js实现兼容性好的微软官网导航下拉菜单效果
2015/09/07 Javascript
浏览器检测JS代码(兼容目前各大主流浏览器)
2016/02/21 Javascript
解析jQueryEasyUI的使用
2016/11/22 Javascript
JS实现微信里判断页面是否被分享成功的方法
2017/06/06 Javascript
微信小程序request请求后台接口php的实例详解
2017/09/20 Javascript
VueJs 搭建Axios接口请求工具
2017/11/20 Javascript
Vue调试神器vue-devtools安装方法
2017/12/12 Javascript
vue无限轮播插件代码实例
2019/05/10 Javascript
vue+moment实现倒计时效果
2019/08/26 Javascript
js实现页面图片消除效果
2020/03/24 Javascript
[04:50]2019DOTA2高校联赛秋季赛四强集锦
2019/12/27 DOTA
浅谈Python中函数的参数传递
2016/06/21 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
2018/01/23 Python
对Python中Iterator和Iterable的区别详解
2018/10/18 Python
Python API自动化框架总结
2019/11/12 Python
Python猜数字算法题详解
2020/03/01 Python
html5实现输入框fixed定位在屏幕最底部兼容性
2020/07/03 HTML / CSS
介绍一下Linux文件的记录形式
2012/04/18 面试题
Servlet如何得到服务器的信息
2015/12/22 面试题
工商企业管理实习自我鉴定
2013/12/04 职场文书
《都江堰》教学反思
2014/02/07 职场文书
诚信考试承诺书
2014/03/27 职场文书
授权收款委托书
2014/09/23 职场文书
领导干部考核评语
2015/01/04 职场文书
2015年工会工作总结
2015/03/30 职场文书
个人维稳承诺书
2015/05/04 职场文书
初中政治教师教学反思
2016/02/23 职场文书
一篇文章带你搞懂Python类的相关知识
2021/05/20 Python
教你怎么用PyCharm为同一服务器配置多个python解释器
2021/05/31 Python