AzureでのWordPressシステム構成

WordPressでブログを始めたので、Microsoft AzureでWordPressを構築するとどうなるかを整理してみることにしました。
まずは連載の初回ということで、どのようなシステム構成となるかを整理してみます。

WordPressの良いところ・悪いところ

WordPressは無料でありながらテンプレートやプラグインが豊富に揃っており、ホームページやブログツールとして優れた製品です。
また、機能の多さからカスタマイズしてECサイト等で活用することもあります。
しかし、ソフトウェア単体として見た場合、パフォーマンスが極めて悪く、カスタマイズ性も良くありません。
1CPUあたり1秒間に2リクエスト程度が限界でしょうか(通常はもっと悪い)。

これはWordPressがPHPで作られていることから避けて通れない問題で、何らかのキャッシュを活用する以外に高速化する方法はありません。
(WordPressの動的なサーバ処理は基本的に高速化できません)
このことから、WordPressをホームページやブログ以外で使用することは推奨しません。

しかし、ホームページやブログに限定して利用するのであれば、これ程便利なツールもありません。
そこで、如何に高速に応答させるかのシステム構成が重要になります。

Azureでのシステム構成

この記事ではWordPressをMicrosoftのクラウドであるAzureに構築する方法をまとめます。
普通のWordPressについてならほかに詳しいサイトがいくらでもありますしね(^^;

パフォーマンスとコストのバランスを考えると、大きく分けて3タイプの構成方法があります。

シングル構成

個人や小規模な企業サイトでWordPressを運用する場合、基本的にはシングル構成を用います。
ローカルのMySQLを使用するためサーバ費用だけで運用でき、低価格でWordPressを運用できます。

標準のままだとWordPressが遅いため、プラグインでページキャッシュを有効化してパフォーマンスを向上させます。
また、画像、JavaScipt、CSSをCDN経由でアクセスさせることでサーバ負荷を低減し、WordPressだけで構成するよりも高い性能を発揮します。
CDNの価格はとても安いので、AzureでWordPressを構築するのであればCDNを利用しない手はありません。

AzureでのWordPressシングル構成

シングル構成はサーバが1台であるため、CPU数を増やす以外にパフォーマンスを向上させる方法がなく、大量アクセスには耐えられません。
しかし、100万PVや200万PVといったアクセスの多いサイトも、キャッシュプラグインやCDNを活用すれば実はこの程度の構成で耐えられます(Azure App Serviceのプランにも依存)。
また、構成がシンプルで、他サイトに移転する際もファイルコピーで対応できるためお手軽です。

負荷分散構成

1秒間に100アクセス等があるような大規模サイトでWordPressを使用する場合には負荷分散構成を用います。
シングル構成とは違って専用のデータベースを複数のWordPressで共用します。
また、大量ファイルを扱う場合はBlob Storageに画像等のファイルを格納します。

負荷分散構成は大規模サイトに対応できる反面、システム構成が複雑でサーバ費用が高額になるため、余程のことがない限りWordPressでこういった構成を用いることはありません。

AzureでのWordPress負荷分散構成

このような構成が必要なサイトの場合、本来はWordPressではなくJavaや.NET等で独自システム、またはより高速で動作するCMSツールで構築すべきですが、アプリケーションの開発やライセンス費用に数千万円以上が必要となります。
そのため、そこまでお金を出せない場合(数百万円程度)に用いる構成と考えるべきでしょう。

CDNバックエンド構成

WordPressで複雑なことを行わない場合やサーバ費用を節約したい場合、CDNバックエンド構成を用いることができます。
この構成では全てのアクセスはCDNに対して行われるためWordPressにほとんど負荷が発生せず、サーバ費用をシングル構成よりも安くすることができ、大量アクセスにも対応できます。
また、ユーザーにWordPressのサーバが直接見えないため、WordPressを狙った攻撃を避けることができます。

本サイトも費用対効果の高さからCDNバックエンド構成を採用しています。

AzureでのWordPress CDNバックエンド構成

メリットの多い構成ですが、以下のような制約があります。

  • 利用できなくなる機能・プラグインが結構ある(例:PING通知、アクセスランキング)
  • PCとスマートフォンで処理を変更できず、レスポンシブデザインが必要
  • 動的な処理はJavaScriptで実施する
  • CDNへの反映に時間がかかる(投稿したらCDNをクリアする等が自動でできない)

おまけ 負荷分散構成(ProjectNami)

Azureで負荷分散構成を採用する場合、データベースはAzure Database for MySQLを使用します。
しかし、Azure Database for MySQLは最も安い構成で約5000円/月かかります。

そこで、Azureの標準のデータベースであるAzure SQL DatabaseでWordPressを動作させるProject Namiが開発されました。
Azure SQL Databaseは約600円/月から利用できるため、外部DBを採用しやすくなります。
例えば、複数のWordPressのサイトを一つのDBで管理するといったことも費用を抑えて実現できます。

AzureでのWordPress 負荷分散構成 ProjectNami

ただ、ProjectNamiの採用は現時点では推奨しません。
と言うのは、動作しないプラグインが多すぎます。
DBを使用するプラグインの場合、動いたらラッキーくらいに思っておきましょう。

WindowsとLinuxのどちらを選ぶか

Azure App ServiceにはWindowsとLinuxがあります。

Windowsの場合、Azure App Serviceで最も安い価格で運用できます。
ただ、WordPressはLinuxでの動作を前提としているため動作しない機能があります。
特にキャッシュ、Minify等のファイル操作を伴うプラグインが動かないことが多いようです。

Linuxの場合、WordPressの機能的な制約はありませんが、現時点でAzure App ServiceがLinux環境のローカルDBをサポートしておらず、外部DBを使用する必要があるため価格メリットが享受できません。

まあ、Linuxだと他の技術系ブログと同じになってしまうので、本サイトではWindows環境でWordPressを構築する方法を扱うこととします。

連載で採用する構成

次回からは実際にWordPressを構築していきます。
色々な構成を記載しましたが、この連載ではシングル構成の構築方法を取り扱うこととします。
別の構成方法については時間を作って別途整理したいと思います。