欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

webman是什么?

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

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

webman理念

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

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

webman特點

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

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

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

4、高擴展性。支持自定義進程,可以做workerman能做的任何事情。

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

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

webman性能

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

  • nginx/apache接收請求

  • nginx/apache將請求傳遞給php-fpm

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

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

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

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

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

  • 框架初始化,如實例化各種類,包括如容器、控制器、路由、中間件等。

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

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

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

  • php-fpm釋放資源、銷毀所有類定義、實例、銷毀符號表等

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

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

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

webman的請求處理流程

  • 框架接收請求

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

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

注意:沒錯,在沒有nginx反代的情況下,框架只有這3步??梢哉f這已經(jīng)是php框架的極致,這使得webman性能是傳統(tǒng)框架的幾倍甚至數(shù)十倍。

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

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

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

與go語言的web框架性能比對

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

壓力測試

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

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

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

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

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

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

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

HTTP keep-alive是什么?

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

目前瀏覽器都是默認開啟keep-alive的,也就是瀏覽器訪問某一個http地址后會將連接暫時保留不關(guān)閉,下一次請求時復(fù)用這個連接,用來提高性能。 壓測時建議開啟keep-alive。

壓測時如何開啟HTTP keep-alive?

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

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

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

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

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

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

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

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

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

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

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

壓測命令示例

ab

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

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

wrk

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

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

相關(guān)文章

最新評論