% cat

CPUを使うサービスでt1.microは使っちゃダメ?AWSのEC2 t1.microインスタンスのCPU特性

AWSのEC2インスタンスは色々なスペックタイプから選べるんですが、中でもt1.microインスタンスは特殊だったりします。単にスペックが低くて料金も安いというわけではない…というのをようやく理解したので、検証まとめ。

僕はこの特性をちゃんと理解せずに、安いからとt1.microをスケールアウト用に増産していました。料金も、t1.microだと$0.027/1hourで、m1.smallの$0.088/1hourと比べても3倍くらい違うので、t1.microを3台入れたほうが良いだろうと思ってたんです。

が、あまりパフォーマンスの割にコスパが良くないことに気がついて、m1.smallに切り替えました。

改めてサイトに表記してあるスペック表を見ると、t1.microは「最大2ECU」と書かれており、m1.smallの「1ECU」と見比べると一見t1.microが勝っているように感じられます。が、それは半分正解で半分間違い。

(*) 1ECU = 1つの1.0-1.2 GHz 2007 Opteron または 2007 Xeon プロセッサの CPU 能力に等しい能力

AWSのサイトからの引用です。

マイクロインスタンス(t1.micro)は、少量かつ一定量の CPU リソースをご提供するプランです。追加サイクルが利用可能であるときは、CPU 処理能力を短期バーストとして増大させることができます。このタイプが適しているのは、低スループットのアプリケーションやウェブサイトがときどき追加コンピュートサイクルを必要とする場合です。

ちょっと何言っているかわかりませんね。

ということで実際にベンチマークを取って検証してみました。

ベンチマーク1(1秒以下の処理)

<?php
	$max = 1000;
	$start = microtime(true);
	for ($i=0; $i<$max; $i++) {
		for ($k=0; $k<1000; $k++) {
		}
		echo sprintf('%0.10f', microtime(true) - $start) . "\n";
	}


t1.micro と m1.small を比較しています。Y軸が秒数です。黄色いm1.smallを見ると段階的に処理がされているのが分かります。これは恐らく同居している他のインスタンスにCPUを使用しているんだと思います。

t1.microは、圧倒的に早く処理を終了しています。これだけ見ると、スペック表通りm1.smallよりも高速です。

ベンチマーク2(10秒以上の処理)

<?php
	$max = 1000;
	$start = microtime(true);
	for ($i=0; $i<$max; $i++) {
		for ($k=0; $k<100000; $k++) {
		}
		echo sprintf('%0.10f', microtime(true) - $start) . "\n";
	}

次は、10秒以上かかる処理に変更しました。


相変わらずm1.smallは遅いですが安定した速度を出しています。それに対し、t1.microは13秒くらいまでは高速で動いていますが、それ以降は非常に遅い動作に変わっています。最終的にはm1.smallより遅く処理が終了しました。

なんてこったい。

これがバーストと呼ばれるもので、短時間であれば高速に動作しますが、高速動作が一定時間続くと低速モードに切り替わります。約80〜90%ほどリソースが落ちるようです。(stealと呼ばれる)

結論

CPUを多く使用し、それなりに負荷が続くような処理がメインの場合は、素直にm1.smallインスタンスを利用するほうが吉。

Webサーバなどで、トラフィックが集中し、負荷に応じてt1.microをスケールアウトするように組んだとしても、トラフィックが減らない限りは、低速モードになったインスタンスが増えるだけで、さほど効果が上がらないです。

最新記事

「良いプロダクト」とは、どんなプロダクトのことでしょうか?

こんにちは! プロダクトオーナー兼開発部マネージャーをしている長谷川([@roki1801](https://github.com/roki1801))です。普段は山形県山形市にあるベーシックのサテライトオフィス「[山形ラボ](...

roki1801
2019年03月29日

大量アクセスに耐え得る在庫管理システムの構成を考え実装してみた

皆さん「在庫管理」ってどうしてます?itemsテーブルに、stockカラム作ってdecrementしてますか? まぁ正直、それでも良い感じしますよね。楽だし何やってるかわかりやすい。 しかし! **超人気商品に超ア...

mmusasabi
2019年03月13日

kubernetes で Ruby on Rails を動かして kubern...

巷で話題の kubernetes ですが、とってもとってもとっつきにくいですよね そんな kubernetes ですが手元で動かすことができたので解説してみます (情報が間違ってたらごめんなさい! 🙇) 目標はこちら ...

tkhr0
2019年03月07日