使用Swoole 來加速你的Laravel 應用

blank

使用Swoole 來加速你的Laravel 應用

Swoole是為PHP開發的生產級異步編程框架。他是一個純C 開發的擴展, 他允許PHP 開發者在PHP 中寫高性能,可擴展的並發TCP, UDP, Unix socket, HTTP, WebSocket 服務, 而不需要擁有太多的非阻塞I/O 編程和低級別的Linux 內核知識。你可以把Swoole 想像成NodeJS, 但對於PHP 來說將有更高性能。

為什麼要在Swoole 上運行Laravel?

下圖展示了PHP 的生命週期。正如你所看到的那樣,當你每次運行PHP 腳本的時候,PHP都需要初始化模塊並為你的運行環境啟動Zend引擎。並且將PHP 腳本編譯為OpCodes 以便Zend引擎執行。

但是, 這樣的生命週期需要在每次請求的時候都執行一遍。因為單個請求創建的環境在請求執行結束後會立即銷毀。

換句話說, 在傳統的PHP 生命週期中, 為了腳本執行而浪費了大量的時間去創建和銷毀資源。想像一下像Laravel 這樣的框架, 在每次請求中需要加載多少文件? 同時也浪費了大量的I/O 操作

blankblank

因此如果我們利用Swoole 內置一個應用級別的Server, 並且所有腳本文件在加載一次之後便可以保存在內存中呢?這就是為什麼我們需要嘗試在Swoole 上運行Laravel。 Swoole 可以提供強大性能而Laravel 則可以提供優雅代碼結構使用。這倆兒真是完美組合!

安裝

以下是swooletw/laravel-swoole的主要特點:

  • 在Swoole 運行Laravel/Lumen 應用

  • 出色的性能提升至30x

  • 沙盒模式隔離應用程序容器

  • 支持在Laravel 應用中運行WebSocket 服務器

  • 支持Socket.io協議

  • 支持Swoole 表跨進程共享

使用Composer 安裝:

$ composer require swooletw/laravel-swoole

這個包依賴於Swoole 。在使用這個包之前,請確保你的機器安裝了正確的Swoole 。使用下面的命令快速安裝(linux):

pecl install swoole

在安裝這個擴展之後,你需要編輯php.ini添加extension=swoole.so

php -i | grep php.ini # check the php.ini file location sudo echo "extension=swoole.so" > php.ini # add the extension=swoole.so to the end of php.ini php -m | grep swoole # check if the swoole extension has been enabled

訪問官網獲取更多的訊息。
注意:Swoole 現在只支持Linux 和OSX 。 Windows 服務器現在還不支持。

然後,添加服務提供者:

如果你使用Laravel ,在config/app.php服務提供者數組添加該服務提供者:

[ 'providers' => [ SwooleTWHttpLaravelServiceProvider::class, ], ]

如果你使用Lumen ,請將下面的代碼添加到bootstrap/app.php

$app->register(SwooleTWHttpLumenServiceProvider::class);

這個包支持包自動發現機制。如果你運行Laravel 5.5 以上版本,你可以跳過這一步。

建立並運行起來

現在,你可以執行以下的命令來啟動Swoole HTTP 服務。

$ php artisan swoole:http start

然後你可以看到以下訊息:

Starting swoole http server... Swoole http server started: <http://127.0.0.1:1215>

現在可以通過訪問http://127.0.0.1:1215來進入Laravel應用。

基準測試

使用MacBook Air 13寸(2015年產)及乾淨的Lumen 5.5 項目測試:
基準測試工具: wrk

wrk -t4 -c100 http://your.app

基於FPM 的Nginx

Running 10s test @ http://lumen.app:9999 4 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 1.14s 191.03ms 1.40s 90.31% Req/Sec 22.65 10.65 50.00 65.31% 815 requests in 10.07s, 223.65KB read Requests/sec: 80.93 Transfer/sec: 22.21KB

Swoole HTTP 服務

Running 10s test @ http://127.0.0.1:1215 4 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 11.58ms 4.74ms 68.73ms 81.63% Req/Sec 2.19k 357.43 2.90k 69.50% 87879 requests in 10.08s, 15.67MB read Requests/sec: 8717.00 Transfer/sec: 1.55MB

更多訊息

Github Repo查看官方包,也可以參考官方文檔獲取更多訊息。

更多現代化PHP知識,請前往Laravel / PHP知識社區

What do you think?

Written by marketer

blank

icp經營許可證詳解

blank

網易的營銷爆款可以復制嗎? | 營銷觀察