美文网首页
php项目拆分rpc选型

php项目拆分rpc选型

作者: lodestar | 来源:发表于2019-07-28 23:10 被阅读0次

    背景:团队中所有的项目都是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("http://host/api/");
    $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();
    

    参考:https://github.com/laruence/yar

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/dzrmrctx.html