swooleを使用してlaravelアプリケーションを改造する
swooleを使用してlaravelアプリケーションを改造する
ラベル(スペース区切り):php
1.概要
1.1 swooleの紹介
SwooleはPHPのために開発された生産レベルの非同期プログラミングフレームワークである.彼は純粋なC開発の拡張で、彼はPHP開発者がPHPの中で高性能を書くことを許可して、拡張可能な同時TCP、UDP、Unix socket、HTTP、WebSocketサービス、多すぎる非ブロックI/Oプログラミングと低レベルのLinuxカーネルの知識を持つ必要はありません.SwooleはGoと想像できますが、PHPにとってはより高性能になります.
1.2 SwooleでLaravelを実行する理由
PHPのライフサイクルでは、PHPスクリプトを実行するたびに、PHPはモジュールを初期化し、実行環境のzendエンジンを起動する必要があります.PHPスクリプトを
ただし、このようなライフサイクルは、単一のリクエストが作成する環境がリクエストが終了すると直ちに破棄されるため、リクエストのたびに1回実行する必要がある.
すなわち、従来のPHPライフサイクルでは、スクリプトの実行に多くの時間を費やしてリソースを作成および破棄しています.laravelのようなフレームワークでは、リクエストごとにどのくらいのファイルをロードする必要があるか想像してみてください.同時にI/O操作を大量に浪費する.
swooleはアプリケーションレベルに組み込まれたserverであり、すべてのスクリプトファイルを一度ロードするとメモリに保存できます.これは、swoole上でlaravelを実行する必要がある理由です.
swooleは強力な性能を提供し、Laravelは優雅なコード構造を提供することができます.完璧です!
2.準備
app
php
laravel
swoole
your.domain.com
7.1.16
5.4.36
4.1.2
2.1 wrk
データムテストツール:wrk
2.2 php-swooleインストール
2.3 laravel-swoole拡張インストール
以下はswooletw/laravel-swooleの主な特徴です. SwooleでLaravel/Loumenアプリケーション を実行の優れたパフォーマンスを30 x に向上砂箱モード分離アプリケーションコンテナ は、LaravelアプリケーションでWebSocketサーバ を実行することをサポートします. Socket.ioプロトコル をサポートは、Swooleテーブルのプロセス間共有 をサポートします.
Composerを使用してインストールするには、次の手順に従います.
2.4 laravel/lumen構成
このパッケージは、パッケージの自動検出メカニズムをサポートします.Laravel 5.5以上のバージョンを実行する場合は、このステップをスキップできます.
Laravel構成:config/app.phpサービスプロバイダ配列にサービスプロバイダを追加
lumen構成:bootstrap/app.phpに次のコードを追加してください
3.基準テストデータ
3.1構築して実行する
これで、以下のコマンドを実行してSwoole HTTPサービスを開始できます.
次の情報が表示されます.
Starting swoole http server...
Swoole http server started: http://127.0.0.1:1215
ポート番号またはサービス・アドレスを変更する必要がある場合は、対応する環境変数を構成します.
詳細なドキュメントリファレンス:https://wiki.swoole.com/wiki/page/14.html
3.2 FPM+Nginxに基づくテスト結果
3.3 Swoole HTTPサービスのテスト結果
4.質問&注意事項 php 7はswoole 4.0+バージョン のみ使用可能
4.1静的ファイルのswooleパフォーマンスの使用は影響を受けますか?
Nginxを使用して、Swoole上で実行されるLaravelをエージェントします.
5.参考 Swooleを使用してLaravelアプリケーション を加速 swoole入門ガイド laravel-swoole
ラベル(スペース区切り):php
1.概要
1.1 swooleの紹介
SwooleはPHPのために開発された生産レベルの非同期プログラミングフレームワークである.彼は純粋なC開発の拡張で、彼はPHP開発者がPHPの中で高性能を書くことを許可して、拡張可能な同時TCP、UDP、Unix socket、HTTP、WebSocketサービス、多すぎる非ブロックI/Oプログラミングと低レベルのLinuxカーネルの知識を持つ必要はありません.SwooleはGoと想像できますが、PHPにとってはより高性能になります.
1.2 SwooleでLaravelを実行する理由
PHPのライフサイクルでは、PHPスクリプトを実行するたびに、PHPはモジュールを初期化し、実行環境のzendエンジンを起動する必要があります.PHPスクリプトを
OpCodes
にコンパイルして、Zend
エンジンで実行します.ただし、このようなライフサイクルは、単一のリクエストが作成する環境がリクエストが終了すると直ちに破棄されるため、リクエストのたびに1回実行する必要がある.
すなわち、従来のPHPライフサイクルでは、スクリプトの実行に多くの時間を費やしてリソースを作成および破棄しています.laravelのようなフレームワークでは、リクエストごとにどのくらいのファイルをロードする必要があるか想像してみてください.同時にI/O操作を大量に浪費する.
swooleはアプリケーションレベルに組み込まれたserverであり、すべてのスクリプトファイルを一度ロードするとメモリに保存できます.これは、swoole上でlaravelを実行する必要がある理由です.
swooleは強力な性能を提供し、Laravelは優雅なコード構造を提供することができます.完璧です!
2.準備
app
php
laravel
swoole
your.domain.com
7.1.16
5.4.36
4.1.2
2.1 wrk
データムテストツール:wrk
// wrk
-c, --connections: total number of HTTP connections to keep open with
each thread handling N = connections/threads
-d, --duration: duration of the test, e.g. 2s, 2m, 2h
-t, --threads: total number of threads to use
-s, --script: LuaJIT script, see SCRIPTING
-H, --header: HTTP header to add to request, e.g. "User-Agent: wrk"
--latency: print detailed latency statistics
--timeout: record a timeout if a response is not received within
this amount of time.
2.2 php-swooleインストール
pecl install swoole
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
&& sed -i 's/nl.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk add --no-cache --virtual .build-deps \
$PHPIZE_DEPS \
&& docker-php-source extract \
&& cd /usr/src \
&& wget http://pecl.php.net/get/swoole-4.1.2.tgz \
&& tar -xzvf swoole-4.1.2.tgz \
&& mv /usr/src/swoole-4.1.2 /usr/src/php/ext/swoole \
&& docker-php-ext-configure swoole --enable-openssl \
&& docker-php-ext-install swoole \
&& runDeps="$( \
scanelf --needed --nobanner --format '%n#p' --recursive /usr/local \
| tr ',' '
' \
| sort -u \
| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
)" \
&& apk add --no-cache --virtual .php-rundeps $runDeps \
&& docker-php-source delete \
&& apk del .build-deps \
&& rm -rf /usr/src/swoole-4.1.2.tgz
2.3 laravel-swoole拡張インストール
以下はswooletw/laravel-swooleの主な特徴です.
Composerを使用してインストールするには、次の手順に従います.
$ composer require swooletw/laravel-swoole
2.4 laravel/lumen構成
このパッケージは、パッケージの自動検出メカニズムをサポートします.Laravel 5.5以上のバージョンを実行する場合は、このステップをスキップできます.
Laravel構成:config/app.phpサービスプロバイダ配列にサービスプロバイダを追加
[
'providers' => [
SwooleTW\Http\LaravelServiceProvider::class,
],
]
lumen構成:bootstrap/app.phpに次のコードを追加してください
$app->register(SwooleTW\Http\LumenServiceProvider::class);
3.基準テストデータ
3.1構築して実行する
これで、以下のコマンドを実行して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アプリケーションにアクセスできるようになりました.ポート番号またはサービス・アドレスを変更する必要がある場合は、対応する環境変数を構成します.
// vendor/swooletw/laravel-swoole/config/swoole_http.php
SWOOLE_HTTP_HOST: '127.0.0.1'
SWOOLE_HTTP_PORT: '1215'
詳細なドキュメントリファレンス:https://wiki.swoole.com/wiki/page/14.html
3.2 FPM+Nginxに基づくテスト結果
wrk -t4 -c100 http://your.domain.com/version
Running 10s test @ http://your.domain.com/version
4 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 341.64ms 108.70ms 801.47ms 69.08%
Req/Sec 71.72 27.35 171.00 65.57%
2864 requests in 10.03s, 2.84MB read
Requests/sec: 285.63
Transfer/sec: 289.79KB
wrk -t12 -c400 -d30s http://your.domain.com/version
Running 30s test @ http://your.domain.com/version
12 threads and 400 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 801.35ms 349.89ms 2.00s 68.56%
Req/Sec 40.61 19.83 126.00 65.80%
14390 requests in 30.10s, 14.24MB read
Socket errors: connect 0, read 0, write 0, timeout 132
Requests/sec: 478.09
Transfer/sec: 484.34KB
3.3 Swoole HTTPサービスのテスト結果
wrk -t4 -c100 http://your.domain.com/version
Running 10s test @ http://your.domain.com/version
4 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 198.64ms 324.54ms 1.96s 88.59%
Req/Sec 225.62 91.30 430.00 62.72%
9021 requests in 10.09s, 7.90MB read
Socket errors: connect 0, read 0, write 0, timeout 25
Requests/sec: 893.71
Transfer/sec: 801.26KB
wrk -t12 -c400 -d30s http://your.domain.com/version
Running 30s test @ http://your.domain.com/version
12 threads and 400 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 319.84ms 398.59ms 2.00s 85.59%
Req/Sec 66.94 35.58 240.00 66.09%
23862 requests in 30.09s, 20.89MB read
Socket errors: connect 0, read 0, write 0, timeout 619
Requests/sec: 793.04
Transfer/sec: 711.05KB
4.質問&注意事項
4.1静的ファイルのswooleパフォーマンスの使用は影響を受けますか?
Nginxを使用して、Swoole上で実行されるLaravelをエージェントします.
server {
listen 80;
server_name your.domain.com;
root /path/to/laravel/public;
index index.php;
location = /index.php {
# Ensure that there is no such file named "not_exists"
# in your "public" directory.
try_files /not_exists @swoole;
}
location / {
try_files $uri $uri/ @swoole;
}
location @swoole {
set $suffix "";
if ($uri = /index.php) {
set $suffix "/";
}
proxy_set_header Host $host;
proxy_set_header SERVER_PORT $server_port;
proxy_set_header REMOTE_ADDR $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# IF https
# proxy_set_header HTTPS "on";
proxy_pass http://127.0.0.1:1215$suffix;
}
}
5.参考