AWS Alibaba Azure GCPの仮想サーバー性能比較

# 仮想サーバーのベンチマーク
マルチクラウドが叫ばれる昨今、パブリッククラウドを比較検討する機会も多くなってきたかと思います。AWS、Alibaba、Azure、GCP4社それぞれの仮想マシンに対してUnixBenchを実行してみましたので、その値を共有します。

ただし、本番環境を想定した比較検討をする上で最も大切なのは「**ユースケースの明確化**と**システム要件に対する優先度設定**」です。その為、本値のみでクラウドの優劣を判断するのは時期尚早である事を理解いただき、議論する上でのたたき台の1つとして参照くださればと思います

## UnixBench実施要項
<details>
<summary>クリックして詳細を確認する</summary><div>

- 対象は１社につき８vCPUのLinuxインスタンスを3種類（汎用、CPU特化、メモリ特化）  
    - AWS: m5.2xlarge, c5.2xlarge, r5.2xlarge
    - Alibaba: ecs.g5.2xlarge, ecs.c5.2xlarge, ecs.r5.2xlarge
    - Azure: D8_v3, F8s v2, E8_v3
    - GCP: n1-standard-8, n1-highcpu-8, n1-highmem-8  
- 後述するUnixBenchを２時間のインターバルで10回/台実施、平均値を算出
    - スコア値として「System Benchmarks Index Score (Multi Core)」を採用
- 実施時期は2019年4月
- Ansible経由でUnixBench実行
<details>
<summary>Ansibleのyamlを確認する</summary><div>


```yml
- name: Instance Setup
  hosts: alibaba
  remote_user: root 
  tasks:
    - name: Package Upgrade
      apt: name={{item}} state=present update_cache=no
      with_items:
          - build-essential
          - git 
    - name: directory
      file:
        path=git
        state=directory
        owner=root
        group=root
    - name: git_clone
      git: 
        repo: https://github.com/kdlucas/byte-unixbench.git
        dest: ~/git/
    - name: make
      shell: make
      args:
        chdir: ~/git/UnixBench
      become: true

- name: Start Benchmark to All the hosts 01
  hosts: alibaba
  remote_user: root
  tasks:
    - name: run benchmark
      shell: nohup bash -c "./Run -i 5 >> /tmp/alibaba_benchmark.log"
      args:
        chdir: ~/git/UnixBench

- name: Interval on localhost 01
  hosts: localhost
  connection: local
  tasks:
    - name: interval
      shell: sleep 1800

- name: Start Benchmark to All the hosts 0x # ２０までコピペ実行しました。。
  hosts: alibaba
  remote_user: root
  tasks:
    - name: run benchmark
      shell: nohup bash -c "./Run -i 5 >> /tmp/alibaba_benchmark.log"
      args:
        chdir: ~/git/UnixBench
```
</div></details>

</div></details>

## UnixBenchスコア結果
|  	| AWS 	| Alibaba 	| Azure 	|  GCP	|
|------------	|---------	|---------	|---------	|---------	|
| 汎用 	| 5085.13 	| 4932.21 	| 4987.68 	| 4228.00	|
| CPU 	| <font color="MediumVioletRed">5471.57</font> 	| 4967.28 	| 4943.25 	| <font color="DeepSkyBlue">3859.73</font>	|
| メモリ 	| 5013.38 	| 4913.41 	| 5040.79 	| 4168.85	|

<img width="606" alt="スクリーンショット 2019-05-20 14.52.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139731/d7155014-e81e-e458-5dfa-c37ed4a3fa45.png">

### 考察
- AWS、Alibaba、AzureのCPUコア性能はほぼ同じ
- AWSのCPUタイプは他の汎用やメモリに比べて良いコアを使っている様子
- GCPだけ他社より20%程度低めのスコア

## コスト比較
<details><summary>参照URL（2019年4月末時点）※値が低い程良い</summary>
<div>
https://aws.amazon.com/jp/ec2/pricing/on-demand/
https://www.alibabacloud.com/product/ecs
https://azure.microsoft.com/ja-jp/pricing/calculator/
https://cloud.google.com/products/calculator/?hl=ja
</div>
</details>
###従量課金（1時間）

| 	| AWS 	| Alibaba 	| Azure 	|  GCP	|
|------------	|---------	|---------	|---------	|---------	|
| 汎用 	| 0.496 	| 0.480 	| 0.516	| 0.488	|
| CPU 	| 0.428 	| 0.384 	| 0.428 | <font color="MediumVioletRed">0.364</font>	|
| メモリ 	| 0.608 	| 0.608 	| <font color="DeepSkyBlue">0.640</font> | 0.607	|

<img width="605" alt="スクリーンショット 2019-05-20 12.32.34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139731/403c2627-afed-2c66-cf72-5640b7d7d589.png">

###事前払い（1年間）
| | AWS 	| Alibaba 	| Azure 	|  GCP	|
|------------	|---------	|---------	|---------	|---------	|
| 汎用 	| 235.417 	| 238.560 	| 237.500 	| 249.370	|
| CPU 	| 209.583 	| 202.360 	| <font color="MediumVioletRed">185.080</font> 	| 186.000	|
| メモリ 	| 261.000 	| 279.600 	| 274.750 	| <font color="DeepSkyBlue">310.070</font>	|

<img width="596" alt="スクリーンショット 2019-05-20 16.15.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139731/41ed1612-b04d-8d9e-40ad-92512f59fa78.png">


### 考察
- 全社共通でメモリ＞汎用＞CPUの順で値段が高い
- Azureは従量課金は高めだが、事前払いにした時の金額が低い
- 逆にGCPは従量課金は安いが、事前払い（自動割引）のメリットが相対的にやや薄い

## コストパフォーマンス比較
※数値が高い程、コストパフォーマンスが高い

###従量課金コストパフォーマンス（スコア/金額）

| | AWS 	| Alibaba 	| Azure 	|  GCP	|
|------------	|---------	|---------	|---------	|---------	|
| 汎用 	| 10252.278 	| 10275.438 	| 9666.047 	| 8663.934	|
| CPU 	| 12784.042 	|  <font color="MediumVioletRed">12935.625</font> 	| 11549.650 	| 10603.654	|
| メモリ 	| 8245.691 	| 8081.266 	| 7876.234 	| <font color="DeepSkyBlue">6870.221</font>	|


<img width="599" alt="スクリーンショット 2019-05-20 12.32.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139731/7406b8fc-9378-9392-8d65-c3cdafbb50be.png">



###事前払いコストパフォーマンス（スコア/金額）
| | AWS 	| Alibaba 	| Azure 	|  GCP	|
|------------	|---------	|---------	|---------	|---------	|
| 汎用 	| 21.601 	| 20.675 	| 21.001 	| 16.955	|
| CPU 	| 26.107 	| 24.547 	|  <font color="MediumVioletRed">26.709</font> 	| 20.751	|
| メモリ 	| 19.208 	| 17.573 	| 18.347 	| <font color="DeepSkyBlue">13.445</font>	|

<img width="601" alt="スクリーンショット 2019-05-20 16.40.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139731/c0f8f61b-591b-f5bd-ab91-eabd1d00897e.png">

## 補足比較
- AWSはコミュニティが最も活発的＝学習コストが低い
- Alibabaは事前払いの価格にシステムディスクも同梱されている＝ディスク費用も低減
- AzureはWindowsサーバーでのコスパがより良くなるはず（今回スコープ外）
- GCPは事前払いでなく自動割引なので、購入手続き分の運用工数が減る

## ユースケースの考察
- システム環境は得てして、事前払いのインスタンスよりも従量課金のインスタンスの方が多くなるので、Alibabaがコストパフォーマンス一番良さげかな？