サーバーサイドで可能なサイト高速化ってどこまでできる?

ネタの種                

  公開日:2020年11月6日  最終更新日:2020年11月6日

Redisインメモリキャッシュを試したくて。
ちょっと触ってみたけど、多分Redisの使い方正しくないような……
この記事は正式記事になる前の『ネタの種」です。機会を見て、ちゃんとテスト条件を明示、調整してまとめたい。

条件

自社WordPressサイト
WordPress5.5.3
キャッシュプラグイン:Litespeed cache(サーバーはLitespeedではない)
AWS t2.microインスタンス
Nginx
PHP7.3.24
RDS MySQL5.7相当

判定方法

apache benchによる外部からのリクエスト

実測

対象URL:https://interface-design.jp/phpinfo.php

Redis 拡張機能 ONRedis 拡張機能 OFF
Total transferred: 105002000 bytes
HTML transferred: 104738000 bytes
1) Requests per second: 54.68 [#/sec]
2) Requests per second: 38.56[#/sec]
3) Requests per second: 54.66[#/sec]
Total transferred:      105018004 bytes
HTML transferred:       104754000 bytes
1) Requests per second:    53.01 [#/sec]
2) Requests per second:    55.85 [#/sec]
3) Requests per second:    56.36 [#/sec]

対象URL:https://interface-design.jp/

Redis 拡張機能 ONRedis 拡張機能 OFF
Total transferred: 24892004 bytes
HTML transferred: 24271000 bytes
1) Requests per second: 82.00[#/sec]
2) Requests per second: 84.77[#/sec]
3) Requests per second: 85.35[#/sec]
Total transferred: 24892000 bytes
HTML transferred: 24271000 bytes
1) Requests per second: 84.00 [#/sec]
2) Requests per second: 90.51 [#/sec]
3) Requests per second: 86.71 [#/sec]

対象URL:https://interface-design.jp/web%e5%88%b6%e4%bd%9c/wordpress/wordpress-local/

Redis 拡張機能 ONRedis 拡張機能 OFF
Total transferred: 52997000 bytes
HTML transferred: 52369000 bytes
1) Requests per second: 74.42 [#/sec]
2) Requests per second: 79.22 [#/sec]
3) Requests per second: 71.84 [#/sec]

Total transferred:      52997004 bytes
HTML transferred:       52369000 bytes
1)Requests per second:    72.16 [#/sec]
2) Requests per second:    70.11 [#/sec]
3) Requests per second:    66.69 [#/sec]

う〜ん、Redisの効果が分からん……
若干早くなってるような???

おまけ

Redis 拡張機能 OFF + Super Cache ON(gzip ON?)

litespeed cache入れてるのに…
掛け合わせてみて、どうだろう…

対象URL:https://interface-design.jp/

Redis 拡張機能 OFFRedis 拡張機能 OFF+ Super Cache ON(gzip ON?)
Total transferred: 24892000 bytes
HTML transferred: 24271000 bytes
1) Requests per second: 84.00 [#/sec]
2) Requests per second: 90.51 [#/sec]
3) Requests per second: 80.03 [#/sec]
Total transferred: 7765000 bytes
HTML transferred: 7085000 bytes
1) Requests per second: 100.42 [#/sec]
2) Requests per second: 97.03 [#/sec]
3) Requests per second: 104.72 [#/sec]

対象URL:https://interface-design.jp/web%e5%88%b6%e4%bd%9c/wordpress/wordpress-local/

Redis 拡張機能 OFFRedis 拡張機能 OFF+ Super Cache ON(gzip ON?)
Total transferred:      52997004 bytes
HTML transferred:       52369000 bytes
1) Requests per second:    72.16 [#/sec]
2) Requests per second:    70.11 [#/sec]
3) Requests per second:    66.69 [#/sec]
Total transferred: 13405000 bytes
HTML transferred: 12717000 bytes
1) Requests per second: 98.01 [#/sec]
2) Requests per second: 98.26 [#/sec]
3) Requests per second: 92.02 [#/sec]

んんん!?
なんかめちゃ早くなってる……

ちなみにRedis 拡張機能 OFF + Super Cache ON(gzip ON?)でabテスト時のCPU負荷はこんな感じ
CPU load average: 0.00, 0.03, 0.05

gzipは事前にレスポンスを圧縮するのでCPU負荷が掛かると思ってたんだけどt2.microでこれなら全然問題ないなぁ。

おまけ2

Nginx Redis 拡張機能 OFF+ Super Cache ON(gzip ON?)Apache2.4 Redis 拡張機能 OFF + Super Cache ON(gzip ON?)
Total transferred: 13405000 bytes
HTML transferred: 12717000 bytes
1) Requests per second: 98.01 [#/sec]
2) Requests per second: 98.26 [#/sec]
3) Requests per second: 92.02 [#/sec]

Total transferred: 52877638 bytes
HTML transferred: 52554000 bytes
1) Requests per second: 69.28 [#/sec]
2) Requests per second: 47.85 [#/sec]
3) Requests per second: 67.57 [#/sec]

転送データ量からgzipの恩恵を受けてない?
サーバーの状態を見ているとphp-fpmプロセスが大量に発生していたので、ページキャッシュの恩恵も受けていないかも。
load average: 8.80, 7.51, 3.31
load averageも大変なことに……

まとめ

Apacheだけどうにも値がおかしいような…
そもそもlitespeed cacheとSuper Cacheで役割分担できてるのか?
gzipだけならhtaccessやnginx.confで設定した方が確実だし。
各テスト条件でのレスポンスヘッダを確認していないので、本当にgzipが有効だったか不明。

そもそもOPcacheが効いているので、Redisの効きどころはDBオブジェクト回りくらいか?もっと複雑なSQLを使う環境なら影響が出たかもしれないけど、普通のウェブサイトレベルじゃ効果薄いのかもしれない。

この記事は機会を見て、ちゃんとテスト条件を明示、調整してまとめたい。

追記

今回の環境は kusanagi を使って nginx と apacheを切り替えてテストしたんだけど、apacheだどfcacheは効かない。
さらにbcacheもちゃんと設定ができていない様子。
試しにnginxでもfcache、bcacheを切った状態で試したらapacheと対して変わらない数値&load averageだった。

kusanagiのnginx.confを覗いたり、リクエスト、レスポンスヘッダーを確認するとデータ転送時の圧縮には Brotli を使っている様子。

Brotliについてはこちら
https://blog.redbox.ne.jp/cdn_brotli.html

さらにこんな記事見つけた。
https://openlitespeed.org/mediawiki/index.php/Help:How_to_integrate_Redis_with_WordPress_On_Openlitespeed

やっぱりRedisちゃんと効いてなかったのかな?