Laravel4、EC2スモールインスタンスで動かしてみる

Tags : Laravel4  

前回の俺のLaravelがこんなに遅いわけないで気になっていたことがありました。

Laravelは細かいクラスファイルをまとめて大きな1ファイルにすることで、実行速度を上げる「最適化」をコマンド一つで行えるようになっています。EC2上では最適化していない場合と、している場合の差がとても大きいのです。つまり、最適化の効果が抜群です。

先の記事では、EBSの仮想化で、各ファイルへのアクセスする場合、オーバーヘッドがかかっているため、細かいファイルへ数多くアクセスする通常状態が、特に遅くなっているのであろうと推測しました。そこで、EBSではない通常のハードディスクなら、もっと早くなるだろうと考えていました。

結論から言いますと、EC2のディスク、インスタンスストアも仮想化されているので、速度的には変化ありませんでした。ドキュメントにはEBSのほうが早いというニュアンスで書かれている部分がありました。別のドキュメントには、ディスクは最初のアクセスが初期化のために遅いと書かれていました。それを防ぐためにはddで0埋めろとのことです。確かに最初は時間かかりましたが、ディスクだけのせいではないでしょうから、追跡は困難です。(そこまで、やる気はありません。)

EC2スモール・インスタンス

マイクロインスタンスではインスタンスストアが使用できません。そのためスモールインスタンスで確認しました。マイクロインスタンス以外は一年間のお試し範囲外ですが、今回は2時間、アメリカのオレゴンで立ち上げたので、かかったのは12セント、12円程度です。:D

わかりづらいのは、インスタンスストアはEBSのボリューム設定から追加指定しますが、ボリュームとして管理画面には表示されません。インスタンスを起動し、指定したデバイス、今回は/dev/sdbが存在しているかで確認し、やっとできているのだとわかりました。

また、自動的にマウントされるのかどうかがドキュメントに書かれていません。名称だけは書かれています。結局、/etc/fstabを見て、/media/ephemeral0にマウント済みだとわかりました。今考えるとmountコマンド使って確認しても良かったですね。ちなみに、ephemeralは儚いという意味だそうです。永続デバイスではなく、インスタンスを停止すると、消えてなくなります。

比較

最初にEBS上にLaravelをインストールしました。何度か再表示し、表示された速度を読み取る方法での検証です。

最適化前は75ms〜115ms程度で、平均は100ms弱、最適化後は15ms〜50msでした。

次に、Laravelディレクトリーをまとめて、ephemeral0へ写し、Apacheの設定ファイルでドキュメントルートを変更しました。

最適化前は90ms〜100msで、平均は100ms程度、最適化後は15ms〜50msです。

最適化時はどちらも、早い方の数字か遅い方の数字の速度へ両極端に別れる傾向があり、あまり中間値の30ms程度の速度は出ませんでした。

結論としては、どちらも変わらずです。純粋なディスクでない仮想化されたものであるため、EBSと変わりませんでした。

LaravelをEC2で使用する場合は、特に最適化を忘れずにという、結論ですね。