Shadowfax: 讓Laravel佩上Swoole之劍

Swoole可以說是PHP的一把利劍瘩欺,它拓展了PHP的邊界必盖,讓眾多PHPer們看到了高并發(fā)的曙光。利用Swoole來提高Laravel的性能俱饿,是一件非常值得投入的事情歌粥,這樣既能獲得Swoole的高性能,又兼顧了Laravel的高效率拍埠,兩全其美失驶。Shadowfax就是一款這樣的拓展包,它簡單易用枣购,能夠幫助開發(fā)者快速地將Laravel應用遷移到Swoole之上運行突勇。

首先我們來看一下使用Shadowfax運行的Laravel應用的性能表現(xiàn):

我使用wrk作為此次的benchmark工具,基于最新版的Laravel 7坷虑,但是移除了session相關的middleware甲馋。因為Laravel默認是啟用了session的,而且session的驅(qū)動是file迄损,如果在這種情況下去跑測試定躏,每個請求都會創(chuàng)建一個session文件,這樣跑出來的結果就沒什么意義了芹敌。(追求性能的應用也不應該去使用file作為session驅(qū)動)

環(huán)境1:

  • 硬件: 1 CPU, 4 Cores, 16GB Memory
  • MacOS 10.15.3
  • PHP 7.3.12(啟用opcache)
  • Swoole 4.4.13
  • Shadowfax 2(20個worker進程)

這個環(huán)境也就是我個人的Macbook Pro痊远,性能比較好。我用wrk啟動4個線程氏捞,并發(fā)200進行壓測:

wrk -t4 -c200 http://127.0.0.1:1215/

結果為 12430 rps

Running 10s test @ http://127.0.0.1:1215/
  4 threads and 200 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    26.44ms   31.44ms 212.73ms   84.28%
    Req/Sec     3.13k   839.99     6.07k    65.75%
  124418 requests in 10.01s, 312.06MB read
  Socket errors: connect 0, read 54, write 0, timeout 0
Requests/sec:  12430.20
Transfer/sec:     31.18MB

環(huán)境2:

  • 硬件: 2 CPUs, 2 Cores, 4GB Memory
  • CentOS 7.5.1804
  • PHP 7.3.16(啟用opcache)
  • Swoole 4.4.17
  • Shadowfax 2(10個worker進程)

這個環(huán)境是某云的一個虛擬云服務器實例碧聪,配置一般。我用wrk啟動2個線程液茎,并發(fā)100進行壓測:

wrk -c100 http://127.0.0.1:1215/

結果為 4001 rps

Running 10s test @ http://127.0.0.1:1215/
  2 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    25.06ms   12.11ms  85.92ms   60.94%
    Req/Sec     4.02k    41.46     4.08k    79.79%
  40321 requests in 10.08s, 101.13MB read
Requests/sec:   4001.76
Transfer/sec:     10.04MB

性能表現(xiàn)還不錯吧逞姿?比起傳統(tǒng)的PHP-FPM辞嗡,已經(jīng)有了巨大的提升。

安裝與使用

Shadowfax的安裝非常簡單滞造,只需要兩個步驟即可搞定:

第一步续室,使用Composer將Shadowfax安裝到你的Laravel項目中去:

composer require huang-yi/shadowfax

第二步,使用Laravel的Artisan命令shadowfax:publish來發(fā)布配置文件:

php artisan shadowfax:publish

執(zhí)行完后谒养,在你的項目根目錄就會創(chuàng)建一個名為shadowfax.yml的配置文件挺狰,你需要根據(jù)環(huán)境進行調(diào)整。當然這個文件會被自動添加到.gitignore中去买窟,就像.env文件一樣丰泊,在不同的環(huán)境下配置可能是不一樣的。

現(xiàn)在就可以通過Shadowfax命令來啟動你的服務:

php shadowfax start

假如是默認配置的話始绍,就可以通過http://127.0.0.1:1215訪問你的應用了瞳购。當然,這只是簡單的使用疆虚,更多的信息可前往Shadowfax項目主頁查看。

為什么選擇Shadowfax

當然满葛,有些朋友會問径簿,Github上面已經(jīng)有類似的開源項目了,為什么還要重復造一個輪子嘀韧。其實不然篇亭,早在2016年我就開始嘗試整合Swoole和Laravel了,先后也開源了兩個相關的項目锄贷,目前這方面star數(shù)最高的 swooletw/laravel-swoole 就是fork了我早先發(fā)布的 huang-yi/laravel-swoole-http译蒂。但我并沒有對自己的項目進行推廣,因為我很清楚谊却,之前的項目或多或少都存在一些問題柔昼,并且不能很好地支持協(xié)程,而協(xié)程恰好又是Swoole最強的武器炎辨,所以都放棄了捕透。

現(xiàn)在,Shadowfax已經(jīng)可以很好地支持協(xié)程了碴萧,你可以放心地開啟Swoole的協(xié)程特性乙嘀。并且,Shadowfax還解決了協(xié)程環(huán)境下數(shù)據(jù)庫連接的問題破喻,當你啟用Swoole的一鍵協(xié)程化后虎谢,Shadowfax會自動為你的數(shù)據(jù)庫連接創(chuàng)建連接池。最重要的是曹质,這一切在你的應用代碼層面都是無感的婴噩,你還是像往常一樣去寫業(yè)務代碼擎场,完全不要有心智負擔,因為Shadowfax不需要你對寫代碼的方式做出任何改變讳推。

最后我想說明的是顶籽,Shadowfax并沒有去刻意賦予Laravel使用Swoole的能力,它的主要目的是:在不破壞Laravel開發(fā)體驗的前提下银觅,以最小的成本提升Laravel應用的性能礼饱。我也不建議開發(fā)者在Laravel中使用Swoole的任何接口,因為Laravel本身是一個傳統(tǒng)PHP模式下運行的框架究驴,對Swoole并不友好镊绪,如果你不是一個資深的Swoole開發(fā)者,很容易在使用過程中出錯洒忧。如果你的Laravel應用里未使用任何Swoole接口蝴韭,這意味著你的程序在PHP-FPM模式下也是能運行的,一旦運行在Swoole上面的程序出了問題熙侍,我們便能立馬切回PHP-FPM模式榄鉴,這樣可以保證程序的可用性。

如果你對 Shadowfax 感興趣蛉抓,歡迎前往Github點上一個star以表支持庆尘。

我是黃毅,歡迎關注我的 Github博客巷送。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末驶忌,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子笑跛,更是在濱河造成了極大的恐慌付魔,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件飞蹂,死亡現(xiàn)場離奇詭異几苍,居然都是意外死亡,警方通過查閱死者的電腦和手機陈哑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門擦剑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人芥颈,你說我怎么就攤上這事惠勒。” “怎么了爬坑?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵纠屋,是天一觀的道長。 經(jīng)常有香客問我盾计,道長售担,這世上最難降的妖魔是什么赁遗? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮族铆,結果婚禮上岩四,老公的妹妹穿的比我還像新娘。我一直安慰自己哥攘,他們只是感情好剖煌,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著逝淹,像睡著了一般耕姊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上栅葡,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天茉兰,我揣著相機與錄音,去河邊找鬼欣簇。 笑死规脸,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的熊咽。 我是一名探鬼主播莫鸭,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼网棍!你這毒婦竟也來了黔龟?” 一聲冷哼從身側響起妇智,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤滥玷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后巍棱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惑畴,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荚板。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡培遵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赡茸,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布楣富,位于F島的核電站,受9級特大地震影響伴榔,放射性物質(zhì)發(fā)生泄漏纹蝴。R本人自食惡果不足惜庄萎,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望塘安。 院中可真熱鬧糠涛,春花似錦、人聲如沸兼犯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽免都。三九已至锉罐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绕娘,已是汗流浹背脓规。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留险领,地道東北人侨舆。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像绢陌,于是被迫代替她去往敵國和親挨下。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349