您的位置 首页 php

php项目拆分rpc选型

背景:团队中所有的项目都是php开发的,且都是用的php-fpm。总共目前有6项目,这几个项目的核心数据都是在一个数据库中,现在如果改动一个小功能,可能这几个项目都会去改动,效率低下。所以考虑将一些公共的服务和数据独立拆分出来,有统一的读和写入口。

问题:那这个6个项目是怎么相互调用的呢?新项目又怎么调用呢?

创建一个和这6个项目目录平级的新的项目(codebase),这个项目是一个公共的调用项目。其他所有项目index.php都include codebase中的autoload.php文件。为什么没有选择用composer的方式将新的codebase加入到项目中。因为上线太麻烦了,在codebase中修改一个功能,需要协调6个项目组中的人去composer update ,同时去上线、测试。这个流程就太漫长了,也不满足我们设计这套方案的初衷。目前只要是新功能都会产生一个独立的项目,如果这几个端口和新功能有关系,那么都是通过 rpc 的方式来调用。

协议选择:protobuffer、thrift、json-rpc、yar。对于 Pb 和thrift我感觉还是重了一点,团队中至少目前跨语言还没有出现。json-rpc没有找到运用得比较广泛的应用、且关注的人比较少。所以最后选择鸟哥的yar。

yar是一个php的扩展,需要安装,安装方法参考最后链接说明。

rpc的优势是可以调用本地方法一样调用远程的方法,且可以捕获异常,非常方面。

客户端:需要注意的是client设置超时时间YAR_OPT_TIMEOUT,单位为秒。

以下是copy鸟哥的说明:

 <?php

$client = new  Yar_Client("#34;);

$client->SetOpt(YAR_OPT_CONNECT_TIMEOUT, 1000);

$client->SetOpt(YAR_OPT_HEADER, array("hd1: val", "hd2: val")); 

//调用远端服务

$result = $client->some_method("parameter");  

服务端:一个普通的php-fpm,不是像swoole这种常驻进程。

 <?php

class API {

    public function some_method($parameter, $option = "foo") {

    }

    protected function client_can_not_see() {

    }

}

$ service  = new Yar_Server(new API());

$service->handle();  

参考:

技术交流QQ群号:1005491328

感谢三橙挪车支持

文章来源:智云一二三科技

文章标题:php项目拆分rpc选型

文章地址:https://www.zhihuclub.com/79761.shtml

关于作者: 智云科技

热门文章

网站地图