CloudFrontに限らず北米リージョンは費用が安い傾向があります。静的ホスティングなどでS3から配信する際に大量アクセスはさばいてほしいが、別にレイテンシは多少遅くても良いからコストは下げたいという場合に料金クラス100が選択肢に入るか?実際に測定してみました。
料金クラスallと料金クラス100との比較
cloudfrontでは全てのエッジロケーションを使用する料金クラスallと一部のエッジロケーションのみ利用する料金クラス100, 200があります。全世界に配信、最高のパフォーマンスを期待する場合は料金クラスallを利用します。
なぜクラスが分かれてる?
他のAWS製品も同じですが、CloudFrontの料金もロケーションによって料金が変化します。
北米が一番安いです。アジアからのアクセスがあるとそのエッジロケーションの金額が適用されるので若干高くなります。
例えば北米を中心に配信であれば北米のエッジロケーションがある料金クラス100にして日本からのアクセスがあった場合は多少レイテンシが落ちますが北米や別の日本に近い有効なエッジロケーションから配信させることで料金が低く抑えられます。配信量が増えると割引率があがるのでエッジロケーションが散らばらないほうが有利ですね。
日本と北米料金の違いは
10TBまでは日本は1.3倍、350TB以上になると2倍以上の金額になります。
割と安くできますね。
実際の速度差を計測
レイテンシを気にしなければ、大量アクセスに対してはロケーションが北米に限定されていても問題なく対応はできるはずです。
実際にapache benchを使って簡易的に測定してみました。
北米ロケーション 料金クラス100(日本からアクセス)
# ab -n 50 -c 10
Requests per second: 25.53 [#/sec] (mean)
Time per request: 391.764 [ms] (mean)
Time per request: 39.176 [ms] (mean, across all concurrent requests)
# ab -n 200 -c 5
Requests per second: 26.22 [#/sec] (mean)
Time per request: 190.711 [ms] (mean)
Time per request: 38.142 [ms] (mean, across all concurrent requests)
全ロケーション(日本からアクセス)
# ab -n 50 -c 10
Requests per second: 682.53 [#/sec] (mean)
Time per request: 14.651 [ms] (mean)
Time per request: 1.465 [ms] (mean, across all concurrent requests)
# ab -n 200 -c 5
Requests per second: 1125.39 [#/sec] (mean)
Time per request: 4.443 [ms] (mean)
Time per request: 0.889 [ms] (mean, across all concurrent requests)
Request per second 26.7倍(42.92倍)も北米リージョンのみのほうが1リクエストあたりの時間がかかりました。
数字上で見るとかなり遅くなってますね(厳密にはレイテンシーのみの計測ではないのですが)。
ちなみにブラウザ上のURL入力してから表示されるまでの体感スピードでは
- 全ロケーション:クリック→ぱっ
- 北米のみ :クリック→ん-っぱ
という感じです。数字上ほど遅くは感じませんでしたが、表示まで多少もたつく感があります。
テストに使ったのは文字しかないhtmlなので最も重いサイトではもっと速度影響を感じそうな気がします。
北米リージョンのサーバにSSHするだけでも日本リージョンのサーバよりも遅く感じるので同じくらいのレイテンシがありそうです
結論 速度影響は結構ある
結論として問題になりそう(考慮の必要がありそう)なほどの速度差がありました。
CDN利用で表示までの体感スピードを上げたいというような目的がある場合は全てのロケーションを選ぶのがベストです。
実際に試してみることが前提ですが、スピードなんてどうでも良い、とにかく大量アクセス時に耐えてくれて、コストを最小限に抑えたい、AWS以外に選択肢がないというような状況であれば料金クラス100の選択肢はありそうです。
もちろん日本からのアクセス前提ではなく北米や欧州中心であれば上記の速度差は生じないので全然アリです。