php項目拆分rpc選型

背景:團隊中所有的項目都是php開發(fā)的,且都是用的php-fpm??偣材壳坝?項目,這幾個項目的核心數(shù)據(jù)都是在一個數(shù)據(jù)庫中,現(xiàn)在如果改動一個小功能,可能這幾個項目都會去改動,效率低下。所以考慮將一些公共的服務(wù)和數(shù)據(jù)獨立拆分出來,有統(tǒng)一的讀和寫入口。

問題:那這個6個項目是怎么相互調(diào)用的呢?新項目又怎么調(diào)用呢?
創(chuàng)建一個和這6個項目目錄平級的新的項目(codebase),這個項目是一個公共的調(diào)用項目。其他所有項目index.php都include codebase中的autoload.php文件。為什么沒有選擇用composer的方式將新的codebase加入到項目中。因為上線太麻煩了,在codebase中修改一個功能,需要協(xié)調(diào)6個項目組中的人去composer update ,同時去上線、測試。這個流程就太漫長了,也不滿足我們設(shè)計這套方案的初衷。目前只要是新功能都會產(chǎn)生一個獨立的項目,如果這幾個端口和新功能有關(guān)系,那么都是通過rpc的方式來調(diào)用。

協(xié)議選擇:protobuffer、thrift、json-rpc、yar。對于Pb和thrift我感覺還是重了一點,團隊中至少目前跨語言還沒有出現(xiàn)。json-rpc沒有找到運用得比較廣泛的應(yīng)用、且關(guān)注的人比較少。所以最后選擇鳥哥的yar。
yar是一個php的擴展,需要安裝,安裝方法參考最后鏈接說明。
rpc的優(yōu)勢是可以調(diào)用本地方法一樣調(diào)用遠程的方法,且可以捕獲異常,非常方面。

客戶端:需要注意的是client設(shè)置超時時間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")); 
//調(diào)用遠端服務(wù)
$result = $client->some_method("parameter");

服務(wù)端:一個普通的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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容