CloudFrontの裏にWebアプリを置くことについて
現代において、クラウドサービスをもちいてWebを構築するとき、CDNを立ててその裏側にアプリケーションを置くことはごく当たり前に行なわれている。
その理由について
- DDoS対策になる
- とにかく全部CDN通しとけば管理が楽
- 経路が最適化され高速化される
などとよく言われると思う。ところで、「経路が最適化され高速化される」って本当?っていうのが気になっている。
というのが、最近別のクラウドサービスからAWSに移行したWebアプリケーションについて、大幅にレスポンスが悪化する現象が見られたため。
移行前はアメリカから配信し、主に日本国内からアクセスされていた。
このとき、アプリケーション内での処理時間はおよそ平均にして 0.01 秒ほど、日本からのレスポンスタイムはおよそ 0.23 秒ほどであった。経路にかかっている時間は 0.2 秒ほどかかっていたといえる。
移行後もアメリカから配信し、主に日本国内からアクセスされている。このとき、アプリケーション内での処理時間はおよそ平均にして 0.01 秒ほど、日本からのレスポンスタイムはおよそ 0.6 秒ほどに悪化した。経路にかかっている時間が 0.4 秒悪化したことになる。
そしてこのアプリケーションは本番環境と開発環境がデプロイされており、本番環境についてはデプロイ直後はレスポンスタイムが 0.6 秒ほどであったものが、24時間後に計測したところ 0.19 秒ほどに改善された。
開発環境についてはデプロイ直後から今にいたるまで 0.6 秒ほど時間がかかっている。
本番環境については24時間それなりの頻度でアクセスされている一方で開発環境についてはかなりアクセスが疎である。
現状この計測結果が得られただけで、これ以上の知見はないのだけど
- 一定数以上の頻度でアクセスされるアプリであればCloudFrontによる経路最適化効果はある
- アクセス数が少ないアプリは大幅にパフォーマンスが劣化しうる
CloudFrontについてはある程度のアクセスがないと経路の最適化を効かてくれないのでは?と想像している。基本的には「まあ何も考ずにCDN通せばいいよ」だとは思うけど、E2Eでパフォーマンスをちゃんと観測しておくとよいとは思う。
また、CDNを通してなかったサービスをあとからCDNを通す場合、一定時間パフォーマンスが劣化することは覚えておいていいと思う(DNSラウンドロビンとかでCDN通す率を制御しながら移行することである程度緩和できるかも?)。