1.はじめに
僕は今まで名前に騙された。
EC2のインスタンスファミリーであるT系が持っているバーストモードという機能。
バーストモードと言うから限界突破して、100%以上使えるのかと思っていた。同じような機能、用途のM系と比較して、「それならM系と違いがそんななくね?むしろ限界突破できるし、安いしT系最高!」とさえ考えていた。
実際にはその理解は間違っていた。今回はその恥を晒して皆さんの役に立てたらと思う。
2.T系のCPU使用率とベースラインレベル
まず、T系は常に100%のCPUを使うことができない。(実際に100%のCPUを使い続けられるかという物理的な問題ではなく、AWSの仕様上の話)
T系では、インスタンスサイズ毎にベースラインレベルというものが定義されている。保証されているCPU使用率は、このベースラインレベルまでの使用率ということになる。
下図によるとt4gnanoだと5%、t4g.2xlargeだと40%までが保証された動作ということになる。
3.バーストモードとCPUクレジット
ベースラインパフォーマンスを超えるとどうなるのか。バーストモードが始まる。バーストモードとは、条件付きでベースラインレベルを超える使用率でCPUを使用できる機能である。その条件というのが、CPUクレジットと呼ばれるポイントである。CPUクレジットが貯まっている分だけ、ベースラインレベルを超えてCPUを使用できる。
もしCPUクレジットがなければ、インスタンスはベースラインまでCPU使用率を下げることになる。
CPUクレジットの貯め方
CPUクレジットは、ベースラインレベルを下回って使用していると貯まっていく。ベースラインレベルと同等の使用率の場合は、CPUクレジットの蓄積と消費が同レベルになり、差し引き0となるので蓄積も消費もない。
unlimitedモード
CPUクレジットを気にせずにバーストモードをできる方法はないのかという問題になる。それがunlimitedモードになる。unlimitedモードにすれば、CPUクレジットの残高に関係なくバーストモードを使用することができる。
料金は、vCPUあたり0.04なので、インスタンスサイズが大きければ、その分料金も高くなってしまう。
unlimitedモードは、いつでも設定から有効/無効を切り替えることができるらしく。
CloudWatchのメトリクスをトリガーに自動化できるかもしれないという感じはする。(これはただの感想)
4.まとめ -T系とM系の使い分け-
T系はCPUの使用に制限があるため、開発用や検証用サーバーとしては、問題ないが、安定的に使用したい、同接が多くなる可能性があるようなシステムには不向きで、その場合はM系を使用するのがよいと考える。
また、コストをとにかく抑えたいという理由からT系を使用する場合はCPU使用率に応じて、AutoScalingやunlimitedモードを使用する方法が考えられる。
バーストモードとかっこいい名前を付けてるけど、勝手にCPUに制限をかけているだけじゃん。まあ、その分安くなるんだけど。