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 の姿が思い浮かびました。








コメント