WEBサイト用にサーバーを1台用意しようと思うのですが、使いなれた AWS EC2 にするか、ここのところ勢いがある Google Cloud Platform の Compute Engine にするかで迷ってます。サーバー費用は少ないお小遣い(^^;) から出さなければならないので、慎重に選びたいところです。そこで今回は、AWS EC2 と GCE(Google Compute Engine)を「徹底的」にベンチマークして性能を比較してみました。
比較するサーバーのスペックと月額料金
アクセス数があまりないWEBサイトなので、実際に使おうと思っている小さめのサーバーで比較してみます。月額料金は、どちらも東京リージョン2017年4月5日時点の料金での概算です、同じくらいのスペックでも Google Compute Engine には継続利用割引があるため多少安くなります。
AWS EC2
- マシンタイプ:t2.small(vCPU x 1 + メモリ 2.0 GB)オンデマンドインスタンス
- ストレージ:SSD 10GB
- 月額料金:$24.56(730時間利用)
- インターネットへのデータ送信:$0.14/GB
Google Compute Engine
- マシンタイプ:g1-small(vCPU x 1 + メモリ 1.7 GB)
- ストレージ:SSD 10GB
- 月額料金:$18.66(730時間利用)
- インターネットへのデータ送信:$0.12/GB(香港以外の中国とオーストラリアを除く)
ベンチマーク概要
以下のベンチマークテストを1時間ごとに行い、1日(24時間)の結果を比較します。各ベンチマークテストは、同じ時間帯に実行されないようにスケジュールしています。ベンチマークの詳細な手順はこの記事の後半「ベンチマーク設定手順」をご参照ください。
- CPU性能(UnixBench の System Benchmarks Index Score)
- Read ディスク性能(hdparm を10回実行した結果の平均値)
- Write ディスク性能(ddコマンドで512MBのデータを10回書き込んだ結果の平均値)
- MySQLのTPS「トランザクション毎秒」(SysBench の transactions の値)
ベンチマーク結果
ベンチマークテストを実施した期間は 2017-03-29 06:00 〜2017-03-31 04:00 です。丸一日のデータがとれた3月30日のベンチマーク結果で比較します。
CPU性能(UnixBench)
定番のベンチーマークツール UnixBench の System Benchmarks Index Score です。この値が大きいほどCPUの性能が高いと言えます。
(System Benchmarks Index Score)
日時 | AWS EC2 | Google Compute Engine |
---|---|---|
2017/3/30 0:00 | 518.2 | 869.5 |
1:00 | 524.0 | 877.3 |
2:00 | 528.7 | 874.0 |
3:00 | 518.7 | 878.1 |
4:00 | 523.9 | 877.5 |
5:00 | 523.4 | 847.0 |
6:00 | 518.6 | 906.8 |
7:00 | 519.9 | 967.4 |
8:00 | 517.9 | 957.6 |
9:00 | 522.2 | 953.3 |
10:00 | 521.0 | 933.4 |
11:00 | 519.2 | 937.5 |
12:00 | 511.5 | 949.2 |
13:00 | 644.4 | 950.2 |
14:00 | 518.6 | 949.5 |
15:00 | 517.6 | 928.6 |
16:00 | 515.5 | 892.6 |
17:00 | 516.9 | 895.9 |
18:00 | 514.5 | 904.9 |
19:00 | 514.6 | 937.1 |
20:00 | 512.9 | 941.4 |
21:00 | 514.4 | 936.0 |
22:00 | 519.7 | 942.3 |
23:00 | 514.1 | 946.5 |
平均 | 523.8 | 918.9 |
上の計測結果では Google Compute Engine があきらかにCPU性能がよさそうですが、AWS EC2 の t2.small インスタンスには「CPUクレジット」という仕組みがあり、このクレジットに残りがあれば、CPU性能が一定時間のあいだ高くなります。詳しくは以下の公式ガイドを参照してください
T2 インスタンス - Amazon Elastic Compute Cloud
UnixBench の計測を開始した直後の System Benchmarks Index Score です。2回目の計測までは CPUクレジットが残っていたので Google Compute Engine よりも高い性能が出ています。短時間にアクセスが集中するWEBサイトなどに「CPUクレジット」は便利な仕組みですね。
日時 | AWS EC2 | Google Compute Engine |
---|---|---|
2017/3/28 6:00 | 1414.1 | 851.2 |
7:00 | 1395.0 | 895.3 |
8:00 | 804.7 | 901.1 |
9:00 | 690.5 | 887.3 |
10:00 | 701.1 | 856.7 |
Read ディスク性能
SSDの読み取り速度、1回の計測値は hdparm(ディスクの読み取り性能を計測するためのコマンド)を10回実行した結果の平均です。
(単位:MB/秒)
日時 | AWS EC2 | Google Compute Engine |
---|---|---|
2017/3/30 0:40 | 79.71 | 79.39 |
1:40 | 81.19 | 79.17 |
2:40 | 81.14 | 79.36 |
3:40 | 81.19 | 79.13 |
4:40 | 81.14 | 79.10 |
5:40 | 81.08 | 78.96 |
6:40 | 79.54 | 79.26 |
7:40 | 81.12 | 79.21 |
8:40 | 81.14 | 79.22 |
9:40 | 80.11 | 79.28 |
10:40 | 81.14 | 79.27 |
11:40 | 81.14 | 79.23 |
12:40 | 81.14 | 79.06 |
13:40 | 81.08 | 79.38 |
14:40 | 81.14 | 79.25 |
15:40 | 81.13 | 79.30 |
16:40 | 81.14 | 79.32 |
17:40 | 81.14 | 79.17 |
18:40 | 81.08 | 79.22 |
19:40 | 81.14 | 79.41 |
20:40 | 81.14 | 79.24 |
21:40 | 81.17 | 79.21 |
22:40 | 81.14 | 79.21 |
23:40 | 81.13 | 79.08 |
平均 | 80.97 | 79.23 |
ディスクの読み取り性能は同じように見えますが、特性が大きく異なります。上の計測結果は、1時間ごとに hdparm を10回実行してその計測結果の平均値をとっていますが、hdparm の実行1回ごとの計測結果は以下のようになっています。(100回連続して実行した計測結果です)
(単位:MB/秒)
No | AWS EC2 | Google Compute Engine |
---|---|---|
1 | 81.23 | 245.95 |
2 | 81.47 | 164.68 |
3 | 80.58 | 47.93 |
4 | 81.45 | 47.77 |
5 | 81.14 | 47.28 |
(省略) | ||
96 | 81.14 | 47.36 |
97 | 81.14 | 47.77 |
98 | 81.14 | 47.39 |
99 | 81.14 | 48.00 |
100 | 81.14 | 47.36 |
2回目の計測までは Google Compute Engine が、かなり高い読み取り性能を出していますが3回目以降は、AWS EC2 の半分くらいの性能になります。ディスクの読み取りが少ないWEBサーバーなどでは Google Compute Engine が有利ですが、ファイルサーバーなど継続的にディスクの読み取りがある場合は AWS EC2 が有利になります。
(参考資料)永続ディスクとローカル SSD のパフォーマンスの最適化 | Compute Engine ドキュメント
Write ディスク性能
SSDの書き込み速度、1回の計測値はddコマンドで512MBのデータを10回書き込んだ結果の平均です。
ディスクの書き込み性能については、AWS EC2 が Google Compute Engine の倍くらいの性能があるようです。
(単位:MB/秒)
日時 | AWS EC2 | Google Compute Engine |
---|---|---|
2017/3/30 0:45 | 75.5 | 36.7 |
1:45 | 75.8 | 36.4 |
2:45 | 75.7 | 36.5 |
3:45 | 78.8 | 36.2 |
4:45 | 74.3 | 36.9 |
5:45 | 79.0 | 37.9 |
6:45 | 78.1 | 36.4 |
7:45 | 75.5 | 36.4 |
8:45 | 73.9 | 37.1 |
9:45 | 78.6 | 37.1 |
10:45 | 75.8 | 37.4 |
11:45 | 75.5 | 38.8 |
12:45 | 75.9 | 38.5 |
13:45 | 75.2 | 37.4 |
14:45 | 80.8 | 37.8 |
15:45 | 79.2 | 37.0 |
16:45 | 81.9 | 36.4 |
17:45 | 74.4 | 36.5 |
18:45 | 75.2 | 37.6 |
19:45 | 78.9 | 36.4 |
20:45 | 79.3 | 37.7 |
21:45 | 75.4 | 36.8 |
22:45 | 79.1 | 37.6 |
23:45 | 74.4 | 37.5 |
平均 | 76.9 | 37.1 |
MySQLのTPS(トランザクション毎秒)
MySQLのTPS(トランザクション毎秒)一般的にデータベース管理システムの性能はこのTPSで評価します。計測値は、SysBench の transactions の値です。
データベース管理システムの実行性能は、若干 Google Compute Engine の方が良さそうですね。
(単位:per sec)
日時 | AWS EC2 | Google Compute Engine |
---|---|---|
2017/3/30 0:50 | 269.90 | 290.29 |
1:50 | 276.52 | 288.12 |
2:50 | 271.59 | 294.17 |
3:50 | 280.83 | 300.38 |
4:50 | 280.01 | 280.66 |
5:50 | 277.29 | 292.35 |
6:50 | 271.62 | 311.67 |
7:50 | 283.28 | 315.34 |
8:50 | 278.96 | 307.93 |
9:50 | 274.42 | 310.14 |
10:50 | 281.76 | 308.17 |
11:50 | 274.73 | 314.11 |
12:50 | 273.94 | 322.92 |
13:50 | 275.73 | 310.41 |
14:50 | 270.38 | 308.11 |
15:50 | 274.74 | 328.54 |
16:50 | 271.06 | 301.50 |
17:50 | 272.45 | 306.71 |
18:50 | 269.97 | 325.68 |
19:50 | 272.27 | 334.13 |
20:50 | 275.61 | 331.80 |
21:50 | 267.36 | 330.82 |
22:50 | 273.38 | 338.21 |
23:50 | 272.41 | 332.39 |
平均 | 274.59 | 311.86 |
まとめと結論
各ベンチマーク結果の平均値をまとめました。性能と費用だけででみれば、早くて安い Google Compute Engine に軍配が上がりそうです。
ベンチマーク | AWS EC2 | Google Compute Engine |
---|---|---|
CPU性能 - System Benchmarks Index Score | 523.8 | 918.9 |
Read ディスク性能(MB/秒) | 80.97 | 79.23 |
Write ディスク性能(MB/秒) | 76.9 | 37.1 |
MySQLトランザクション毎秒(per sec) | 274.59 | 311.86 |
月額費用(概算) | $24.56 | $18.66 |
しかしサーバーの導入は、性能と費用以外に「実績・サポート・エコシステム」なども考慮する必要があります。このあたりはクラウドサービスの先駆者だけあってAWSが圧倒的に有利です。(あくまで私個人の見解です)
AWS EC2 | Google Compute Engine | |
---|---|---|
実績 | ◎ | △ |
サポート | ◎ | △ |
エコシステム | ◎ | △ |
もし仕事でサーバーを導入するのであれば、このくらいの性能と費用の差であれば AWS EC2 を選びます。ただ、今回は私個人のWEBサイトなのであまり「実績・サポート・エコシステム」を気にする必要がありません。費用をおさえられて性能もよさそうなので Google Compute Engine を使うことにしました。
ベンチマーク設定手順
AWS EC2 と Google Compute Engine どちらもまったく同じ手順で、ベンチマークを設定し計測しました。サーバーOSは CentOS7.3 (1611) です。
はじめに、インストール済みのパッケージを最新版にアップデートし、開発ツールなど基本的なパッケージをインストールします。
yum -y groupinstall base
yum -y groupinstall development
yum -y groupinstall network-tools
ベンチマーク結果ログの保存先を作成
CPU性能(UnixBench)
UnixBench のインストール
cd /usr/local/bin/
wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/byte-unixbench/UnixBench5.1.3.tgz
tar zxvf UnixBench5.1.3.tgz
cd UnixBench
make
・ベンチマーク実行スクリプトの作成
vi /usr/local/bin/unixbench.sh
#!/bin/sh - LOG='/var/log/bench/unixbench.log' cd /usr/local/bin/UnixBench echo '==================== START ' `date` '====================' >> $LOG ./Run >> $LOG 2>&1 echo '==================== END ' `date` '====================' >> $LOG echo '' >> $LOG exit 0
実行権限を設定
・crontab に登録
crontab -e
Read ディスク性能(hdparm)
hdparm のインストール
・ベンチマーク実行スクリプトの作成
vi /usr/local/bin/io_read.sh
#!/bin/sh - LOG='/var/log/bench/io_read.log' # # ディスクのデバイス名を指定 # DISK='/dev/sda1' echo '==================== START ' `date` '====================' >> $LOG for i in `seq 10` do echo 1 > /proc/sys/vm/drop_caches /sbin/hdparm -t $DISK >> $LOG 2>&1 done echo '==================== END ' `date` '====================' >> $LOG echo '' >> $LOG exit 0
実行権限を設定
・crontab に登録
crontab -e
Write ディスク性能(dd)
・ベンチマーク実行スクリプトの作成
vi /usr/local/bin/io_write.sh
#!/bin/sh - LOG='/var/log/bench/io_write.log' OF='/tmp/io_write' /bin/mkdir $OF echo '==================== START ' `date` '====================' >> $LOG for i in `seq 10` do /bin/dd if=/dev/zero of=${OF}/${i} bs=1M count=512 >> $LOG 2>&1 done echo '==================== END ' `date` '====================' >> $LOG echo '' >> $LOG /bin/rm -r $OF exit 0
実行権限を設定
・crontab に登録
crontab -e
MySQLのTPS(SysBench)
SysBench についての詳細は「SysBench で MySQL の性能測定(ベンチマーク)」をご参照ください。
SysBench のインストール
rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7
yum -y install sysbench
MySQL のインストールと起動
yum -y install mysql-server
systemctl start mysqld
MySQL の初期設定
mysql_secure_installation
SysBench用のDBとユーザーの作成
CREATE DATABASE sbtest;
GRANT ALL ON sbtest.* TO 'sbtest'@'localhost' IDENTIFIED BY '<パスワード>';
計測用テーブルの作成
--test=oltp \
--db-driver=mysql \
--oltp-table-size=1000000 \
--mysql-password=<パスワード> \
prepare
・ベンチマーク実行スクリプトの作成
vi /usr/local/bin/sysbench.sh
#!/bin/sh - LOG='/var/log/bench/sysbench.log' echo '==================== START ' `date` '====================' >> $LOG /bin/sysbench \ --test=oltp \ --db-driver=mysql \ --oltp-table-size=1000000 \ --mysql-password=<パスワード> \ --num-threads=1 \ --max-requests=0 \ --max-time=300 \ --oltp-read-only=off \ run >> $LOG 2>&1 echo '==================== END ' `date` '====================' >> $LOG echo '' >> $LOG exit 0
実行権限を設定
・crontab に登録
crontab -e
以上で各ベンチマークテストが1時間ごとに実施され、結果が /var/log/bench/ ディレクトリ以下に出力されます。
おわりに
まったくの余談ですが、ふとしたきっかけから『キャズム Ver.2 増補改訂版 新商品をブレイクさせる「超」マーケティング理論』という本を読んでいます。内容をざっくり要約すると「商品をブレイクさせるには "キャズム" (深い溝という意味)を超えなければならない」というものです。
この記事を書いていて、キャズムを見事に超えた AWS と、それを追いかけて今まさにキャズムを越えようとしている Google Cloud Platform の姿が思い浮かびました。
コメント