在不用緩存、集群之類東東只情況下,PHP框架哪家強(qiáng)?我指的是高并發(fā)高負(fù)載,并且適合做大型項目的。
高負(fù)載不是一個語言的問題,這個討論的范圍已經(jīng)超出了PHP:
1、如果同一類型的的框架(指都是為了解決某類問題,比如CMS,論壇等乖)是比較成熟的,那么在生產(chǎn)環(huán)境,大家的差異不會差不那里去;
2、框架的最主要目的不是為了解決“負(fù)載”的問題,而是加速開發(fā)。
3、負(fù)載的問題,最直接的可以由硬件來完成,比如一個相對比較爛的程序,只有要足夠的資源,也可以比一個資源不足的程序跑得好;一個程序,先是考慮能否完成業(yè)務(wù),再考慮其它的問題,會比較好一點;
4、框架本身也不一定就決定了負(fù)載,也決定于使用的人,比如框架提供的緩存是否被正確的使用,框架提供的優(yōu)化配置是否被合理的使用等等。
……
說了這么多,其實想說:哪個框架熟悉就用哪個,真的等到負(fù)載出問題了,找你的老板,相信他會有更好的解決方案。(負(fù)載出問題了,一定是到了要數(shù)錢的階段了)
決定能否高并發(fā)高負(fù)載的是你的業(yè)務(wù)類型和代碼質(zhì)量,和框架沒有太多關(guān)系。
大多數(shù)情況下業(yè)務(wù)的性能消耗是遠(yuǎn)大于框架本身的消耗,除非你的業(yè)務(wù)只是簡單的CURD
性能好,簡單(c擴(kuò)展的,PHP代碼進(jìn)行的都是間接的C調(diào)用,就像PHP的庫函數(shù)一樣.):
yaf 、Phalcon或者yii、laravel等國外龐大框架 基本上高性能并且輕量級軟件都C有關(guān)例如nginx和python等
PHP緩存技術(shù):Memcache技術(shù)、OPcache技術(shù)、accurlater技術(shù)和Varnish技術(shù)
Mysql和文件緩存技術(shù):Redis和Nosql
要高并發(fā),yaf實在是不合適。yar還稍微說的過去。
個人的建議是:swoole + apache thrift 或者推薦Phalcon 或者Swoole+Lumen 基于Swoole加速Lumen,開發(fā)效率和性能二者兼得。其他國內(nèi)php內(nèi)容管理系統(tǒng)都是渣渣。
Requirements
| Dependency | Requirement |
|---|---|
| PHP | >= 5.5.9Recommend PHP7+ |
| Swoole | >= 1.7.19 No longer support PHP5 since 2.0.12 Recommend 4.2.3+ |
| Laravel/Lumen | >= 5.1 Recommend 5.6+ |
Yaf的其實本質(zhì)上講,是個基礎(chǔ)框架,僅提供了一個簡單粗暴的基礎(chǔ)URI路由功能,完事了。
最關(guān)鍵是并發(fā)和多線程以及定時器等等,Yaf本身不能實現(xiàn)。
所以swoole這個時候,優(yōu)勢突顯。swoole可以以deamon形式長期穩(wěn)定的運行在server上,直接走socket,提供并發(fā)服務(wù)。
而集成了thrift后,就可以為各種其他端提供數(shù)據(jù)。比如app,web網(wǎng)頁(這個時候,可以用yaf當(dāng)作前端讀取數(shù)據(jù)提供高性能),甚至為C,c++等端進(jìn)行數(shù)據(jù)交互,非常方便。
但是Yaf是鳥哥的成名作,要用框架又要追求高性能就用Yaf吧,據(jù)說百度內(nèi)部用的也是Yaf的修改版或者thinkCMF,據(jù)說微博也用的yaf yar所以還是比較好的方案??梢杂脃af,推薦搭建hhvm或者php7 。
用你最熟悉的框架就好
高并發(fā)主要關(guān)注兩點:
1,系統(tǒng)架構(gòu)
2,業(yè)務(wù)邏輯 這個跟框架還算有點關(guān)系,不過關(guān)注點不在用什么框架
系統(tǒng)架構(gòu)
主要是考慮的負(fù)載, 網(wǎng)絡(luò)請求支持,運維輕松搞定,商量好方案,慢慢加機(jī)器就好。
業(yè)務(wù)邏輯
這塊做為開發(fā)人員,要知道業(yè)務(wù)本身壓力是在數(shù)據(jù)庫讀寫,文件讀寫
可以根據(jù)情況做緩存方案 和 異步處理方案
在真正的高并發(fā)下,程序邏輯本身和單點都會是瓶頸,做好負(fù)載均衡解決方案,才是支持無限增長高并發(fā)的終極解決方案
總結(jié)一下自己的認(rèn)識:
只在程序?qū)用婵紤]選型確實眼界不夠,因為開發(fā)、運維、業(yè)務(wù)是連在一起的。如果要求很高,可能還需要語言平臺上的考慮。
只需要考慮比較主流的框架,人民的眼睛是雪亮的。
功能和性能是互斥的,功能方面就是組件多,接口多,靈活性高,擴(kuò)展性強(qiáng),這些都需要硬件資源(cpu和內(nèi)存)來支撐的,當(dāng)然還要多點點的時間。所以很過分支版本是精簡版,可以考慮。
高并發(fā)高負(fù)載是運維上的事,程序只需要稍作配合,主要是分發(fā)和各級別的緩存。
高并發(fā)高負(fù)載是需求的一個趨勢,但對好多項目來說這個需求超前了,等項目死的時候還沒有什么人訪問。。
高并發(fā)本質(zhì)和框架是無關(guān)的。。??蚣苤皇欠庋b了一些組件,高并發(fā)還得看架構(gòu)設(shè)計,異步消息隊列怎么搞,緩存怎么搞,不能單單寄希望于框架,不然的話,最后你會發(fā)現(xiàn)加框架和不加框架會是一個效果。。
高并發(fā)的API性能取決于架構(gòu)和緩存以及數(shù)據(jù)庫!?。『涂蚣軟]任何關(guān)系?。?!
PHP 框架, 本來解決的問題就是開發(fā)效率, 相比 JAVA, C/C++ 來說, PHP 的執(zhí)行效率夠慢的, 框架還是一堆代碼構(gòu)建于 PHP 之上, 所以追求極致性能的話, 不建議用 PHP 來做。一般java、Python和go能夠很好解決異步和負(fù)載問題。
io密集型的高并發(fā)應(yīng)該用epoll模型將并發(fā)調(diào)度到io層,然后就是進(jìn)行db的設(shè)計了,理論上跟cgi關(guān)系不大了。如果你說的是CPU密集型的高并發(fā)請忽略
高性能PHP框架 Phalcon
PhalconPHP 是一個使用 C 擴(kuò)展開發(fā)的 PHP Web 框架,提供高性能和低資源占用。
Phalcon 是一個開源的、全堆棧的 PHP 5 框架,使用 C 擴(kuò)展編寫,專門為高性能優(yōu)化。無需學(xué)習(xí)和使用 C 語言,所有函數(shù)都以 PHP 類的方式曾現(xiàn)。Phalcon 是一個松耦合的框架。
使用時需在 php.ini 中添加:extension=phalcon.so
Swoole高性能網(wǎng)絡(luò)通信引擎
Swoole是一個PHP擴(kuò)展,擴(kuò)展不是為了提升網(wǎng)站的性能,是為了提升網(wǎng)站的開發(fā)效率。最少的性能損耗,換取最大的開發(fā)效率。利用Swoole擴(kuò)展,開發(fā)一個復(fù)雜的Web功能,可以在很短的時間內(nèi)完成了。
——PHP的異步、并行、高性能網(wǎng)絡(luò)通信引擎,支持TCP長連接,Websocket,Mqtt等協(xié)議。
PHP的協(xié)程高性能網(wǎng)絡(luò)通信引擎,使用C/C++語言編寫,提供了PHP語言的異步多線程服務(wù)器,異步TCP/UDP網(wǎng)絡(luò)客戶端,異步MySQL,異步Redis,數(shù)據(jù)庫連接池,AsyncTask,消息隊列,毫秒定時器,異步文件讀寫,異步DNS查詢。 Swoole內(nèi)置了Http/WebSocket服務(wù)器端/客戶端、Http2.0服務(wù)器端/客戶端。
Swoole4支持完整的協(xié)程編程模式,可以使用完全同步的代碼實現(xiàn)異步程序。PHP代碼無需額外增加任何關(guān)鍵詞,底層自動進(jìn)行協(xié)程調(diào)度,實現(xiàn)異步IO。
Swoole4協(xié)程僅支持PHP7,無法在PHP5中使用
除了異步IO的支持之外,Swoole為PHP多進(jìn)程的模式設(shè)計了多個并發(fā)數(shù)據(jù)結(jié)構(gòu)和IPC通信機(jī)制,可以大大簡化多進(jìn)程并發(fā)編程的工作。其中包括了并發(fā)原子計數(shù)器,并發(fā)HashTable,Channel,Lock,進(jìn)程間通信IPC等豐富的功能特性。
Swoole可以廣泛應(yīng)用于互聯(lián)網(wǎng)、移動通信、企業(yè)軟件、網(wǎng)絡(luò)游戲、物聯(lián)網(wǎng)、車聯(lián)網(wǎng)、智能家庭等領(lǐng)域。 使用PHP + Swoole作為網(wǎng)絡(luò)通信框架,可以使企業(yè)IT研發(fā)團(tuán)隊的效率大大提升,更加專注于開發(fā)創(chuàng)新產(chǎn)品。
Swoole是開源免費的自由軟件,授權(quán)協(xié)議是Apache2.0,企業(yè)和個人開發(fā)者均可免費使用,并且在Swoole之上所作的修改可用于商業(yè)產(chǎn)品,無需開源(注:必須保留原作者的版權(quán)聲明)。
Swoole不是一個像Zend Framework、CakePHP、Yii、symfony、ThinkPHP等一樣的框架,也不是一個像WordPress、Drupal、Discuz、UChome等開源產(chǎn)品看齊的項目。 Swoole的目標(biāo)是向Java框架、Ruby On Rails、Python Django Pylons等一流框架發(fā)起挑戰(zhàn)。
運行環(huán)境:Linux Windows Mac FreeBSD Unix
PHP版本支持:PHP5.3+
支持的數(shù)據(jù)庫:MS SQL Server、MySQL、IBM DB2、Oracle、Interbase 、SQLite、PostgreSQL、ODBC
支持的運行方式:Web、Cli命令行腳本、PHP-GTK GUI。
PHP四大主流框架的優(yōu)缺點總結(jié)
ThinkPHP
ThinkPHP(FCS)是一個輕量級的中型框架,是從Java的Struts結(jié)構(gòu)移植過來的中文PHP開發(fā)框架。它使用面向?qū)ο蟮拈_發(fā)結(jié)構(gòu)和MVC模式,并且模擬實現(xiàn)了Struts的標(biāo)簽庫,各方面都比較人性化,熟悉J2EE的開發(fā)人員相對比較容易上手,適合php框架初學(xué)者。 ThinkPHP的宗旨是簡化開發(fā)、提高效率、易于擴(kuò)展,其在對數(shù)據(jù)庫的支持方面已經(jīng)包括MySQL、MSSQL、Sqlite、PgSQL、 Oracle,以及PDO的支持。ThinkPHP有著豐富的文檔和示例,框架的兼容性較強(qiáng),但是其功能有限,因此更適合用于中小項目的開發(fā)。
優(yōu)點:
1.易于上手,有豐富的中文文檔;
2.框架的兼容性較強(qiáng),PHP4和PHP5完全兼容、完全支持UTF8等。
- 適合用于中小項目的開發(fā)
缺點:
1.對Ajax的支持不是很好;
2.目錄結(jié)構(gòu)混亂,需要花時間整理;
3.上手容易,但是深入學(xué)習(xí)較難。
Yii
Yii 是一個基于組件的高性能php框架,用于開發(fā)大型Web應(yīng)用。Yii采用嚴(yán)格的OOP編寫,并有著完善的庫引用以及全面的教程。從 MVC,DAO/ActiveRecord,widgets,caching,等級式RBAC,Web服務(wù),到主題化,I18N和L10N,Yii提供了 今日Web 2.0應(yīng)用開發(fā)所需要的幾乎一切功能。事實上,Yii是最有效率的PHP框架之一。
優(yōu)點:
純OOP
用于大規(guī)模Web應(yīng)用
模型使用方便
開發(fā)速度快,運行速度也快。性能優(yōu)異且功能豐富
使用命令行工具。
缺點:
對Model層的指導(dǎo)和考慮較少
文檔實例較少
英文太多
要求PHP技術(shù)精通,OOP編程要熟練!
View并不是理想view,理想中的view可能只是html代碼,不會涉及PHP代碼。
CodeIgniter
優(yōu)點:
Code Igniter推崇“簡單就是美”這一原則。沒有花哨的設(shè)計模式、沒有華麗的對象結(jié)構(gòu),一切都是那么簡單。幾行代碼就能開始運行,再加幾 行代碼就可以進(jìn)行輸出??芍^是“大道至簡”的典范。 配置簡單,全部的配置使用PHP腳本來配置,執(zhí)行效率高;具有基本的路由功能,能夠進(jìn)行一定程度的路 由;具有初步的Layout功能,能夠制作一定程度的界面外觀;數(shù)據(jù)庫層封裝的不錯,具有基本的MVC功能. 快速簡潔,代碼不多,執(zhí)行性能高,框架簡 單,容易上手,學(xué)習(xí)成本低,文檔詳細(xì);自帶了很多簡單好用的library,框架適合小型應(yīng)用.
缺點:
本身的實現(xiàn)不太理想。內(nèi)部結(jié)構(gòu)過于混亂,雖然簡單易用,但缺乏擴(kuò)展能力。 把Model層簡單的理解為數(shù)據(jù)庫操作. 框架略顯簡單,只能夠滿足小型應(yīng)用,略微不太能夠滿足中型應(yīng)用需要.
評價:
總體來說,拿CodeIgniter來完成簡單快速的應(yīng)用還是值得,同時能夠構(gòu)造一定程度的layout,便于模板的復(fù)用,數(shù)據(jù)操作層來說封裝的不 錯,并且CodeIgniter沒有使用很多太復(fù)雜的設(shè)計模式,執(zhí)行性能和代碼可讀性上都不錯。至于附加的library 也還不錯,簡潔高效。
Lavarel 框架
優(yōu)點:
Laravel 的設(shè)計思想是很先進(jìn)的,非常適合應(yīng)用各種開發(fā)模式TDD, DDD 和BDD,作為一個框
架,它準(zhǔn)備好了一切,composer 是個php 的未來,沒有composer,PHP 肯定要走向沒落。
laravel 最大的特點和優(yōu)秀之處就是集合了php 比較新的特性,以及各種各樣的設(shè)計模式,
Ioc 容器,依賴注入等。
缺點:
基于組件式的框架,所以比較臃腫