AWS EC2において性能のボトルネックになるポイント
目次
はじめに
本記事ではAWS EC2を使用した時に性能のボトルネックに成り得るポイントについて考察します。
私個人が調査した内容となりますので、必ずAWSのウェブサイトについてもご確認下さい。
ボトルネックに成り得るポイント
EC2
EC2は起動する際にインスタンスタイプを選択しているかと思いますが、インスタンスタイプ毎の性能は通常以下のように表記されます。(表記は一部のみ)
インスタンスサイズ | vCPU | メモリ(GiB) | インスタンスストレージ (Gib) | ネットワーク帯域幅 (Gbps) | EBS帯域幅 (Mbps) |
m5a.large | 2 | 8 | EBSのみ | 最大10 | 最大2,880 |
m5a.xlarge | 4 | 16 | EBSのみ | 最大10 | 最大2,880 |
この中で性能のボトルネックとなり得るのはネットワーク帯域幅とEBS帯域幅になります。
ネットワーク帯域幅
こちらは該当のEC2に対して送受信するデータの帯域の制限となります。
例えば 1秒間に合計で100MbyteのデータをEC2に対して送信していれば、その帯域の計算は
- 100[Mbyte] * 8[bit/byte] = 800[Mbit]
となりますので、帯域としては800Mbpsとなります。この計算値がEC2のネットワーク帯域幅以下である必要があります。
上記のm5a.largeのインスタンスタイプであれば、10Gbpsの帯域がありますので、800Mbpsぐらいの帯域であれば問題がない、ということになります。
EBS帯域幅
EBSはハードディスクやSSDといった所謂、記憶装置になります。EC2からハードディスク(SSD)へのアクセスの帯域幅の制限があります。
例えば、(あり得ない話ですが)EC2が受信したインターネットから通信データをすべてハードディスクに書き込むという処理を実施していた場合、ネットワーク帯域幅として800Mbpsの帯域が必要であれば、このEBS帯域幅についても同様に800Mbpsの帯域が必要になるとお考え頂けるかと思います。
こちらはあくまでEC2インスタンスから見た、EBSのボトルネックであることにご注意下さい。
※AWSではEC2とEBSもネットワークで接続されていますので、ハードディスク(SSD)のアクセスにはネットワーク帯域幅を使用することにはなりますが、本記事では触れません。
EBS
本記事では汎用SSDタイプの1つである、gp2と呼ばれるEBSボリュームを例に説明します。抜粋にはなりますが、以下のような表がgp2モジュールのスペックとして定義されています。
ボリュームタイプ | gp2 |
耐久性 | 99.8%~99.9% の耐久性 (0.1%~0.2% の年間故障率) |
ユースケース | 低レイテンシーのインタラクティブなアプリケーション 開発・テスト環境 |
ボリュームサイズ | 1GiB – 16TiB |
ボリュームあたりの最大IOPS | 16,000 |
ボリュームあたりの最大スループット | 250 MiB/秒 |
Amazon EBSマルチアタッチ | サポート外 |
ブートボリューム | サポート対象 |
この中で、EBSのボトルネックとなり得る箇所はEBSボリュームあたりの最大IOPSとEBSボリュームあたりの最大スループットとなります。
ボリュームあたりの最大IOPS
そもそもIOPSが何かというと、1秒あたりのEBSに対するリード・ライトアクセス回数だとお考え下さい。ではgp2の場合、EBSに対して16,000のリード・ライトアクセスが出来るかと言うとそういうわけではありません。(私も完全に間違っていました)
gp2の場合、正しくは利用しているEBSのボリュームサイズ(GB) * 3IOPSがEBSの最大IOPSとなります。つまり500GBであれば、1500 IOPSというわけです。上記の表中にある16,000という数字は5,334GB以上のEBSを利用した際の最大IOPSとなります。
つまり500GBのEBSであれば定常的に1500 IOPSを守る必要があるということになります。ただし、バースト的なリード・ライトのアクセスに対しては1日の中で一時的に 3000 IOPSにも対応することが可能です。このようなバースト的なリードライトに耐えられる時間もEBSのボリュームサイズで決まります。
EBSのボリュームサイズが100GBであれば2,000秒、500GBであれば3,600秒といった具合です。こちらはあくまで一時的なものなので、やはり定常的なIOPSとしては1500 IOPS(500GBの時)と考えておいた方が安全です。
ボリュームあたりの最大スループット
EBSボリュームに対するスループットに対しても制限があります。スループットとはEBSに対するアクセスの1秒あたりのデータ量となります。例えば100MByteのデータを1秒間に書き込んでいるとすると、そのスループットは100Mbpsとなります。
gp2の場合、最大スループットは250Mbpsと記載がありますが、こちらにもEBSボリュームのサイズにより計算が必要です。170GB以下のEBSボリュームであれば125Mbps、334GB以上のEBSボリュームであれば250Mbspが最大スループットとなります。
さいごに
EC2ではネットワーク帯域幅とEBS帯域幅、EBSでは最大IOPSと最大スループットというボトルネックがあることを説明しました。
実際に運用しているEC2においてそれぞれがボトルネックになっていないかを確認するためには CloudWatchの機能が必要となります。こちらについてはまた別の機会に説明しますね。
ディスカッション
コメント一覧
まだ、コメントがありません