PHP高性能應(yīng)用服務(wù)器roadrunner
對(duì)于php很多人對(duì)它又愛(ài)又恨,喜歡它的簡(jiǎn)潔,入門上手快,討厭它的性能不夠高。雖然php一直在努力提升自己的性能,并且php7在性能上得到了大幅的提升,但是因?yàn)槭悄_本語(yǔ)言,因?yàn)槊看螆?zhí)行都需要進(jìn)行解釋,所以php在性能上和編譯語(yǔ)言還是有很大的差距的。
如果php可以每次執(zhí)行不需要重新進(jìn)行解釋,如果php可以讓進(jìn)程常駐內(nèi)存,那么是不是php的性能會(huì)得到大幅提升呢,答案是肯定的,而且現(xiàn)實(shí)中已經(jīng)有解決方案出現(xiàn),它就是現(xiàn)在很多追求性能的php公司都在使用的swoole擴(kuò)展,有了swoole,php可以常駐內(nèi)存,可以直接處理web響應(yīng)請(qǐng)求,php的性能得到巨大提升。
傳統(tǒng)運(yùn)行方式
我們知道傳統(tǒng)的php運(yùn)行方式是通過(guò)php-fpm進(jìn)行管理,然后和nginx進(jìn)行通訊,nginx負(fù)責(zé)處理靜態(tài)資源,而php動(dòng)態(tài)內(nèi)容的處理由nginx分配給php-fpm進(jìn)行處理,而php-fpm選擇相應(yīng)的php進(jìn)程進(jìn)行處理,返回結(jié)果。
roadrunnner運(yùn)行模式
不同于傳統(tǒng)的運(yùn)行模式,roadrunner運(yùn)行模式相當(dāng)于把nginx和php-fpm進(jìn)行了整合,所有的請(qǐng)求直接交給roadrunner進(jìn)行處理,而php進(jìn)程負(fù)責(zé)和roadrunner進(jìn)行通訊。
roadrunner是由golang開(kāi)發(fā)的,我們都知道golang提供了gorutine,它只需要很小的內(nèi)存就可以啟動(dòng)非常多的協(xié)程,這對(duì)于并發(fā)非常有幫助,而使用了roadrunner作為php的服務(wù)器,php又在性能上得到了大幅提升。
roadrunner的優(yōu)點(diǎn)
- 支持?jǐn)U展
- 支持http2
- 跨平臺(tái)
- 高性能
- 安裝簡(jiǎn)單
- 支持隊(duì)列
- 支持grpc
性能對(duì)比
雖然roadrunner一定程度上提升了php的并發(fā)性,但是和golang以及swoole相比還是有很大的差距的,下面的圖表我們可以看出來(lái),swoole在性能上對(duì)php的提升是非常巨大的。
總結(jié)
既然單純的roadunner還是無(wú)法滿足我們對(duì)性能的要求,那么我們就可以使用swoole+roadrunner的組合來(lái)提升我們應(yīng)用程序的性能。
很多時(shí)候總有人在說(shuō)php是不是過(guò)時(shí)了,php是不是要消亡了,php是不是沒(méi)有學(xué)習(xí)的必要了,我想說(shuō)的是,從目前來(lái)看,php的社區(qū)依然在發(fā)展,php的技術(shù)大會(huì)依然每年都會(huì)召開(kāi),php的版本依然每年都有新的迭代。
一門語(yǔ)言停止前行的唯一原因就是它自己放棄了自己,而php它沒(méi)有放棄自己,它一直在努力改變著自己。有人會(huì)說(shuō)php一直在抄襲模仿,沒(méi)有自己的創(chuàng)新,我們說(shuō)的是,一個(gè)肯不斷接受新知識(shí)的語(yǔ)言永遠(yuǎn)不會(huì)過(guò)時(shí)。