Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

? 質問あるかたどうぞ