たんたんめん日記

ソシャゲ関連のなんでもやさん備忘録

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上で動作しています。

f:id:dnond:20140516114829p:plain

投稿や、画像のアップロードも問題無さそうです!

が、基本的に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に乗り換えると、投稿した画像がどっかに行くかもしれないので、注意です!