最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP 超高性能可擴(kuò)展HTTP服務(wù)框架Webman

 更新時(shí)間:2024年02月05日 11:20:05   作者:開(kāi)源技術(shù)小棧  
本文主要介紹了超高性能可擴(kuò)展HTTP服務(wù)框架Webman,webman用于替代傳統(tǒng)的php-fpm架構(gòu),提供超高性能可擴(kuò)展的HTTP服務(wù),感興趣的可以了解一下

webman是什么?

webman是一款基于workerman開(kāi)發(fā)的高性能HTTP服務(wù)框架。webman用于替代傳統(tǒng)的php-fpm架構(gòu),提供超高性能可擴(kuò)展的HTTP服務(wù)。你可以用webman開(kāi)發(fā)網(wǎng)站,也可以開(kāi)發(fā)HTTP接口或者微服務(wù)。

除此之外,webman還支持自定義進(jìn)程,可以做workerman能做的任何事情,例如websocket服務(wù)、物聯(lián)網(wǎng)、游戲、TCP服務(wù)、UDP服務(wù)、unix socket服務(wù)等等。

webman理念

以最小內(nèi)核提供最大的擴(kuò)展性與最強(qiáng)的性能。

webman僅提供最核心的功能(路由、中間件、session、自定義進(jìn)程接口)。其余功能全部復(fù)用composer生態(tài),這意味著你可以在webman里使用最熟悉的功能組件,例如在數(shù)據(jù)庫(kù)方面開(kāi)發(fā)者可以選擇使用Laravel的illuminate/database,也可以是ThinkPHP的ThinkORM,還可以是其它組件如Medoo。在webman里集成他們是非常容易的事情。

webman特點(diǎn)

1、高穩(wěn)定性。webman基于workerman開(kāi)發(fā),workerman一直是業(yè)界bug極少的高穩(wěn)定性socket框架。

2、超高性能。webman性能高于傳統(tǒng)php-fpm框架10-100倍左右,比go的gin echo等框架性能高一倍左右。

3、高復(fù)用。無(wú)需修改,可以復(fù)用絕大部分composer組件及類(lèi)庫(kù)。

4、高擴(kuò)展性。支持自定義進(jìn)程,可以做workerman能做的任何事情。

5、超級(jí)簡(jiǎn)單易用,學(xué)習(xí)成本極低,代碼書(shū)寫(xiě)與傳統(tǒng)框架沒(méi)有區(qū)別。

6、使用最為寬松友好的MIT開(kāi)源協(xié)議。

webman性能

傳統(tǒng)框架請(qǐng)求處理流程

  • nginx/apache接收請(qǐng)求

  • nginx/apache將請(qǐng)求傳遞給php-fpm

  • php-fpm初始化環(huán)境,如創(chuàng)建變量列表

  • php-fpm調(diào)用各個(gè)擴(kuò)展/模塊的RINIT

  • php-fpm磁盤(pán)讀取php文件(使用opcache可避免)

  • php-fpm詞法分析、語(yǔ)法分析、編譯成opcode(使用opcache可避免)

  • php-fpm執(zhí)行opcode 包括 8.9.10.11

  • 框架初始化,如實(shí)例化各種類(lèi),包括如容器、控制器、路由、中間件等。

  • 框架連接數(shù)據(jù)庫(kù)并權(quán)限驗(yàn)證,連接redis

  • 框架執(zhí)行業(yè)務(wù)邏輯

  • 框架關(guān)閉數(shù)據(jù)庫(kù)、redis連接

  • php-fpm釋放資源、銷(xiāo)毀所有類(lèi)定義、實(shí)例、銷(xiāo)毀符號(hào)表等

  • php-fpm順序調(diào)用各個(gè)擴(kuò)展/模塊的RSHUTDOWN方法

  • php-fpm將結(jié)果轉(zhuǎn)發(fā)給nginx/apache

  • nginx/apache將結(jié)果返回給客戶(hù)端

webman的請(qǐng)求處理流程

  • 框架接收請(qǐng)求

  • 框架執(zhí)行業(yè)務(wù)邏輯

  • 框架將結(jié)果返回給客戶(hù)端

注意:沒(méi)錯(cuò),在沒(méi)有nginx反代的情況下,框架只有這3步。可以說(shuō)這已經(jīng)是php框架的極致,這使得webman性能是傳統(tǒng)框架的幾倍甚至數(shù)十倍。

傳統(tǒng)的 FPM/Apache 的 PHP 應(yīng)用性能無(wú)法與 Java、Golang 等應(yīng)用抗衡, 主要有兩點(diǎn)原因:

短生命周期,每次請(qǐng)求都會(huì)重復(fù)的初始化/銷(xiāo)毀很多內(nèi)存結(jié)構(gòu)。

傳統(tǒng)的 PHP 應(yīng)用都是阻塞IO的,在高并發(fā)下大量的CPU浪費(fèi)在進(jìn)程上下文切換。

與go語(yǔ)言的web框架性能比對(duì)

帶數(shù)據(jù)庫(kù)查詢(xún)業(yè)務(wù),webman比同類(lèi)型go語(yǔ)言的web框架性能高一倍左右。以上數(shù)據(jù)來(lái)自techempower.com

壓力測(cè)試

壓測(cè)結(jié)果受到哪些因素影響?

  • 壓力機(jī)到服務(wù)器的網(wǎng)絡(luò)延遲 (建議內(nèi)網(wǎng)或本機(jī)壓測(cè))

  • 壓力機(jī)到服務(wù)器的帶寬 (建議內(nèi)網(wǎng)或本機(jī)壓測(cè))

  • 是否開(kāi)啟HTTP keep-alive (建議開(kāi)啟)

  • 并發(fā)數(shù)是否足夠 (外網(wǎng)壓測(cè)要盡量開(kāi)啟更大的并發(fā))

  • 服務(wù)端進(jìn)程數(shù)是否合理 (helloworld業(yè)務(wù)進(jìn)程數(shù)建議與cpu數(shù)相同,數(shù)據(jù)庫(kù)業(yè)務(wù)進(jìn)程數(shù)建議為cpu的四倍及以上)

  • 業(yè)務(wù)自身性能 (例如是否使用了外網(wǎng)數(shù)據(jù)庫(kù))

HTTP keep-alive是什么?

HTTP Keep-Alive機(jī)制是一種用于在單個(gè)TCP連接上發(fā)送多個(gè)HTTP請(qǐng)求和響應(yīng)的技術(shù),它對(duì)于性能測(cè)試結(jié)果影響很大,關(guān)閉keep-alive后QPS可能成倍下降。

目前瀏覽器都是默認(rèn)開(kāi)啟keep-alive的,也就是瀏覽器訪(fǎng)問(wèn)某一個(gè)http地址后會(huì)將連接暫時(shí)保留不關(guān)閉,下一次請(qǐng)求時(shí)復(fù)用這個(gè)連接,用來(lái)提高性能。 壓測(cè)時(shí)建議開(kāi)啟keep-alive。

壓測(cè)時(shí)如何開(kāi)啟HTTP keep-alive?

如果是用的ab程序壓測(cè)需要加-k參數(shù),例如 ab -n100000 -c200 -k http://127.0.0.1:8787/。 apipost需要在返回頭中返回gzip頭才能開(kāi)啟keep-alive(apipost的bug,參考下面)。 其它壓測(cè)程序一般會(huì)默認(rèn)開(kāi)啟。

為什么通過(guò)外網(wǎng)壓測(cè)QPS很低?

外網(wǎng)延遲很大導(dǎo)致QPS很低,是正?,F(xiàn)象。例如壓測(cè)baidu頁(yè)面QPS可能只有幾十。建議內(nèi)網(wǎng)或者本機(jī)壓測(cè),排除網(wǎng)絡(luò)延遲影響。如果一定要在外網(wǎng)壓測(cè),可以通過(guò)增加并發(fā)數(shù)來(lái)增加吞吐量(需保證帶寬充足)。

為什么經(jīng)過(guò)nginx代理后性能下降?

nginx運(yùn)行需要消耗系統(tǒng)資源。同時(shí),nginx和webman之間的通訊也需要消耗一定的資源。然而,系統(tǒng)的資源是有限的,webman無(wú)法獲取到所有的系統(tǒng)資源,因此,整個(gè)系統(tǒng)的性能可能會(huì)有所下降是正?,F(xiàn)象。

為了盡可能減少nginx代理帶來(lái)的性能影響,可以考慮關(guān)閉nginx日志(access_log off;),開(kāi)啟nginx到webman之間的keep-alive,參考nginx代理。

另外https和http相比會(huì)損耗更多資源,因?yàn)閔ttps需要進(jìn)行SSL/TLS握手,數(shù)據(jù)加密解密,包的尺寸變大占用更多帶寬,這些會(huì)導(dǎo)致性能下降。

壓測(cè)如果用的是短鏈接(不開(kāi)啟HTTP keep-alive),每次請(qǐng)求都需要額外的SSL/TLS握手通訊,性能會(huì)大幅降低。建議壓測(cè)https開(kāi)啟HTTP keep-alive。

如何知道系統(tǒng)已經(jīng)達(dá)到性能極限?

一般來(lái)說(shuō)CPU達(dá)到100%時(shí)說(shuō)明系統(tǒng)性能已經(jīng)達(dá)到極限。如果CPU還有空閑說(shuō)明還沒(méi)達(dá)到極限,這時(shí)候可以適當(dāng)增加并發(fā)提高QPS。

如果增加并發(fā)無(wú)法提高QPS則可能是webman進(jìn)程數(shù)不夠,請(qǐng)適當(dāng)增加webman進(jìn)程。如果仍然無(wú)法提高考慮帶寬是否足夠。

壓測(cè)命令示例

ab

# 100000請(qǐng)求 200并發(fā) 開(kāi)啟keep-alive
ab -n100000 -c200 -k http://127.0.0.1:8787/

# 100000請(qǐng)求 200并發(fā) 未開(kāi)啟keep-alive
ab -n100000 -c200 http://127.0.0.1:8787/

wrk

# 200 并發(fā)壓測(cè)10秒 開(kāi)啟keep-alive(默認(rèn))
wrk -c 200 -d 10s http://example.com

到此這篇關(guān)于PHP 超高性能可擴(kuò)展HTTP服務(wù)框架Webman的文章就介紹到這了,更多相關(guān)Webman框架內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

最新評(píng)論

博兴县| 天祝| 乌审旗| 阿坝| 息烽县| 巩义市| 大厂| 大足县| 鄂伦春自治旗| 霸州市| 乃东县| 二连浩特市| 左云县| 建始县| 德江县| 新宾| 襄垣县| 肥东县| 两当县| 遂昌县| 雅江县| 勐海县| 汾阳市| 西峡县| 增城市| 岳阳县| 赫章县| 兴仁县| 红原县| 盐边县| 梁平县| 武穴市| 广水市| 如东县| 手游| 顺义区| 河北省| 勐海县| 太康县| 胶南市| 商丘市|