MS Azure App ServiceのWordPressでレスポンス比較

技術

PaaSとして提供されている「Azure App Service」のwordpressのレスポンスが遅いので、構成によってどれぐらいの違いがあるのかを調べてみました。

構成

今回比較する構成で共通している部分は、東日本リージョン、PHP、wordpress7.4.1 + cocoon(テーマ)です。インフラ部分を少し変えた構成を比較してみました。

①「AppB1SQL8IO100」App Service + Azure Database for MySQL

①はPHP7.4ベースのApp ServiceにWordpressを手動で展開し、データベースもPaaSで安価なプランで構成しています。

項目選択
App Service
 オペレーティングシステムLinux
 ランタイムスタックPHP7.4
 プランB1 ( ACU 100, メモリ 1.75GB)
Azure Database for MySQL
 種類フレキシブルサーバー
 プランStandard_B1s
(コア 1, メモリ 1GB, IOPS 100)
 MySQLバージョン8.0.21

②「AppB1SQL8IO320」App Service + Azure Database for MySQL

②は①と同様にPHP7.4ベースのApp ServiceにWordpressを手動で展開し、データベースのディスクIOPSを①の約3倍に増やしました。

項目選択
App Service
 オペレーティングシステムLinux
 ランタイムスタックPHP7.4
 プランB1 ( ACU 100, メモリ 1.75GB)
Azure Database for MySQL
 種類フレキシブルサーバー
 プランStandard_B1s
(コア 1, メモリ 1GB, IOPS 320)
 MySQLバージョン8.0.21

③「AppB1SQL57IO100」App Service + Azure Database for MySQL

③は①と同様にPHP7.4ベースのApp ServiceにWordpressを手動で展開し、データベースのバージョンをダウンしています。

項目選択
App Service
 オペレーティングシステムLinux
 ランタイムスタックPHP7.4
 プランB1 ( ACU 100, メモリ 1.75GB)
Azure Database for MySQL
 種類フレキシブルサーバー
 プランStandard_B1s
(コア 1, メモリ 1GB, IOPS 100)
 MySQLバージョン5.7

④「AppB2SQL57IO100」App Service + Azure Database for MySQL

④は③と同様にPHP7.4ベースのApp ServiceにWordpressを手動で展開していますが、プランをB2にスケールアップしました。

項目選択
App Service
 オペレーティングシステムLinux
 ランタイムスタックPHP7.4
 プランB2 ( ACU 200, メモリ 3.5GB)
Azure Database for MySQL
 種類フレキシブルサーバー
 プランStandard_B1s
(コア 1, メモリ 1GB, IOPS 100)
 MySQLバージョン5.7

⑤「AppB1CtnrOnly」App Service

⑤はApp Serviceを「Dockerコンテナー」で構成し、Dockerイメージとしてwordpressとmysqlの最新版をデプロイしました。wordpressとmysqlのデータをApp Serviceのストレージに「WEBSITES_ENABLE_APP_SERVICE_STORAGE=TRUE」を設定することで恒久的に維持させています。

項目選択
App Service
 オペレーティングシステムLinux
 公開Docker コンテナー
 プランB1 ( ACU 100, メモリ 1.75GB)
 Docker Imagewordpress, mysql
 wordpressデータディスクWEBAPP_STORAGE_HOME
 mysqlデータディスクWEBAPP_STORAGE_HOME

⑥「AppB1CtnrFiles」App Service + Azure Files

⑥は⑤と同様にApp Serviceを「Dockerコンテナー」で構成し、Dockerイメージとしてwordpressとmysqlの最新版をデプロイしました。mysqlのデータだけをAzure Filesのファイル共有を利用して保存しています。

項目選択
App Service
 オペレーティングシステムLinux
 公開Docker コンテナー
 プランB1 ( ACU 100, メモリ 1.75GB)
 Docker Imagewordpress, mysql
 wordpressデータディスクWEBAPP_STORAGE_HOME
 mysqlデータディスクAzure Files
Azure Files
 パフォーマンスStandard
 ストレージ層トランザクション最適化
 接続方法パブリック エンドポイント

比較方法

比較はWindows端末で以下のスクリプトを実行して、50回アクセスしたレスポンス時間の平均値を計測しました。端末のWi-Fi接続などが影響しないように東日本リージョンAzure VM(Standard B2s)のWindows 10で実行します。

Param($url,$cnt)
$average=@()

while($cnt){
    $time=Get-Date;
    $ret=curl $url;
    $time=(Get-Date)-$time;
    $average+=$time.TotalSeconds
    $cnt--;
}

[Math]::Round(($average | Measure-Object -Average).Average, 2, [MidpointRounding]::AwayFromZero);

計測結果

計測結果を以下に示します。

構成計測値(秒)
①AppB1SQL8IO1001.77
②AppB1SQL8IO3201.83
③AppB1SQL57IO1001.95
④AppB2SQL57IO1001.86
⑤AppB1CtnrOnly3.36
⑥AppB1CtnrFiles2.61
  • MySQLバージョン5.7と8では、0.18秒の差が出ています。8にすることで多少の効果がみられます。
  • MySQLのディスクIOPSを100→320に増加させたとき速度はほぼ変わりませんでした。
  • App ServiceのプランをB1→B2にスケールアップすると0.09秒速度もアップしています。
  • App Serviceのマルチコンテナ機能を利用してMySQLも同じサービスで動作させた場合とMySQLを外部で動作させた場合では、1秒以上の差が出てしまいました。
  • App ServiceのマルチコンテナのMySQLデータ書き込みだけ外部にすると、MySQL自体も外部に動作させるよりは劣るものの、App Service内に書き込むよりも0.75秒も速いです。

考察

少ないパターンで検証をしてみましたが、MySQLのバージョンアップとApp Serviceのプランの増強によって、「僅かな」スピードアップができると思われます。MySQLバージョンの差異で利用料金に影響はないので、バージョンアップするのは良いと思います。ただ、App ServiceのB1からB2へのスケールアップは料金が倍(約1,500円→3,000円)になります。0.09秒しか変わらないとなると、、、実施は微妙です。

また、マルチコンテナの結果から分かる通りApp Serviceに付属するデータ領域への書き込みが速度に影響してそうですが、データを外部へ逃がす方法をとっても運用速度には程遠いと思います。

ちなみに、AzureのIaaSであるAzure VM「Standard B1ms (1 vcpu 数、2 GiB メモリ)」で「OpenLiteSpeed」イメージを利用したwordpressでは「0.69秒」という結果でした!

PaaSではクラウド事業者が担当していた更新管理などが利用者側で行うことになりますが、この速さは魅力的です!

App Serviceでは、ディスク書き込みとPHP実行が反応速度の遅さに影響してそうですね。

タイトルとURLをコピーしました