PHP微服務框架即“Micro Service Framework For PHP”,是Camera360社區伺服器端團隊基於Swoole自主研發現代化的PHP協程服務框架,簡稱msf或php-msf,是Swoole的工程級企業應用框架,經歷了Camera360億級用戶高併發大流量的考驗。 php-msf由Camera360伺服器團隊主導研發,會持續更新與維護,也希望有更多優秀的Swoole應用實作開發者加入。 php-msf核心設計概念是採用協程、非同步、平行的創新技術手段來提高系統的單機吞吐能力,降低整體伺服器成本。
框架手冊(Gitbook): PHP-MSF開發手冊
API Document(Rawgit): 類別文檔
範例DEMO專案: PHP-MSF DEMO
幫助完善文件: https://github.com/pinguo/php-msf-docs,請提交PR。
PHP-MSF#1群(QQ): 614054288
$ > php -r " copy('https://raw.githubusercontent.com/pinguo/php-msf-docker/master/installer.php', 'installer.php');include('installer.php'); " && source ~ /.bashrc
installer.php
會檢查運行環境,根據你的自訂配置,自動建立專案模板,composer安裝依賴,啟動服務。如果cdn.rawgit.com
無法訪問,可以直接克隆或下載php-msf-docker,提取installer.php
,然後直接運行php installer.php
如果一切順利,運行到最後你將看到如下的輸出:
[2017-09-06 16:08:34] Run composer install success
[2017-09-06 16:08:34] Congratulations, all are installed successfully !
[2017-09-06 16:08:34] You can, visit http://127.0.0.1:8990/Welcome for test
_______ ____
________ / /_ ____ ____ ___ _____/ __/
___/ __ / __ / __ _ _____/ __ ` __ / ___/ /_
__/ /_/ / / / / /_/ /_____/ / / / / (__ ) __/
_/ .___/_/ /_/ .___/ /_/ /_/ /_/____/_/
/_/ /_/ Camera360 Open Source TM
[2017-09-06 16:08:34] Swoole Version: 1.9.18
[2017-09-06 16:08:34] PHP Version: 7.1.8
[2017-09-06 16:08:34] Application ENV: docker
[2017-09-06 16:08:34] Listen Addr: 0.0.0.0
[2017-09-06 16:08:34] Listen Port: 8990
訪問測試:
$ > curl http://127.0.0.1:8990/Welcome
hello world !
注意端口,如果你不是8990,你需要修改,然後訪問測試。
├── app // PHP业务代码
│ ├── AppServer.php // 应用server类,可根据需求自定义
│ ├── Controllers // 控制器类目录
│ ├── Lib // 特殊逻辑处理类目录
│ ├── Models // Model类目录
│ ├── Route // 特殊路由规则类目录
│ ├── Tasks // Task类目录
│ └── Views // 视图文件目录
├── build.sh // 构建脚本(拉取docker镜像,启动容器)
├── checkstyle.sh // 代码检查脚本
├── composer.json // composer包依赖配置文件
├── config // 配置目录
├── server.php // server启动脚本
├── console.php // 命令行脚本
├── test // 单元测试目录
上述為基於php-msf的標準應用結構,一鍵安裝程式installer.php會自動產生目錄,使用者可依需求建立一些自訂目錄,只要符合psr4標準即可自動載入。
偵錯模式
$ > ./server.php start
Daemon模式
$ > ./server.php start -d
停止服務
$ > ./server.php stop
重啟服務
$ > ./server.php restart
我們製作了Docker映像,方便Docker使用者快速的安裝環境,運行PHP-MSF DEMO工程。另外期望在開發環境修改程式碼即時預覽效果,建議使用Docker for Mac/Windows桌面版。
如果是升級Docker,它會自動遷移原有的映像和容器,請耐心等待,千萬不能中途kill掉Docker進程,否則再想遷移就難了。
Docker Registry(阿里雲):
docker pull registry.cn-hangzhou.aliyuncs.com/pinguo-ops/php-msf-docker:latest
docker pull registry-internal.cn-hangzhou.aliyuncs.com/pinguo-ops/php-msf-docker:latest
docker pull registry-vpc.cn-hangzhou.aliyuncs.com/pinguo-ops/php-msf-docker:latest
docker pull pinguoops/php-msf-docker
我們專注打造穩定高效能純異步基於HTTP的微服務框架,作為nginx+php-fpm的替代技術棧實現架構的微服務化;而Tcp/WebSocket Server將作為插件的形勢支持,或者作為其他獨立的開源專案.
對於小型團隊或業務系統我們建議還是採用傳統的nginx+php-fpm技術棧,對於成本和效能來說沒有瓶頸,也就完全沒有必要引進全新的技術堆疊。
對於大中型團隊或業務系統,處在服務治理或服務化演進的重要階段,php-msf是可選方案之一。
對於龐大的PHP應用集群,想要大幅節省伺服器成本,提升服務效能,php-msf是選配方案之一。
對於聚合服務,例如大型的網站首頁,想要透過伺服器端聚合內容整合數據,php-msf是可選方案之一。
推薦安裝方式,透過編輯專案composer.json
加入依賴pinguo/php-msf
{
"require" : {
"pinguo/php-msf" : " >=3.0.0 "
},
"minimum-stability" : " dev "
}
"minimum-stability": "dev"
這個設定選項必須加上,因為日誌元件依賴"monolog/monolog": "2.0.x-dev"
,而monolog/monolog
無2.0的release包,不過我們在生產環境已經驗證其穩定性。
php-msf經歷了Camera360社區服務大流量、高併發的洗禮,穩定性得到充分驗證。穩定性是我們花了大量時間、精力去解決的最重要問題,也是三大原則的最重要原則。
IO密集業務的單機處理能力提升5-10倍,這是生產環境中得出的真實數據,如Camera360社區某聚合服務在流量高峰需要40台伺服器抗住流量,而採用php-msf重構之後只需要4台相同配置的伺服器就可以抗住所有流量。
由於Swoole複雜的進程模型,並且有同步阻塞和非同步非阻塞之分,所以在運行相同程式碼邏輯時,可能在調用方式、傳遞參數都不一致,從而直線拉高了學習成本,我們為了屏蔽低層的差異,做了大量的工作,實現和傳統MVC框架的唯一區別在於添加“yield”關鍵字。我們參考了Yii2框架的部分程式碼實踐,我們期望無縫的從Yii2開發切換過來。
上述三大原則,是我們在新增特性、功能實現時,投票或合併代碼的依據,任何影響這些原則的PR也會被拒絕。
目前社群有幾個PHP開源專案支援協程,它們大多採用Generator+Yield來實現,但是實現的細微差別會導致效能相差甚遠,我們應該認識到協程能夠以同步的程式碼書寫方式而運行異步邏輯,故協程調度器的效能一定要足夠的高,php-msf的協程調度效能是原生非同步回調方式的80%,也就是說某個API採用原生非同步回調寫法QPS為10000,透過php-msf協程調度器調度QPS為8000。
目前php-msf還在起步階段,我們花了大量的時間和精力解決穩定性、高效能、記憶體問題,因為我們認為「基石」是「萬丈高樓」的最基本的保障,只有基礎打得牢,才能將「大樓」建得「更高」。 3.0版本是我們開源的起始版本,是我們邁出的重要一步,接下來我們將重點放在分散式微服務框架的打磨。
另外,由於基於PHP常駐進程,並直接解析HTTP或TCP請求,這是服務化最重要的支撐,基於此我們可以做很多原來不敢去實現的想法,總之想像空間很大。
php-msf最開始是基於SwooleDistributed-1.7.x開發,在這次開源版本中,連線池主要採用了SD的實作。由於我們框架定位、解決的業務場景、穩定性的要求、代碼風格等差異太大,因此我們決定自主研發微服務框架,每個框架都有自己的特色和優點,選擇合適自己公司和業務場景的框架最重要,同時在此也感謝白貓;另外,在研發php-msf框架及生產環境應用過程中,遇到很多底層問題,不過都一一解決,而這些問題能夠解決最重要就是Swoole開源專案創始人韓天峰-Rango的大力支持,在此深表感謝。
GNU General Public License, version 2 see https://www.gnu.org/licenses/gpl-2.0.html