1. 程式人生 > 實用技巧 >在Swoole上加速Laravel應用

在Swoole上加速Laravel應用

Swoole是用於PHP的生產級非同步程式設計框架。它是用純C語言編寫的PHP擴充套件,它使PHP開發人員可以在PHP中編寫高效能,可伸縮的併發TCP,UDP,Unix套接字,HTTP,WebSocket服務,而無需過多瞭解非阻塞I / O程式設計和低階Linux核心。你可以將 Swoole視為 NodeJS之類,但適用於PHP,具有更高的效能。

為什麼要在 Swoole 上執行 Laravel?

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

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

換句話說, 在傳統的 PHP 生命週期中,它浪費了大量時間來構建和破壞用於指令碼執行的資源。想象一下像 Laravel 這樣的框架, 在每次請求中需要載入多少檔案?載入檔案也有很多I / O消耗。

因此如果我們利用 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。使用此命令快速安裝它:

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' => [
        SwooleTW\Http\LaravelServiceProvider::class,
    ],
]

如果你使用 Lumen ,請將下面的程式碼新增到 bootstrap/app.php:

$app->register(SwooleTW\Http\LumenServiceProvider::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

更多內容可以訪問【對標大廠】精品PHP架構師教程目錄大全,只要你能看完保證薪資上升一個臺階(持續更新)