Posted at
PHPDay 20

AWSでDrupalベンチマークしてみた

More than 3 years have passed since last update.


何の話?

デジタルサーカス社ではDrupalを推しCMSとしています。そして、Drupalをインストールするインフラとして特にお客さま希望が無ければAWSをお勧めしています。

ただ、AWSって時々インスタンスタイプが追加されたりなくなったりで、どの程度のパフォーマンスがあるのかの判断が難しい。

そんな訳で手軽にDrupalのベンチマークをする環境を作る方法を作りました。

ec2-drupal-benchmark


どうやってるの?

Vagrantvagrant-awsプラグインを使ってEC2インスタンスを自動構成できる様にします。

Drupalの実行に必要なApache, MySQL, PHPやDrupalそのものはChefで入れます。

Vagrantには複数のVMを定義できるのでインスタンスタイプ名でそれを起動出来る様にしてあげています。

$ vagrant status

Current machine states:

t2.micro not created (virtualbox)
t2.small not created (virtualbox)
t2.medium not created (virtualbox)
m3.medium not created (virtualbox)
m3.large not created (virtualbox)
m3.xlarge not created (virtualbox)
m3.2xlarge not created (virtualbox)
c3.large not created (virtualbox)
c3.xlarge not created (virtualbox)
c3.2xlarge not created (virtualbox)
c3.4xlarge not created (virtualbox)
c3.8xlarge not created (virtualbox)

This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`.

起動はこんな風に。

$ vagrant up t2.micro --provider=aws

インスタンスの作成 & 起動が完了するとChefが走ってApache, MySQL, PHPがインストールされ、MySQLユーザやデータベースが作成され、Drupalがインストールされます。

一式実行されたらhttp://IPアドレスでDrupalを使用することができます。


ベンチマーク結果

という訳でベンチマークしてみました。

ベンチマークはApache JMeterを使って、10スレッド、Ramp-UP期間10秒、ループ1,000回で実施しています。

ベンチマーク対象のDrupalにはコンテンツを1つ作って、そのコンテンツがヒットする様な検索結果のURLを使いました。

インスタンス
vCPU
メモリ
費用 *1
パフォーマンス *2
m3.medium比 *3
コスパ *4

t2.micro
1
1
0.020
38.9
211
1,945

t2.small
1
2
0.040
38.8
211
970

t2.medium
2
4
0.080
72.3
393
904

m3.medium
1
3.75
0.101
18.4
100
182

m3.large
2
7.5
0.203
49.8
271
245

m3.xlarge
4
15
0.405
94.1
511
232

m3.2xlarge
8
30
0.810
149.8
814
185

c3.large
2
3.75
0.128
52.9
288
413

c3.xlarge
4
7.5
0.255
101.4
551
397

c3.2xlarge
8
15
0.511
148.3
806
290

c3.4xlarge
16
30
1.021
182.9
994
179

c3.8xlarge
32
60
2.043
186.7
1,015
91

*1: 東京リージョンの価格。US$/1時間。

*2: 処理できたリクエスト/秒。

*3: m3.mediumのリクエスト/秒を100としたパフォーマンス。

*4: 1US$あたりのリクエスト/秒。


感想


  • t2.microとt2.smallの比較を見るに今回のテストではメモリ1Gを使い切れていないのでしょうね。t2.micro比でt2.mediumが丁度2倍なのでCPU性能がそのまま反映されています。

  • ぱっと見t2が最強に見えますが、t2はバーストパフォーマンスインスタンスなので長期的にこのパフォーマンスが出続けるわけではありません。m3やc3がt2比較で見劣りするのもそのせいでしょう。

  • m3とc3ではvCPUあたりの性能はほぼ同じに見えます。性能が4vCPUか8vCPUあたりで飽和している様に見えるので今回の想定規模の負荷であれば4vCPUか8vCPUで良いのかもしれません。そう言う意味でc3.4xlarge以上のインスタンスではもっと性能が出るのでしょう。

ベンチマーク手前までは簡単に持って行ける様になったのでみなさん是非ベンチマークして教えてください。


参考

各インスタンスタイプの説明。AWS公式より。

t2:


T2 インスタンスは、ベースラインを超えてバーストする能力がある CPU パフォーマンスのベースラインを提供する、バーストパフォーマンスインスタンスです。このファミリーのインスタンスは、CPU を頻繁または常にフルパワーで使用することはなくても、時折バーストが必要なことがあるアプリケーション(例: ウェブサーバー、開発者環境、小規模なデータベース)に最適です。


m3:


M3 インスタンスでは、定常パフォーマンスを実現し、低コストのプラットフォームで高レベルの一貫した処理パフォーマンスが得られるリソースのセットを顧客に提供します。このファミリーのインスタンスは、CPU とメモリのバランスの取れたパフォーマンスを必要としているアプリケーションに最適です。汎用インスタンスのパフォーマンスが効果を発揮するアプリケーションの例としては、エンコーディング、トラフィック量の多いコンテンツ管理システム、Memcached などがあります。


c3:


コンピューティング最適化インスタンス

このファミリーのインスタンスは、メモリ(RAM)に比べて CPU リソースが多く確保されており、大量の計算を行うアプリケーションに適しています。