Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Apache から LiteSpeed に乗り換えてみませんか? / php-conferen...

Apache から LiteSpeed に乗り換えてみませんか? / php-conference-japan-2019-track5-hello-litespeed

2019/12/01 に行われた PHPカンファレンス2019の Track 5 で発表した「Apache から LiteSpeed に乗り換えてみませんか?」の登壇資料です。

TAKAHASHI Kunihiko

December 01, 2019
Tweet

More Decks by TAKAHASHI Kunihiko

Other Decks in Technology

Transcript

  1. Apache + mod_php ✔Apache 本体のプロセスにPHPインタプリタ がそのままロードされる ✔静的コンテンツとPHP処理プロセスは同じもの で処理される ✔静的コンテンツを大量にさばきたくても、プロ セスを増やすとPHP側も増えてしまい、DB接

    続数やメモリ使用量等で問題になる ✔Apache は prefork で動作(C10K問題) ✔PHPのバージョンは全プロセス同じものとなる ✔php.ini は全プロセスで同じものとなる
  2. nginx + php-fpm ✔nginx とは別に php-fpm を起動しておい て、リクエストを転送する ✔それぞれ別管理、別起動 ✔静的コンテンツは

    nginx、PHPは php-fpm で処理できるので効率的 ✔イベントドリブン(C10K問題に強い) ✔バーチャルホストごとにPHPのバージョンを変 更可能 ✔バーチャルホストごとに php.ini 指定可能 ✔.htaccess は使えない
  3. LiteSpeed ✔有償版は httpd.conf/.htaccess 使用可 ✔オープンソース版は .htaccess から rewrite ルールの読み込みが可能 ✔バーチャルホストごとに細かい制御が可能(秒間

    リクエスト数や帯域幅等) ✔バーチャルホストごとに php.ini 指定可能 ✔外部アプリケーションという考え方があ り、PHPの処理はこれを利用する ✔外部アプリケーションをサーバー全体もしくは バーチャルホストごとに設定可能
  4. LiteSpeed ✔有償版には WordPress の wp- login.php や xmlrpc.php に対す る

    Brute Force Attack Protection という機能がある ✔一定時間内に決まった回数アクセスが あるとそのIPを弾くとかが可能 ✔LiteSpeed Cache Plugin という WordPress Plugin をオフィシャ ルで提供している
  5. LiteSpeed PHPのインストール ✔LiteSpeed 公式リポジトリからインス トール可能 ✔PHP 5.2 から 7.3 まで準備されている

    ✔2019/11/30 現在は 7.4 は準備され てなかった(残念) ✔yum install lsphp73 lsphp73- devel ... ✔apt-get install lsphp73 lsphp73- devel ...
  6. 当日デモの環境 ✔Vagrant + VirtualBox で 作った CentOS7 環境 ✔Apache 2.4.6(CentOS)

    ✔nginx 1.17.6 ✔Apacheおよびnginx向け に、remi から php 7.3 をイ ンストール
  7. OpenLiteSpeed のプロセス ✔ PHP 7.3 の phpinfo にアクセスした状態 ✔ OpenLiteSpeed

    の lscgid からPHPプロセス lsphp が 生成されている ✔ WebサーバーのプロセスとPHPのプロセスが親子関係になる のがなかなかおもしろい
  8. OpenLiteSpeed のプロセス ✔ PHP 7.3/7.2/7.1 のバーチャルホストの phpinfo にアクセスした状態 ✔ OpenLiteSpeed

    の lscgid からPHPプロセス lsphp が複数生成されてい る ✔ lscgid の直接の子供の lsphp が外部アプリケーションごとに生成されるもの で、それぞれの外部アプリケーション毎のプロセスは今は1つだけ子供のプロセ スをもっているが、アクセスが増えると子供のプロセスを増やしていく ✔ つまり実際のリクエストを処理しているのは一番子供の lsphp ✔ 各バーチャルホスト毎の外部アプリケーションが別々のアカウント (phpcon73/phpcon72/php71)で処理されていることもわかる
  9. OpenLiteSpeed のプロセス ✔ OpenLiteSpeedの管理ツールをアクセスした後、 PHP 7.3/7.2/7.1 のバーチャルホストの phpinfo にアクセスした状態 ✔

    OpenLiteSpeed の lscgid から各バーチャルホ スト毎の外部アプリケーション用の lsphp だけでは なくて、管理ツール用の admin_php も生成され ている
  10. Apache httpd のPHP 7.3 ✔ Apache httpd + PHP7.3 でとった

    phpinfo ✔ Server API は 「Apache 2.0 Handler」
  11. Apache httpd のプロセス ✔ Apache httpd を起動し、PHP 7.3 の phpinfo

    にアクセスした状態 ✔ httpd のプロセスが複数起動し、どのプロセ スでも静的コンテンツおよびPHPを処理する
  12. nginx + php-fpm のPHP 7.3 ✔ nginx + php-fpm(7.3) でとった

    phpinfo ✔ Server API は 「FPM/FastCGI」
  13. nginx + php-fpm のプロセス ✔ nginx と php-fpm をそれぞれ起動し、PHP 7.3

    の phpinfo にアクセスした状態 ✔ nginx のプロセスと php-fpm のプロセスは 完全に独立して存在し、静的コンテンツは nginx、PHPの処理は php-fpm 側に転送さ れて処理が行われる
  14. 当日行ったベンチマークの注意事項 ✔ ここまで説明したような Apache + mod_php、 nginx + php-fpm、OpenLiteSpeed のそれ

    ぞれの 7.3 環境に対して、WordPress 5.3 をイ ンストールして、インストール直後のトップページ に対して、ベンチマークをとってみた ✔ ベンチマークで使ったのは、当日デモしていたノー トPCであり、3つのWebサーバーに対して特に チューニングは行っていないので、あくまでも参考 値 ✔ 環境がもっとリッチなもので、それぞれに対して、 もっとチューニングすれば差異がでてくるものだと 思ってください。
  15. 当日行ったベンチマーク ✔ ベンチマークには ab を利用 ✔ ab -n 1000 -c

    100 [URL] という形で実 施 ✔ https ではなく http アクセスでのテスト (httpsにしておいて h2load で HTTP/2 でのテストをするのも面白いかもしれないが 準備が間に合わなかった...) ✔ 当日会場で行った結果は、Apache + mod_php/nginx + php-fpm/OpenLiteSpeed ともに 45 reqs/sec 前後の値で速さは変わらなかった
  16. 当日行えなかった比較 ✔ 当日は ab -n 1500 -c 1000 [URL] というもの

    を OpenLiteSpeed でのみ行った ✔ OpenLiteSpeed はチューニングなしの状態で 1000並列リクエストを reqs/sec を落とすことな く完了できる ✔ 同一環境で Apache+mod_php と nginx+php- fpm は素の状態だと途中で落ちる(ファイルのオープ ン数の上限に引っかかる等の理由で) ✔ もちろん、Apacheおよびnginx環境でもパラメー ターチューニングを行うことにより処理できるように なるが、LiteSpeedが高負荷状態にもともと強いも のとして設計されているということを説明したかった のでこの説明を当日入れた