はじめに
最近古くなったWebアプリケーションインフラの刷新プロジェクトをやっていて、AWSとGCPそれぞれのパフォーマンスが気になっていたところにIDCFのRDBサービスがリリースされたのでベンチマークを取ってみました。
ベンチマークしたのサービスは以下の4つで、すべてMySQL互換です。
ベンチマークログ、Terraformのコードは次のレポジトリにあります。
https://gitlab.com/nownabe/rdb-bench
TL; DR
おおむね、
IDCF > Aurora > Cloud SQL > RDS
でした。IDCFはやい。
ベンチマーク方法
ベンチマークツールはtpcc-mysqlとsysbenchを使いました。MySQLのパラメータはすべてサービスのデフォルトのままです。また、それぞれ計測は1回のみとなります。
構築
それぞれのクラウドでRDBのインスタンスとベンチマークをかけるクライアントとなるVMインスタンスを立ち上げました。
AWSとGCPの構築はTerraformで自動化してあります。
https://gitlab.com/nownabe/rdb-bench/tree/master/terraform
tpcc-mysql
tpcc-mysqlはPerconaが提供しているベンチマークツールで、TPC-Cというベンチマーク仕様の実装です。1
tpcc-mysqlでは以下の設定で計測をしました。
- Warehouseは50, 100
- 同時接続数は20, 40, 60, 80, 100
- ウォーミングアップ時間は300秒
- 計測時間は600秒
https://gitlab.com/nownabe/rdb-bench/blob/master/run-tpcc.sh
sysbench
sysbenchはLuaスクリプトでベンチマークを定義できるベンチマークツールです。CPUやメモリなどに加えて、MySQLとPostgreSQLの性能も計測できます。
sysbenchでは以下の設定で計測をしました。
- シナリオはoltp_read_write.lua
- Table sizeは10k, 100k, 1m
- Threadsは2, 4, 8, 16, 32, 64, 128, 256
- 計測時間は300秒
https://gitlab.com/nownabe/rdb-bench/blob/master/run-sysbench.sh
結果
細かい結果が気になる方はレポジトリにログが全部あるので見てみてください。
インスタンスタイプ
それぞれのサービスで次の表のインスタンスタイプを使いました。
サービス | タイプ | vCPU | Memory |
---|---|---|---|
RDS | db.r4.2xlarge | 8 | 61 |
Aurora | db.r4.2xlarge | 8 | 61 |
Cloud SQL | db-n1-highmem-8 | 8 | 52 |
IDCF RDB | highmem.XL64 | 8 | 64 |
tpcc-mysql
RDSはデータのロードがおそすぎて待ち時間がやばかったのでWarehouse = 100は計測してません。
sysbench
IDCFはデフォルトでmax_connections
が151だったのでThreads = 256は計測できていません。ちなみに、RDSは5100、Auroraは3000、Cloud SQLは4000でした。
まとめ
IDCFめっちゃ速いですね。 Auroraもさすがという感じで、ある程度トラフィックがあるようなサービスだとコスパ的にもわざわざAWSでRDSを選択する意味はあまりなさそうです。 Cloud SQLは概ねRDSよりはやくて、特にデータが多くて同時接続数が多いときが得意そうです。
-
厳密ではないらしい ↩︎