國內C源碼PHP框架選擇與評價 Yaf Yar Swoole workerman?

對於韓天峰(Rango)的博客 《Yii/Yaf/Swoole 3個框架的壓測性能對比》一文分析引起我作為一名 PHPer 的思考:如今PHP 的玩法越來越多,那麼在大部分PHP開發中,大家是怎麼看待這些框架的呢?而像BAT這些巨頭類的企業,PHP開發方向他們是一個什麼狀態呢?


先放結論:

  1. 需要極致的性能,可以接受代碼執行機制和一般的 LAMP 部署方式不一致: Swoole 或 Workerman,本機 ab 壓測短連接都能達到1.9W+ requests/sec;

  2. 需要高性能,同時需要包括完整的 MVC 支持在內的全框架特性支持:Phalcon;
  3. 需要高性能,專註於實現,僅需要基礎的 URL 路由:Yaf。

Swoole 的運行機制和其他所有框架都不一樣,是完整的 FastCGI 模式,即不僅只去除了 Fork 的開銷,還消滅了重複性的 init。 因此,也帶來了開發時需要注意發布新版本必須重新 reload。 其配套框架似乎能解決此問題,但抱歉未深入研究。

Workerman 的核心要點和 Swoole 一致,但採用了純 PHP 的 Web Socket 實現。和 Swoole 相比最大的好處是移除了對 C 擴展的需求,但必須採用 CLI 模式運行使其還是無法跑在虛擬主機上,但不管怎麼說,起碼客戶端不需要依賴擴展了。

沒有在生產環境中玩過以上兩者,不過多評價。

Yaf 也提供了極高的性能,同時不改變原有的 PHPer 的知識架構,只是為了簡潔放棄了 DB 有關的封裝。但事實上這部分即重,又不是高度重複執行,確實沒有必要在擴展層面實現,通過 Composer 隨便裝個 ORM/ActiveRecord 的包就可以了。 何況對於高性能網站的前端而言,大部分時候是不會允許去碰緩存外的東西的。

Phalcon 比起 Yaf 來說,框架特性和文檔都要好很多,性能下降也並不多(僅1/10左右的差異)。

以上兩者,一般來說我更推薦 Yaf,架構總是要有取捨的,認清楚 Yaf 沒有像其他框架一樣提供那麼多舒心的特性是有原因的:別在要求高性能的場合玩那些有的沒的。

所以,如果是修改較少的內部服務(比如SOA 架構中後端去除 View 了的 BLL 層),或是開放 API 系統之類,那麼我推薦 Swoole / Workerman。

如果是團隊不想經歷較高的學習曲線(實際上面對高性能這個問題時,只有高、較高和非常高這幾個選項吧?),那麼就用 Yaf / Phalcon 吧。


Yii: 薛強用PHP實現的PHP Web開發框架.

Yaf: 鳥哥用C實現的輕量級PHP Web開發框架.

Swoole: 峰哥用C實現的跑在CLI下的PHP高性能網路開發庫.

Yii和Yaf框架開發的PHP程序一般都是跑在PHP-FPM/Apache這些容器中.Yaf性能遠勝於Yii.而Swoole應用則不依賴PHP容器(PHP-FPM或Apache),可以用PHP解釋器在命令行下單獨運行.

所以個人認為,可以用 PHP7-CLI + Swoole 開發高性能介面和即時通訊服務,用 PHP7-FPM + Yaf 開發通用的Web程序.可以在網站中結合起來使用,Nginx負責在前面進行分發,把請求分發給對應的後端處理. 架構要比淘寶的 PHP/Node + Java 簡單得多,而且性能也有保障.


Yaf Yar Swoole 這三個是C的擴展的框架,workerman應該是原生的PHP寫的socket伺服器框架。

我覺得這四個不管哪一款都是國內比較優秀的並且令人耳目一新的框架。這四款框架讓我們了解到PHP不僅僅局限於做資料庫的增刪改查,還能實現更多重要的東西。

據我所知像BAT這類巨頭企業中早已經有用原生PHP做伺服器(類似workerman)類似的應用,而且有交大規模的應用和部署。


選擇 C 源碼類型的 PHP 框架的唯一理由是性能。


正在測試yaf框架和HHVM一起用,但不知擴展支持情況


PHP框架現在正在兩級分化,以下只是個人見解。

中小型企業:

我們需要一款性能不差,運維簡單,開發效率很好的框架。

我們流量不是太大,多加幾台應用伺服器就好了,開發效率更重要。

我們選擇Yii、TP、CI,擼起袖子就是干,一月整一個版本出來。

中大型企業:

我們的架構這個框架不適應,需要定製一下,還是不太好用。

應用服務成本好高啊,這個框架性能太差,換C擴展框架試試,什麼?只有Hello World性能好!

我們定做一個新的吧,我們公司技術很強,我們要都用非同步去實現。

什麼?PHP怎麼搞非同步?哦,原來有個Swoole的東東。

那我們擼起袖子開始干吧。

騰訊:我們搞了個 tencent-php/tsf

Camera360:我們也搞了個 pinguo/php-msf

有贊:我們也搞了個 youzan/zanphp

後面的跟上......


我也搞了一個定位於中小型企業,普及 Swoole 應用的輕量級框架:

MixPHP:mixstart/mixphp


Baidu: HHVM,Yaf

阿里:主要用在Web前端

騰訊:以前是純PHP寫的Socket框架PSF,基本已經停用了,Swoole是未來的技術發展方向。


PHP7出來了


推薦閱讀:

如何滿足PHP源代碼加密和混淆的需求?
如何看待 swoole 作者最近修改開源協議?
Magento從架構上來說,主流的評價如何?
Apache是否優於Nginx?
為什麼shopex和ecshop都停止更新了?

TAG:Web開發 | PHP | Framework | PHP框架 | PHP學習 |