AWSのこれを使え!CloudFront篇

はじめまして、大浪です。

D2Cソリューションズには5つの部署がありますが、トップバッターとして開発部からお送りします。

開発部では大小さまざまな案件の開発、保守を行っています。
私が主に担当しているのは「小・中規模の動的なWEBサービス」の開発です。

ここで言う「小・中規模の動的WEBサービス」とは、下記のような内容になります。

・情報が更新されていく(ニュース記事・求人情報などなど)
・情報の管理にデータベースを使っている
・情報更新用の管理画面がある
・月のPVは数万〜数百万

このようなサービスを開発するにあたり、土台となるインフラ・ネットワーク環境として、最近採用する頻度が急増してきたのが【AWS】です。

今回は、この【AWS】の話をしようと思います。

ですが、AWSの使い方についての記事は既に多数存在しますので、『AWSのこれを使え!』と題して、完全に主観的なAWSの話をお伝えします。

WEBサービスのインフラ・ネットワーク環境を考える場合には、まず安定性の確保が必要となります。私が担当している「小・中規模の動的WEBサービス」の場合には、下記の構成を基本にしています。

cdp-jp-biz-010_v3

参考:ディザスタリカバリを考慮したクラウド構成例
https://aws.amazon.com/jp/cdp/cdp-dr/

この構成は、WEBサーバやデータベースなどインフラ構成要素のどこかが止まっても、サービスを提供しつづけるための構成です。

考え方自体はAWS以前にもあったのでピンとくる人も多いと思いますが、この構成はAWSの場合、とてつもなく作りやすいのです。

しかし、今回はインフラ・ネットワーク環境の安定性の話ではないので、構成の話はこのくらいにして先に続けます。

上記の構成で、サービスの安定性を確保できたとします。

さっそく次のステップに行きたいところですが、最近では上記構成とほぼセットで考えるAWSのサービスがあります。

それは【CloudFront】です。

【CloudFront】はCDNです。簡単に言うと、WEBサービスのレスポンスを各地のサーバでキャッシュして、ユーザへのリクエストに対して各地のサーバがキャッシュを返すことで、サービスやコンテンツを高速に配信する為のシステムです。
立ち位置としてはユーザとWEBサービスの間に入ります。

CloudFrontやCDNの詳しい説明は調べればたくさん見つかるので割愛しますが、開発担当者の立場から言うと、ある心配を解消してくれる頼もしいサービスなのです。

このある心配とは「アクセスの急増(以下バースト)」です。

WindowsLiveWriter_29a80bb7f7b6_ADC2_image_6.png 640×303

バーストは、サービスやコンテンツがSNSで広まったり、Yahooトピックスに取り上げられたりすることで発生します。

発生を予測できないため、開発担当者としては、特に新規サービス開発の場合に対応に苦心します。

あらかじめバーストに備えていては、日頃の運用コストが掛かりすぎます。では方法を変えて、バーストした時に構成を増強しようと考えると、バーストは5分、10分間で発生する事もままあるため、発生したまさにその瞬間に増強されるような仕組みにする必要があり、設計にかなり気を使います。

このような時にCloudFrontを使用すると、バーストはWEBサービスのレスポンスをキャッシュしたCloudFrontのサーバがさばいてくれます。

では、このCloudFrontのサーバはどの程度の性能があるのでしょうか?
答えは「Amazon.comの商品画像はCloudFrontを使って配信されています」ということです。

想像を絶する画像数とアクセス数があるであろうAmazon.comで使われているということが、このサービスの性能を証明していると思います。

ちなみに、先日参加したAWSのセミナーでは、CloudFrontはAmazon.comで最初は使われていなかったが、リリース後の評判が良くて使われるようになった、という話がありました。

自社のサービスだから使われているわけではなく、性能が認められて使われているんですね。

どんなWEBサービスでCloudFrontが使われているのかを知りたい時には、気になったWEBサービスをChromeのWEBコンソールで開くと簡単に確認できます。

レスポンスヘッダーの中に
X-Cache:Hit from CloudFront
という文字列が入っていたらCloudFrontから配信されています。

xcachehitcloudfront

ここまでCloudFrontの良いところを挙げてきましたが、私が担当する動的WEBサービスの場合には、CloudFrontの導入は単純にはできません。

CloudFrontは、レスポンスをキャッシュして配信速度を高速にしています。
つまり、キャッシュできないレスポンスはCloudFrontを使えません。

例えば、ページ内にログイン中のユーザ名を表示させる場合などです。

ユーザ名が表示されたページがキャッシュされてしまうと、他のユーザが同じページにアクセスした時も、キャッシュした時のユーザ名が表示されてしまいます。

じゃあCloudFrontは使えないじゃないか!となりそうですが、そうではありません。
CloudFrontは、キャッシュさせる範囲を自由に設定する事ができます。

そのため、サービス内の動的な部分をうまくキャッシュから外し残りをいかにキャッシュさせられるかが、動的WEBサービスでCloudFrontを上手に使うコツです。

CloudFrontを使うところが増えれば増えるほど、バーストに対する対策が打てている状況になるからです。

例えば、私が過去に担当した新規のメディアサイトでは、サイトTOPや記事ページはCloudFrontに完全にキャッシュさせて、記事の管理画面はキャッシュさせない設定にしました。

サイトTOPや記事ページは誰が見ても同じコンテンツなのに対して、管理画面はライターさんがログインしたり、運営者がログインしたりとキャッシュされては困るページだったためです。

この構成の実力は、リリースしてからしばらくたった頃に確認できました。

SNSで一気に拡散される記事が現れたのです。

結果は、PVが他の日の10倍以上になったのに対し、サイト表示が重くなるようなことはなく、サーバ負荷もほとんど上がりませんでした。
この時は思わずガッツポーズが出ました(笑)

良いですよ、CloudFront!

ということで、最初の「AWSのこれを使え!」は【CloudFront】についてご紹介しました。

では、また次回。

 

*株式会社D2Cソリューションズは2016年10月1日に株式会社D2C dotへと社名を変更しました。