知識
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!
您當(dāng)前位置>首頁 » 新聞資訊 » 網(wǎng)站建設(shè) >
PHP開發(fā)web程序的兩種模式
發(fā)表時間:2017-7-16
發(fā)布人:葵宇科技
瀏覽次數(shù):39
本文適合對PHP web開發(fā)比較感興趣的同學(xué)閱讀,需要具備一定的web后臺開發(fā)經(jīng)驗。
一、背景
從執(zhí)行流程上來看,所有程序可以分為同步程序和異步程序。眾所周知,同步程序流程清晰,開發(fā)友好,容易上手,相比之下異步程序的優(yōu)點在于程序并發(fā)度高,資源能夠得到充分利用。于是出現(xiàn)了一些基于協(xié)程調(diào)度的框架,兼具同步程序和異步程序的優(yōu)點。對應(yīng)到PHP領(lǐng)域,除了傳統(tǒng)的LAMP/LNMP同步開發(fā)模式,還出現(xiàn)了類似swoole的異步協(xié)程開發(fā)模式。本文通過對兩種開發(fā)模式進行比較,旨在說明二者實現(xiàn)上的異同,供廣大PHP程序員參考。
二、LAMP/LNMP
一直以來,PHP web開發(fā)采用LAMP/LNMP架構(gòu),即Linux、Nginx,Mysql和PHP。搭建的環(huán)境大同小異,大致結(jié)構(gòu)為:
當(dāng)請求進入時,web server將請求轉(zhuǎn)交給PHP-FPM,PHP-FPM是一個進程池架構(gòu)的FastCGI服務(wù),內(nèi)置PHP解釋器。FPM負(fù)責(zé)解釋執(zhí)行PHP文件生成響應(yīng),最終返回給web server,展現(xiàn)至前端。PHP文件中實現(xiàn)了許多業(yè)務(wù)邏輯,包括Mysql和Nosql的訪問,調(diào)用第三方應(yīng)用等等。
由圖可見,從請求到響應(yīng),整個處理流程十分清晰,層次結(jié)構(gòu)也很明顯,大致分為接入層,邏輯層和數(shù)據(jù)訪問層。但是這個架構(gòu)的缺點也很明顯,主要包括:
-
FPM進程池中進程數(shù)目有限,在高并發(fā)場景下處理能力可能會受進程數(shù)目和系統(tǒng)其他資源的限制
-
當(dāng)后端PHP程序長時間阻塞時,會掛起整個PHP-FPM進程
-
每次請求處理的過程都意味著一次PHP文件解析,環(huán)境設(shè)置等不必要的耗時操作
-
PHP進程處理完即銷毀,無法在PHP程序中使用連接池等技術(shù)實現(xiàn)性能優(yōu)化
-
......
針對上述問題,LAMP/LNMP架構(gòu)做了許多優(yōu)化和調(diào)整,比如:
-
設(shè)置超時時間防止FPM假死
-
利用Opcache擴展避免PHP文件的重復(fù)解析和加載
-
采用本地代理的方式實現(xiàn)降低建立連接的開銷
-
......
三、Swoole
針對LAMP/LNMP架構(gòu)的問題,swoole從PHP擴展出發(fā),解決了上述問題,其采用的進程模型為:
Swoole底層使用多進程架構(gòu),Master-Manager-Worker。
-
Master進程內(nèi)置多個Reactor線程進行網(wǎng)絡(luò)收發(fā)包,當(dāng)收到完整的請求之后,其將請求轉(zhuǎn)交給Worker進程執(zhí)行業(yè)務(wù)邏輯。
-
Manager進程由Master進程派生而成,主要負(fù)責(zé)Worker進程的創(chuàng)建和銷毀類工作。
-
Worker進程執(zhí)行PHP業(yè)務(wù)邏輯代碼,生成響應(yīng)后發(fā)送至Master進程的Reactor線程,最終展現(xiàn)至前端。
-
進程模型中還包括taskWorker,主要執(zhí)行一些額外的耗時task任務(wù)等。
相比于LAMP/LNMP,Swoole進程模型最大的特點在于其多線程Reactor模式處理網(wǎng)絡(luò)請求,使得其能輕松應(yīng)對C10k連接。除此之外的優(yōu)點還包括:
-
全異步非阻塞,占用資源開銷小,程序執(zhí)行效率高
-
程序運行只解析加載一次PHP文件,避免每次請求的重復(fù)加載
-
進程常駐,使得連接池和請求之間信息傳遞等的實現(xiàn)成為可能
-
......
Swoole在擴展層面實現(xiàn)異步非阻塞操作,提供給PHP回調(diào)的操作接口。由于回調(diào)寫法嵌套較深,邏輯混亂,現(xiàn)有的基于Swoole的PHP框架多數(shù)采用yield協(xié)程調(diào)度的方式實現(xiàn),這樣就可以用同步的代碼寫法來達到異步的效果,典型實現(xiàn)如ZanPHP框架。
當(dāng)然,協(xié)程的寫法也并不是沒有代價,開發(fā)者需要更多地了解一些底層的原理實現(xiàn),相比LAMP/LNMP來說對于開發(fā)者的門檻較高。
四、總結(jié)
綜合以上區(qū)別,筆者建議,在簡單的http server開發(fā)場景下,優(yōu)先采用LAMP/LNMP架構(gòu),更加專注于業(yè)務(wù)邏輯實現(xiàn)。在高并發(fā)或?qū)τ谛阅鼙容^關(guān)注的場景,或者需要實現(xiàn)類似tcp server,RPC服務(wù),SOA服務(wù)等情形下,建議使用基于swoole的協(xié)程調(diào)度框架,如ZanPHP等。
想要獲取最新技術(shù)文章?歡迎訂閱微信公眾號----軟件編程之路,鼓勵作者持續(xù)寫作。
相關(guān)案例查看更多
相關(guān)閱讀
- 云南網(wǎng)站建設(shè)百度官方
- 汽車報廢回收管理軟件
- 云南網(wǎng)站建設(shè)服務(wù)公司
- 高端網(wǎng)站建設(shè)公司
- 英文網(wǎng)站建設(shè)公司
- 報廢車拆解回收管理系統(tǒng)
- 云南小程序開發(fā)報價
- 小程序定制開發(fā)
- 昆明小程序開發(fā)聯(lián)系方式
- 云南企業(yè)網(wǎng)站
- 昆明軟件定制公司
- 文山小程序開發(fā)
- 云南網(wǎng)站建設(shè)哪家好
- 昆明小程序公司
- 網(wǎng)站建設(shè)百度官方
- 網(wǎng)絡(luò)公司電話
- 百度快速排名
- 小程序開發(fā)公司
- 云南網(wǎng)站建設(shè)公司地址
- 網(wǎng)站制作
- 網(wǎng)站建設(shè)靠譜公司
- 云南小程序代建
- 云南網(wǎng)站建設(shè)外包
- 軟件定制
- 云南網(wǎng)站維護
- 汽車報廢拆解管理系統(tǒng)
- 網(wǎng)站建設(shè)列表網(wǎng)
- 云南軟件公司
- 汽車報廢軟件
- 網(wǎng)站建設(shè)公司地址