kusanagi bcache コマンドとその仕組み

kusanagi bcache コマンドとその仕組み

大曲仁

本記事では、表示の高速化とサーバ負荷の低減を図るための「kusanagi bcache」コマンドの解説を行います。特徴としては、WordPress組み込みのキャッシュシステムを利用し、データのストア先がデータベースである点です。また、PHPで動作するため細やかなコントロールが可能となっています。加えて、bcacheの有効化、無効化、キャッシュデータのクリア方法も紹介。さらにはキャッシュの有効時間やキャッシュ対象とするクエリストリングの設定方法も詳しく解説します。

今回は、前回の kusanagi fcache コマンドに続いて、kusanagi bcache コマンドの解説をいたします。

bcache は、fcache と同様に既に作られたページを保存しておき、次回以降同じリクエストがあった際に保存済みのページを再利用し、表示の高速化、サーバ負荷の低減を図るものです。fcache と異なるのは、fcache が、nginx で動作するのに対し、bcache は、WordPress に組み込まれているキャッシュのしくみを利用したもので、PHPの動作によりなされるものとなります。PHPで動作する分、サーバ負荷、速度面では fcache には劣りますが、PHPを用いた細やかなコントロールが可能なのはメリットと言えるでしょう。

bcache は、WordPress 組み込みであるキャッシュのしくみを利用したものと書きましたが、他の WordPress のキャッシュプラグインとは異なり、データのストア先がデータベースであることが特徴となっています。

bcache 関連の KUSANAGI コマンド

bcache の状態確認

対象のプロファイルの bcache 機能が有効かどうかを確認するためには、kusanagi bcache status を使用します。
fcache コマンド同様、オプションのパラメータでプロファイル名の指定が可能です。プロファイル名を省略した場合は、カレントプロファイルが対象となります。

# kusanagi bcache status [profile]
bcache is off.
bcache completed.

bcache の有効化

対象のプロファイルの bcache 機能を有効化するには、kusanagi bcache on を使用します。

# kusanagi bcache on [profile]
Turning bcache on. 
bcache completed.

bcache の無効化

対象のプロファイルの bcache 機能を無効化するには、kusanagi bcache off を使用します。

# kusanagi bcache off [profile]
Turning bcache off.
bcache completed.

bcache のキャッシュデータクリア

対象のプロファイルの bcache キャッシュデータをクリアするには、kusanagi bcache clear を使用します。clear コマンドには、profile オプション以外に、–path オプションを指定することが可能です。–path オプションは、特定のURLのキャッシュを削除するためのオプションとなります。ただし、ページ数が多いサイトで実施する場合、削除時のデータベース負荷が高くなりやすいので注意してください。

# kusanagi bcache clear [--path] [profile]
Clearing bcache.
truncate table `wp_site_cache`
bcache completed.

bcache の設定

bcache は、PHPで動作する分、細やかなコントロールが可能となっています。これらは、WordPress 管理画面の KUSANAGIメニューにある「ページキャッシュ」タブから設定可能となっています。

キャッシュの有効時間

bcache のキャッシュ有効時間は、トップページとカテゴリーなどのアーカイブ、記事詳細それぞれで設定が可能となっています。デフォルトは、トップページ、アーカイブが60分、記事詳細は360分となっています。

キャッシュ有効時間を短縮すると、それだけ更新された情報が早く反映されることになりますが、その分サーバの負荷は増えることになりますので、サイトの運用ポリシーとサーバ負荷を勘案し、また後述の「記事公開時に削除するキャッシュ範囲」の設定と合わせて適切な設定にしてください。

キャッシュ対象外の指定

運用方針において、特定のURLはリアルタイム性が重要でキャッシュしたくないケースもでてくることがあります。このような場合は「キャッシュ除外URL」に対象のパスを記述することで、キャッシュの対象外とすることができます。

キャッシュ対象とするクエリストリング

bcache のデフォルトでは、クエリストリング*1はキャッシュの条件として無視するようになっています。これは、クエリストリングを対象としてしまうと、キャッシュのデータ量が膨大となるのと合わせ、キャッシュの効率性も低下するためです。
ただし、特定のクエリストリングによって表示を変えるような設計としているサイトでは、bcache 適用時に、キャッシュの表示が想定と異なるようになってしまいます。この状況への対処のため、キャッシュの条件として対象とするクエリストリング名を指定できるようになっています。

記事公開時に削除するキャッシュの範囲

記事公開した際に、キャッシュを削除するか否かと、その範囲を指定できます。
「削除しない」は、文字通りキャッシュはクリアされません。その分、更新の反映が遅れるということになりますので、反映の遅れを気にされる場合は、キャッシュの有効時間は短めにすることをおすすめします。
「すべて」は、全てのキャッシュデータをクリアします。(kusanagi bcache clearと同じ状況)この場合は、基本的に即時に更新が反映されますので、キャッシュの有効時間は長めにすることをおすすめします。
「記事のみ」「記事とトップページ」の選択肢は、キャッシュデータの一部削除となり、kusanagi bcache clear コマンドで、–path パラメータを指定した状態と同じとなります。キャッシュデータの部分的な削除となり、ページ数の多いサイトでは、削除時のデータベース負荷が大きくなりがちなので、設定時には留意してください。

TIPS

bcache 用テーブルの別データベース化

下記4点の定数を wp-config.php に記述することによって、キャッシュストア先のデータベースを、WordPress オリジナルのデータベースと切り分けることができるようになっています。

CACHE_DB_NAME:キャッシュ用データベースの名前
CACHE_DB_USER:キャッシュ用データベースの接続ユーザー名
CACHE_DB_PASSWORD:キャッシュ用データベースの接続パスワード
CACHE_DB_HOST:キャッシュ用データベースのホスト

利用シーンとしては、データベースサーバと WordPress が動作するアプリケーションが異なっているアプリケーションサーバが異なっているようなケースです。キャッシュデータは、ブラウザに送信される HTMLソースそのままのそれなりに大きいサイズのデータですので、データベースサーバとアプリケーションサーバが異なっているケースにおいては、その間の伝送遅延が発生し、キャッシュの有効性が低下してしまいます。キャッシュストア先のデータベースをアプリケーションサーバ上のデータベースにすることで、この遅延を回避することが可能となっています。

置換機能への対応

KUSANAGI 専用プラグインの機能として、HTMLソースの置換機能が備わっています。管理画面やメディアファイルの FQDN を異なるものとしたいといったケースで有用な機能なのですが、bcache はこの機能に連携できるように設計されており、キャッシュデータに置換処理を施した上で出力するようになっています。

bcache 利用上の注意

bcache は、先にも書いたように WordPress に組み込まれている仕組みを用いているため、他のWordPressのキャッシュプラグイン(WP Super Cache、W3 Total Cache等)との併用はできません。

bcache が利用できるのは、KUSANAGI に同梱されている専用のWordPressプラグインが、WordPressにインストールされている場合です。KUSANAGIで、WordPressのプロビジョンを行った場合には、デフォルトでインストールされている形となりますが、KUSANAGI以外の環境から、そのまま移設コピーした場合には、インストールされていません。この場合は、KUSANAGI で WordPressのプロビジョンを行った上で、wp-content/plugins/mu-plugins をコピーしておき、移設したサイトの plugins ディレクトリに上書きを行ってください。

wp-config.php の設置ディレクトリについても注意が必要です。KUSANAGI の bcache コマンドが動作するのは、wp-config.php がプロビジョンされたDocumentRoot ディレクトリ直下、もしくは直上に配置されている場合に限定されます。KUSANAGI環境以外からの移設で、サブディレクトリに WordPress がインストールされていたり、サイト内のディレクトリに複数の WordPress がインストールされているケースでは、KUSANAGI コマンドでの有効/無効化は出来ないので注意してください。ただし、KUSANAGIコマンドでの操作ができないだけであって、KUSANAGI専用プラグインがインストールされていれば、bcache の機能自体は利用可能なので、wp-config.php のWP_CACHE定数を記述することで、有効化/無効化を行うことは可能です。

*1 WordPress パーマリンク構造の「基本」で用いられるクエリストリング(p、author、cat等)は、キャッシュの対象となります。

<< kusanagi fcache で超高速 CMS 実行環境を実現するKUSANAGI 9 で PostgreSQL を利用する >>

関連記事

Webサイト運用の課題解決事例100選 プレゼント

Webサイト運用の課題を弊社プロダクトで解決したお客様にインタビュー取材を行い、100の事例を108ページに及ぶ事例集としてまとめました。

・100事例のWebサイト運用の課題と解決手法、解決後の直接、間接的効果がわかる

・情報通信、 IT、金融、メディア、官公庁、学校などの業種ごとに事例を確認できる

・特集では1社の事例を3ページに渡り背景からシステム構成まで詳解