herokuでhhvmを使ってWordPressを動かしてみる
herokuが正式にPHPへの対応を発表し、hhvm環境を提供したとのことです。
http://www.publickey1.jp/blog/14/herokuphpfacebookhiphop_vm.html
hhvmについては、以前の記事でパフォーマンスを調べてみたことがあったので、今回はheroku上にWordPressをインストールして調査してみたいと思います。
WordPressをインストール
標準のWordPressを使用しMySQL(ClearDB)で試してみます。
ClearDBについては、こちらをご参考下さい。
※ClearDBを使用するには、クレジットカードの登録が必要です。
まずは、herokuにアプリケーションを作成します。
$ heroku create
mighty-hoge-xxxxというアプリケーションが作成されたので、cloneしてきます。
(アプリケーション名は適宜読み替えて下さい。)
$ git clone git@heroku.com:mighty-hoge-xxxx.git
mighty-hoge-xxxxディレクトリが作成されるので、この中にWordPressを解凍します。
$ wget http://ja.wordpress.org/wordpress-3.9-ja.zip $ unzip wordpress-3.9-ja.zip $ mv wordpress/* mighty-hoge-xxxx/
ClearDBのadd-onをインストールします。
$ cd mighty-hoge-xxxx $ heroku addons:add cleardb
データベース接続情報の設定
データベースの接続情報を取得します。
$ heroku config | grep CLEARDB_DATABASE_URL
CLEARDB_DATABASE_URLの内容が表示されるので、適宜情報を抜き出してwp-config.phpに記載します。
CLEARDB_DATABASE_URLのフォーマットは下記のような感じです。
CLEARDB_DATABASE_URL: mysql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}/{DB_NAME}?reconnect=true
git pushする
ひとまず、composer.jsonを下記のように作成します。
hhvmを使用しない環境です。
{ "require": { "ext-mbstring": "*", "ext-gd": "*" } }
git でcommit、pushしておきます。
$ git add ./ $ git commit -m 'first commit' $ git push origin master
http://mighty-hoge-xxxx.herokuapp.com/
にアクセスすると見慣れたWordPressの初期設定画面が表示されるはず。です。
あとは、WordPressの初期設定を行って、試しに確認用の記事を投稿してみてください。
hhvmを有効にする
composer.jsonを下記のように修正して、commit、pushします。
{ "require": { "hhvm": "3.0.1" } }
ブラウザでアクセスしてみると、同じようにWordpressの画面が表示される、はず。です。
dashboardで確認してみると、確かにhhvm上で動作しています。
投稿や、画像のアップロードも問題無さそうです!
が、基本的にherokuではデプロイ毎にgitで管理されていないファイルは消えてしまうようです。
そのあたりの対応は、下記のページをご参考下さい。
http://blog.mah-lab.com/2013/05/04/wordpress-on-heroku-file-upload/
ベンチマークを取ってみる
早速ベンチマークを取ってみます。
方法は、以前と同様にabでやってみます。
通常編
This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking mighty-hoge-xxxx.herokuapp.com (be patient).....done Server Software: Apache/2.4.9 Server Hostname: mighty-hoge-xxxx.herokuapp.com Server Port: 80 Document Path: /?p=31 Document Length: 11589 bytes Concurrency Level: 10 Time taken for tests: 12.638 seconds Complete requests: 100 Failed requests: 0 Write errors: 0 Total transferred: 1189500 bytes HTML transferred: 1158900 bytes Requests per second: 7.91 [#/sec] (mean) Time per request: 1263.753 [ms] (mean) Time per request: 126.375 [ms] (mean, across all concurrent requests) Transfer rate: 91.92 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.3 0 1 Processing: 653 1240 538.3 1065 2841 Waiting: 604 1176 521.8 1000 2676 Total: 653 1241 538.4 1066 2842 Percentage of the requests served within a certain time (ms) 50% 1066 66% 1322 75% 1584 80% 1707 90% 2199 95% 2255 98% 2357 99% 2842 100% 2842 (longest request)
hhvm編
This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking mighty-hoge-xxxx.herokuapp.com (be patient).....done Server Software: Apache/2.4.9 Server Hostname: mighty-hoge-xxxx.herokuapp.com Server Port: 80 Document Path: /?p=31 Document Length: 11589 bytes Concurrency Level: 10 Time taken for tests: 9.081 seconds Complete requests: 100 Failed requests: 0 Write errors: 0 Total transferred: 1189592 bytes HTML transferred: 1158900 bytes Requests per second: 11.01 [#/sec] (mean) Time per request: 908.117 [ms] (mean) Time per request: 90.812 [ms] (mean, across all concurrent requests) Transfer rate: 127.93 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.1 0 0 Processing: 559 872 198.4 876 2314 Waiting: 558 863 155.4 869 1634 Total: 560 872 198.5 876 2314 Percentage of the requests served within a certain time (ms) 50% 876 66% 913 75% 943 80% 967 90% 1035 95% 1060 98% 1256 99% 2314 100% 2314 (longest request)
1.3倍程?
何回かトライしたものの結構数値のブレがあったので、「ぼちぼち速くなったんじゃない?」ぐらいの感じで。
あまり厳密にテストすると、herokuサーバー(aws?)へ負荷をかけまくってしまうので、止めておきます。
結果
heroku + hhvmで、WordPressはひとまずは動きそうな感じです。
かなり尖った環境かと思うので、全てのWordPressの機能が問題無く使えるかは分かりませんが…
パフォーマンスも若干向上してそうですが、あまり明確な差は感じられませんでした。
んー、なんか設定等でミスってたかな…
ただ、hhvmを使用した実例がどんどん出てくるかと思うので、様子を見て使ってみるのもおもしろいかと思います。
運用中にhhvmに乗り換えると、投稿した画像がどっかに行くかもしれないので、注意です!