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

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

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から
    LiteSpeedに
    乗り換えて
    みませんか?
    (デモ内容補足版)
    2019-12-01 PHP Conference Japan 2019
    GMO Pepabo, Inc @kunit

    View Slide

  2. 自己紹介
    ✔高橋邦彦
    ✔@kunit
    ✔GMOペパボ株式会社
    ✔ホスティング事業部所属
    ✔2018年11月に東京から福岡
    に移住

    View Slide

  3. 「みんなのPHP」でるぞー
    ✔ 技術評論社さんからでます
    ✔ 電子版は本日発売
    ✔ 物理本は12/6発売
    ✔ 執筆者、総勢18名!!
    ✔ 私は1章担当しました
    ✔ みなさん、買ってね!

    View Slide

  4. GMOペパボ株式会社
    ✔ 一緒に働く仲間を募集中です!
    ✔ ご興味のある方はぜひお声がけください

    View Slide

  5. GMOペパボ株式会社
    ✔ロリポップ!
    ✔ムームードメイン
    ✔カラーミーショップ
    ✔SUZURI
    ✔minne
    ✔その他にも多数のサービスをして
    ます!

    View Slide

  6. ロリポップ! 9月に新プラン追加
    ✔ハイスピードプラン
    ✔LiteSpeed を採用しています

    View Slide

  7. こんな方はいらっしゃいませんか?
    ✔ずっとApacheを使っていて、nginx +
    php-fpm に移行したいなと思ったが
    ✔長年熟成に熟成を重ねてきた数百行の秘
    伝の mod_rewrite ルールが存在して
    いて
    ✔泣く泣くApacheを使い続けているとい

    ✔あなたに特に本日の発表をおすすめしま
    す!

    View Slide

  8. LiteSpeed とは
    ✔LiteSpeed Technologies
    が開発している Webサーバー
    ✔第4のWebサーバーと言われて
    いる
    ✔Apache
    ✔nginx
    ✔第3は?

    View Slide

  9. LiteSpeed とは
    ✔有償版とオープンソース版がある
    ✔有償版はホスティング事業者が
    嬉しい機能が満載
    ✔オープンソース版は有償版に比べ
    て一部機能が使えない
    ✔ロリポップ!ハイスピードプラン
    では有償版を利用しています

    View Slide

  10. LiteSpeed の特徴
    ✔Apache 互換
    ✔イベントドリブンアーキテクチャ
    ✔HTTP/2、QUIC、HTTP/3
    ✔DoS/DDoS 対策
    ✔WordPress に対するキャッ
    シュ、攻撃対策

    View Slide

  11. Apache 互換!
    ✔有償版はApacheの httpd.conf
    がそのままつかえる
    ✔有償版は .htaccess がそのままつ
    かえる
    ✔既存のApacheから5分で乗り換え
    れると公式は言っている
    ✔オープンソース版は mod_rewrite
    ルールを解釈してくれる

    View Slide

  12. LiteSpeed 上での PHP
    ✔ LiteSpeed SAPI というのが準備さ
    れている
    ✔ PHP のコアにきちんとあるんです

    View Slide

  13. Apache + mod_php
    ✔Apache 本体のプロセスにPHPインタプリタ
    がそのままロードされる
    ✔静的コンテンツとPHP処理プロセスは同じもの
    で処理される
    ✔静的コンテンツを大量にさばきたくても、プロ
    セスを増やすとPHP側も増えてしまい、DB接
    続数やメモリ使用量等で問題になる
    ✔Apache は prefork で動作(C10K問題)
    ✔PHPのバージョンは全プロセス同じものとなる
    ✔php.ini は全プロセスで同じものとなる

    View Slide

  14. nginx + php-fpm
    ✔nginx とは別に php-fpm を起動しておい
    て、リクエストを転送する
    ✔それぞれ別管理、別起動
    ✔静的コンテンツは nginx、PHPは php-fpm
    で処理できるので効率的
    ✔イベントドリブン(C10K問題に強い)
    ✔バーチャルホストごとにPHPのバージョンを変
    更可能
    ✔バーチャルホストごとに php.ini 指定可能
    ✔.htaccess は使えない

    View Slide

  15. LiteSpeed
    ✔LiteSpeed WebサーバーにPHPを利用するア
    クセスが来た際に、PHPの処理プロセスを起動さ
    せることが可能
    ✔もちろん、予め処理プロセスを起動しておくこと
    も可能だが、これもLiteSpeed Webサーバー
    が管理してくれる
    ✔イベントドリブン(C10K問題に強い)
    ✔一定時間処理がないPHP処理プロセスは自動的に
    落としてくれる
    ✔LiteSpeed Webサーバー本体で静的コンテン
    ツを、PHPは別プロセスで処理するので効率的

    View Slide

  16. LiteSpeed
    ✔有償版は httpd.conf/.htaccess 使用可
    ✔オープンソース版は .htaccess から rewrite
    ルールの読み込みが可能
    ✔バーチャルホストごとに細かい制御が可能(秒間
    リクエスト数や帯域幅等)
    ✔バーチャルホストごとに php.ini 指定可能
    ✔外部アプリケーションという考え方があ
    り、PHPの処理はこれを利用する
    ✔外部アプリケーションをサーバー全体もしくは
    バーチャルホストごとに設定可能

    View Slide

  17. LiteSpeed 外部アプリケーション
    ✔外部アプリケーションごとにPHPのバージョ
    ン指定できる
    ✔外部アプリケーションごとに実行ユーザを変
    更できる(suEXEC)
    ✔メモリ使用量、プロセス数を制御可能
    ✔外部アプリケーションは拡張子に対して指定
    する
    ✔つまり、同じバーチャルホストで
    も、.php73 と .php72 でバージョンを変
    えるというエグいこともできる

    View Slide

  18. LiteSpeed
    ✔有償版には WordPress の wp-
    login.php や xmlrpc.php に対す
    る Brute Force Attack
    Protection という機能がある
    ✔一定時間内に決まった回数アクセスが
    あるとそのIPを弾くとかが可能
    ✔LiteSpeed Cache Plugin という
    WordPress Plugin をオフィシャ
    ルで提供している

    View Slide

  19. LiteSpeed PHPのインストール
    ✔LiteSpeed 公式リポジトリからインス
    トール可能
    ✔PHP 5.2 から 7.3 まで準備されている
    ✔2019/11/30 現在は 7.4 は準備され
    てなかった(残念)
    ✔yum install lsphp73 lsphp73-
    devel ...
    ✔apt-get install lsphp73 lsphp73-
    devel ...

    View Slide

  20. 説明だけだとあれなので
    ✔実際に動いているところを見て
    いただきましょう

    View Slide

  21. ここから、補足ページです
    ✔ここ以降は当日行ったデモの内容のダイ
    ジェストを補足します
    ✔当日、デモ内容が文字が小さくて見れな
    かった方、本当にすみませんでした
    ✔アーカイブ動画もチェックしましたが、
    見づらい部分もあったのでそれも含めて
    補足します
    ✔当日時間がなくて、本来やりたかった内
    容も追加しています

    View Slide

  22. 当日デモの環境
    ✔Vagrant + VirtualBox で
    作った CentOS7 環境
    ✔Apache 2.4.6(CentOS)
    ✔nginx 1.17.6
    ✔Apacheおよびnginx向け
    に、remi から php 7.3 をイ
    ンストール

    View Slide

  23. 当日デモの環境
    ✔OpenLiteSpeed 1.6.4
    ✔LiteSpeed の公式リポジトリ
    から 5.6/7.0/7.1/7.2/7.3
    のPHPをインストール

    View Slide

  24. OpenLiteSpeed の管理ツール
    ✔Webインターフェースの管理ツールが
    付属する
    ✔通常は 7080 ポートでアクセスでき
    る(もちろん変更可能)
    ✔OpenLiteSpeed では英語のみでは
    なく、日本語/中国語での表示が可能
    ✔ちなみに、有償版の管理ツールは英語
    のみ

    View Slide

  25. OpenLiteSpeed の管理ツール
    ✔ ログイン画面

    View Slide

  26. OpenLiteSpeed の管理ツール
    ✔ ダッシュボード(英語表示)

    View Slide

  27. OpenLiteSpeed の管理ツール
    ✔ ダッシュボード(日本語表示)

    View Slide

  28. OpenLiteSpeed の管理ツール
    ✔ バーチャルホスト一覧

    View Slide

  29. OpenLiteSpeed の管理ツール
    ✔ バーチャルホスト詳細

    View Slide

  30. OpenLiteSpeed の管理ツール
    ✔ 外部アプリケーション(バーチャルホスト単位)

    View Slide

  31. OpenLiteSpeed の管理ツール
    ✔ 外部アプリケーションと拡張子の関連付け

    View Slide

  32. OpenLiteSpeed の管理ツール
    ✔ 公開バーチャルホストの一覧(リスナー設定)

    View Slide

  33. OpenLiteSpeed の管理ツール
    ✔ バーチャルホストとドメインとの関連付け(リスナー設定)

    View Slide

  34. OpenLiteSpeed のPHP 7.3
    ✔ OpenLiteSpeed + PHP7.3 でとった phpinfo
    ✔ Server API は 「LiteSpeed V 7.6」

    View Slide

  35. OpenLiteSpeed のPHP 7.2
    ✔ OpenLiteSpeed + PHP7.2 でとった phpinfo
    ✔ Server API は 「LiteSpeed V 7.6」

    View Slide

  36. OpenLiteSpeed のPHP 7.1
    ✔ OpenLiteSpeed + PHP7.1 でとった phpinfo
    ✔ Server API は 「LiteSpeed V 7.6」

    View Slide

  37. OpenLiteSpeed のPHP 7.0
    ✔ OpenLiteSpeed + PHP7.0 でとった phpinfo
    ✔ Server API は 「LiteSpeed V 7.6」

    View Slide

  38. OpenLiteSpeed のPHP 5.6
    ✔ OpenLiteSpeed + PHP5.6 でとった phpinfo
    ✔ Server API は 「LiteSpeed V 7.6」

    View Slide

  39. OpenLiteSpeed のプロセス
    ✔ OpenLiteSpeed を起動した直後のプロセス状態
    ✔ PHPにまだアクセスしてないので PHP のプロセスはいない

    View Slide

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

    View Slide

  41. OpenLiteSpeed のプロセス
    ✔ PHP 7.3/7.2/7.1 のバーチャルホストの phpinfo にアクセスした状態
    ✔ OpenLiteSpeed の lscgid からPHPプロセス lsphp が複数生成されてい

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

    View Slide

  42. OpenLiteSpeed のプロセス
    ✔ OpenLiteSpeedの管理ツールをアクセスした後、
    PHP 7.3/7.2/7.1 のバーチャルホストの
    phpinfo にアクセスした状態
    ✔ OpenLiteSpeed の lscgid から各バーチャルホ
    スト毎の外部アプリケーション用の lsphp だけでは
    なくて、管理ツール用の admin_php も生成され
    ている

    View Slide

  43. Apache httpd のPHP 7.3
    ✔ Apache httpd + PHP7.3 でとった phpinfo
    ✔ Server API は 「Apache 2.0 Handler」

    View Slide

  44. Apache httpd のプロセス
    ✔ Apache httpd を起動し、PHP 7.3 の
    phpinfo にアクセスした状態
    ✔ httpd のプロセスが複数起動し、どのプロセ
    スでも静的コンテンツおよびPHPを処理する

    View Slide

  45. nginx + php-fpm のPHP 7.3
    ✔ nginx + php-fpm(7.3) でとった phpinfo
    ✔ Server API は 「FPM/FastCGI」

    View Slide

  46. nginx + php-fpm のプロセス
    ✔ nginx と php-fpm をそれぞれ起動し、PHP
    7.3 の phpinfo にアクセスした状態
    ✔ nginx のプロセスと php-fpm のプロセスは
    完全に独立して存在し、静的コンテンツは
    nginx、PHPの処理は php-fpm 側に転送さ
    れて処理が行われる

    View Slide

  47. 当日行ったベンチマークの注意事項
    ✔ ここまで説明したような Apache + mod_php、
    nginx + php-fpm、OpenLiteSpeed のそれ
    ぞれの 7.3 環境に対して、WordPress 5.3 をイ
    ンストールして、インストール直後のトップページ
    に対して、ベンチマークをとってみた
    ✔ ベンチマークで使ったのは、当日デモしていたノー
    トPCであり、3つのWebサーバーに対して特に
    チューニングは行っていないので、あくまでも参考

    ✔ 環境がもっとリッチなもので、それぞれに対して、
    もっとチューニングすれば差異がでてくるものだと
    思ってください。

    View Slide

  48. 当日行ったベンチマークの注意事項
    ✔ WordPress はこんなページ

    View Slide

  49. 当日行ったベンチマーク
    ✔ ベンチマークには ab を利用
    ✔ ab -n 1000 -c 100 [URL] という形で実

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

    View Slide

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

    View Slide

  51. ここまでが当日の補足
    ✔ あらためて、当日プロジェクターで写したプ
    ロセスリスト等の結果が見づらかったことを
    お詫びします
    ✔ アーカイブ動画ではかろうじて見れるようで
    すので、この資料とともに見ていただけると
    幸いです

    View Slide

  52. LiteSpeed 使っていきましょう!
    ✔日本ではあまりにも知名度が低
    いのがあれですが、もっと使わ
    れていてもおかしくないと思う
    ので、ぜひ試してみてくださ
    い!

    View Slide

  53. ?
    質問あるかたどうぞ

    View Slide