たんたんめん日記

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

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

台北に遊びに行ってきた話

GWで台北に遊びに行ってきました。今回で台北は7回目ぐらいです。

旅行ブログ的なものは書いたことが無いんですが、ネット関連の情報をまとめてみました。

通信環境

  • iOS7のバックグラウンド通信の仕様が良く分からんです。
    国内では気にしませんが、海外でしらんうちに通信されるのは怖い…

  • SoftBankの海外パケホの上限は¥2980みたいです。
    それなら、海外用Wifi端末をレンタルした方が安いんじゃないかと。
    バックグラウンド通信に怯えなくて良いし。

  • ということで、イモトのwifiをレンタルしました。
    最初は宅急便受取・空港での返却のつもりだったのですが、宅急便が前日着ということが発覚。

  • 受け取れなかったらどうすんの?ということで、受け取りも空港に変更しました。
    1日680円(台湾の場合)のようなので、かなり割安のはず。
    ただし直近3日間で400Mの上限設定があるようです。

ホテル

  • サンルートホテル 台北ネットから予約
    前に利用したことがあるので、ホテル周辺もだいたい分かるし、日本系のホテルなのでなんとなく安心感があります。
    ちなみに地下は大戸屋

  • 昨年の夏に全室無線LANに対応したらしいです。これはかなり心強かった!

航空券

  • 航空券はExpedia等を見まわったけど、最終的にJALWebページで直接予約。
    若干安かったので。
  • 1月頃に予約したので、たぶん早割的なプランだったのかなーと思います。

役立ったアプリやサイト

  • taiwanyo 台湾遊
    • 食べログ的アプリです。
    • 自分の周りの旨い店などを教えてくれます。
  • 乗換案内 台北
    • 乗り換え案内 + 路線図 + 駅ごとの情報
    • 基本的に地下鉄で移動したので、なんだかんだ良く使いました。
  • Google Maps
    • とにかく必須。今どこにいて、地下鉄の最寄り駅がどこなのか、日本で使う時と変わらないぐらいの情報量があります。
    • タクシーに乗る時も、変に遠回りしてたりするとすぐに分かって便利です。
  • taipei navi
    • 台北の観光情報が詰まっているサイト。オプショナルツアーの予約も出来ます。

海外旅行保険

  • 旅行前日まで加入を忘れてました。
  • ネットで当日でも加入出来るらしいので利用してみました。
    検索で一番上に出てきた「損保ジャパン」の「off!」というやつに加入。
  • ファミリータイプ(3人分)で¥4200程でした。
    なんとなく割安な印象です。

Uber

Uberについてはこちらの記事をご参考下さい…

  • 台北でもUber利用可能です。
  • Uberを立ち上げると、だいたい4台程度が動いている様子でした。
  • ひとまず呼んでみたところ、すぐにドライバーから自分のiPhoneに電話かかってきました。
    「中国語しゃべれるか?」と聞かれたので、「英語をちょっと」と答えると「OK、ちょっと待ってな!」的なことを言われて電話が切れました。
  • 迎車をお願いすると、頼んだ車が今どこを走っているのか、また画面下部にドライバーの顔写真、車種、ナンバーが表示されます。
    車種はなんとベンツ。ええですね。
  • ただ、7分で到着と表示されてましたが、20分ぐらいかかりました…
    道の混み具合とかもあるかと思うんですが、いつもこんな感じなのか、たまたまなのか…
  • しばらく待っていると、表示されていたナンバーのベンツが到着。
    運転手さんはとても親切で、土砂降りの雨だったのに、出てきてくれてドアを開けてくれました。子供がいたのでかなり助かりました。
    感謝。

  • 料金メーターは付いていませんでした。
    まあ、料金についてはWebページに掲載されているので、だいたいの料金は把握出来るかと思います。

  • ただ、請求書が来るまでちゃんとした料金が分からないのでドキドキしました。結局、請求額は普通のタクシーの1.5倍ぐらいでした。
    ベンツ&運転手さんのホスピタリティーの極上さで、次も利用したいと思いました!

帰国後の感想

  • エクスコムのwifi端末は、2時間ほどしかバッテリーが持たないらしいです。
    なので、ネットを使うときだけ端末の電源をONして使い終わったらOFFしてました。

  • ただこの使い方だと、ちょっと調べたい時とか、めんどかったです。
    wifi端末に合ったUSBケーブルを持っていけば良かった…

  • MySoftbankから請求予定額を見ると「海外パケットし放題」が5,000円強で記載されていました。
    ちょこちょことキャリア経由で接続してたからかと思いますが、案外高額になってしまったな、という印象です。

おまけ - VISAデビットカードで現金を引き出してみた

会社用MacBookAirで使っているアプリ達

よくMacに入れてるアプリの記事を見かけるので、自分も乗っかってみます。

会社ではMacBookAir 11"を使用しているのですが、これに入れてよく使っているアプリ達です。

環境的には、自分以外ほぼWindowsです。なので、Windowsと仲良くするというのが前提だったりします。

有料アプリ

  • Microsoft Office 2011 for Mac

    http://www.microsoft.com/japan/mac
    お決まりのOffice。 会社では必須です。

  • Byword

    http://bywordapp.com/

    Markdownエディタです。自動インデント等、エディタとしての機能が充実しています。 以前記事を書かせて頂いたのですが、最近は、会議や勉強会のメモをBywordで、手順書など後で変更する可能性のあるものはwri.peで書いています。

  • phpStorm

    http://www.jetbrains.com/phpstorm/

    PHPerとしては持っていたいIDE。開発環境としても優秀ですが、GitやSubversionのクライアントとしても分かりやすい表示で良い感じです。

  • Versions

    http://versionsapp.com/

    会社はSubversion。クライアントが必要なんで購入したんですが、WindowsのToitoiseSVNを経験すると、やはり使いにくい感が…。なので「オススメ」ではないかもです。

    単純なcommitやupdateする時は、ターミナルを立ち上げてコマンドを打った方が早いです。
    Macで一番良いSubversionクライアントは、案外phpStormかもしれない…

定番アプリ

  • iTerm2

    http://www.iterm2.com/

    標準のターミナルに変わる定番アプリです。

  • RemoteDesktopConnection

    http://www.microsoft.com/ja-jp/download/details.aspx?id=18140

    Windows Serverの管理業務もあるので必須になっています。

  • GenyMotion

    http://www.genymotion.com/

    Androidエミューレーション動作環境です。 実機を持ってないので、これで取り敢えずAndroid版の動作を見たりしてます。

  • Seaquel Pro

    http://www.sequelpro.com/

    MySQLクライアントです。日本語化もされています。 UIも洗練されていて、今のところ不自由は無いです。 個人的には、インデックスを作成しやすかったり、CREATE文をすぐに取り出せたりするところが気に入ってます。

  • VNC Viewer

    http://www.realvnc.com/

    社内にちょこちょこあるデスクトップが立ち上がっているLinuxに接続する時に必要になります。
    物理マシンにLinuxを入れる時はデスクトップもインストールするようにしてます。深い意味は無いですが、使いやすいかな、と。

ユーティリティ系アプリ