実際、EC2 単体と CloudFront 利用時とでは、どのくらいアプリケーションのパフォーマンスが異なるのだろうか。Amazon CloudFront の性能測定を行ってみた。



<p>結論から言えば、画像などの静的コンテンツを多用したサイトであれば、劇的に速くなる。</p>

<p>国内にサーバを置いてあるウェブアプリケーションを EC2 で試しに動かしたところ、遅くて使い物にならなかった。EC2 での動的リクエスト処理は許容範囲であったが、多量の画像や css、js などを返す処理が遅かった。Keep-Alive は Off にしているので、その潜在力を活かしきったというわけではないが、このアプリは Keep-Alive Off で動かしたかった。</p>

<p>それを CloudFront 併用で動かしたところ、速度が数倍に向上し、体感速度は問題ないレベルに達した。画像が多くて EC2 には移行できないと考えている人には、一度使ってみることをお勧めしたい。</p>

<p>具体的な数値は以下に載せるが、ブラウザキャッシュを活かした状態で、コンテンツを全て返し終わるまでにEC2単体で 10~15秒かかっていたものが、CloudFront 併用時には 2~4秒にまで縮まった。そのうちの0.5秒程度は Google Analytics 待ちなので、画面が完全に表示されるまでの時間はおよそ3秒以内に収まっている。</p>

<blockquote><pre>
□ ページ1 (リクエスト:31回, 転送量:386KB)

1回目 2回目 3回目 平均
———————————————
EC2単体
キャッシュ無し 17.07s 16.81s 17.02s 17.0s
キャッシュ有り 10.72s 16.44s 6.93s 11.4s
EC2 + CloudFront
キャッシュ無し 4.16s 3.18s 3.12s 3.49s
キャッシュ有り 2.3s 2.4s 1.82s 2.17s

□ ページ2 (リクエスト:77回, 転送量:518KB)

1回目 2回目 3回目 平均
———————————————
EC2単体
キャッシュ無し 20.6s 25.03s 26.61s 24.08s
キャッシュ有り 13.26s 12.97s 13.31s 13.18s
EC2 + CloudFront
キャッシュ無し 3.89s 4.76s 4.09s 4.25s
キャッシュ有り 4.34s 3.74s 3.31s 3.80s

□ ページ3 (リクエスト:96回, 転送量: 621KB)

1回目 2回目 3回目 平均
———————————————
EC2単体
キャッシュ無し 24.63s 24.19s 22.28s 23.7s
キャッシュ有り 15.65s 14.85s 14.78s 15.09s
EC2 + CloudFront
キャッシュ無し 5s 4.06s 4.35s 4.47s
キャッシュ有り 4.03s 3.13s 2.99s 3.38s
</pre></blockquote>

<h4>その他いろいろ</h4>
<p>まず、CloudFront の現在のバージョンでは、SSL がサポートされていない。https ではアクセスができないので注意が必要。</p>

<p>S3 でファイルを更新したときに CloudFront に反映される時間は、CloudFront のキャッシュが切れるまで。キャッシュが切れれば再度 S3 から最新のコンテンツを取得する。キャッシュはデフォルトでは24時間保持される。FAQ によれば、自動的にキャッシュが切れるのを待たずにキャッシュを消したい場合は、有害コンテンツ系のものであれば Amazon が個別対応してくれるようだ。</p>