Azureあの機能この機能:コンテンツ配信ネットワーク (CDN)

こんにちは。日山(@hiiyan0402)です。

今回はAzureのCDNサービスについての説明と、利用方法について考察します。

CDNは画像や動画の配信元として使用すると、手っ取り早く配信を高速化することができます。
ただし、なんでもかんでもCDNで配信すると、開発効率の低下に繋がります。
ではどの点に気をつければよいのでしょうか?考えてみました。


Contents Delivery Network (CDN)って?

Webコンテンツを世界各地に配置されたエッジサーバから配信するサービスです。

Azure CDNでいうと、指定したストレージアカウントのBLOBを、世界中に配置されたエッジサーバから参照できるようにします。全世界へWebコンテンツを配信する必要がある場合に使用すると、ユーザへのコンテンツ配信を高速化できます。

対象が日本だけ、っていう場合でも、Azureであれば、東/西日本リージョンのBLOBよりCDNの方がだいたい速いです。ちなみに、AWSのCloudFront(CDNサービス)も、東京リージョンS3よりだいたい速いです。もちろん、速い遅いはネットワークの状態によりますが、だいたいの場合CDNの方が速いです。

以下が参考データです。(Azure Speed GrandPrix βバージョン 調べ)
AzureはBLOBとCDN、AWSはS3とCloudFront、おまけのGoogle Cloud Storageです。やはりCDN勢は早いです。

20140607_hiyama_07

また、アクセス負荷を分散させることにも活用できます。CDNを使わないと、世界中/日本中のアクセスを1箇所で受けることになります。それに対して、CDNを使うと世界中に配置されたエッジサーバへ負荷分散させることができます。

手っ取り早く導入でき、効果をあげることができるCDN

AWS CloudFrontでの説明となりますが、2014/04/24に開催された第8回テックヒルズでのAWSのセッションにおいて、ゲーム業界でのAWSの利用事例の説明がありましたが、EC2, EBS, S3などの主要機能に次いで使われていたのがCloudFront(AWSでのCDNサービス)でした。

ゲーム系での利用に限りません。一般的なWebサイトでも十分に活用できます。全画像ファイルをCDNから配信させることで、サイトを非常に軽くすることができます。これは、システムアーキテクチャを変更する必要がなく、参照URLを書き換えるだけで実現することができます。簡単に導入することができる割に、効果はテキメンです。ものすごくアクセス速度が早くなります。

Azure CDNの使い方

Azure CDNでは、作成する際にマッピングするストレージアカウントを指定します。指定したストレージアカウントのBLOBが、そのまんま配信される、という事になります。マッピングするストレージアカウントは1つだけです。
20140607_hiyama_01
20140607_hiyama_05
体感ですが、BLOBに配置されてから5~10分でCDNから参照可能になる感じがします。遅れて参照可能になることに気をつける必要があります。また、CDNの特性上、ファイルの更新を確実に反映させる方法がありません。一度配信したら、もう修正できないと考えておいたほうがよいです。

ファイルを修正したい場合は、新しいファイルとして新たに配置して、参照先のURLを書き換えるという方式をとります。(元のファイルは修正できないので)

Azure CDNの活用

全ファイルをWebサイトから配信する場合

イメージファイルや動画ファイルなどのサイズが大きいファイルをWebサイトから配信すると、Webサイトにアクセス負荷が集中して、送信ネットワーク帯域が圧迫されたり、コンピューティングリソースが消費されたりします。また、ユーザにとってはコンテンツ受信までに時間がかかるようになってしまいます。
20140607_hiyama_02

BLOBストレージを活用する場合

そこで、Microsoft Azure ストレージサービスのBLOBストレージに、Publicアクセスができるコンテナを作成して、イメージファイルや動画ファイルを配置します。そして、ユーザはBLOBからコンテンツを受信するように、Webサイトを修正します。

すると、基本的にWebサイトよりBLOBの方がI/O速度が速いため、ユーザは高速にコンテンツを受信することができます。また、Webサイトには負荷が集中しなくなるため、処理が高速になります。

しかし、この場合、BLOBが配置されているリージョンから遠いユーザにとっては、物理的に遠いため、コンテンツ受信に時間がかかってしまいます。

例えば、BLOBが東日本リージョンにある場合、海外の人や、日本にいるが東京からかなり遠い場所にいる人にとっては、コンテンツ受信に時間がかかってしまいます。ただでさえ、サイズが大きく、受信に時間がかかる動画については、これは大きな課題となります。
20140607_hiyama_03

CDNを活用する場合

ここでAzure CDNの登場です。

Azure CDNでは指定したBLOBにあるコンテンツを、世界各地に配置されているエッジサーバにキャッシュして、配信することができます。Webサイトでは、イメージファイルや動画ファイルをCDNから参照するように修正します。すると、ユーザは一番近いエッジサーバからコンテンツを受信します。物理的に近いため、コンテンツを高速に受信することができます。

また、ユーザが大量に存在する場合、1箇所のBLOBにアクセスすると、ストレージアカウントの送信帯域の限界に達してしまい、コンテンツ受信に時間がかかってしまう場合があります。CDNを使用すると、アクセスが各エッジサーバに分散されるため、この問題に対応することができます。

20140607_hiyama_04

CDNに配置するべきファイル

CDNは一度ファイルを配置すると、修正が非常に大変で、ほぼできないに等しいです。なので配置するべきファイルは、更新がほとんどない、イメージファイルや動画ファイルになります。更新する場合は、別名で新規追加して、参照URLを変更することで対応します。

CDNに配置するファイル以外をWebサイトで配信させると、Webサイトに負荷が集中し、またコンテンツ受信も早くなりません。なので、ある程度は、BLOBから参照するべきです。

しかし、HTML, CSS, JavascriptなどのァイルもBLOBに配置すると、開発効率に支障がでます。いちいち、修正、BLOBに配置、を繰り返しながら開発を行うのは大変です。開発速度が低下します。

これらのことから、ほどほどに更新を行うWebコンテンツについてはBLOBに配置する。例えば、jQueryやBootstrapなどの、フレームワークに関するファイルです。そして、更新が頻繁に行われるHTMLやCSS, Javascriptなどのファイルは、Webサーバに配置する、というのがよいのかと、考えています。

20140607_hiyama_06

まとめ

  • Azure CDNはWebコンテンツを全世界に配置されたエッジサーバから配信するためのサービス。
  • CDNを使うと、だいたいコンテンツ受信速度が早くなる。
  • しかし、配置したファイルの修正は困難。修正がほぼ無いファイルを配置するべき。
  • コンテンツ受信速度の高速化の他に、コンテンツへのアクセス負荷分散にも活用できる。
  • 修正頻度に応じて、Webサイト > BLOB > CDN にコンテンツに配置するようにするとよいのかと。
TechTarget

クラウドエンジニア  日山 雅之による記事「Microsoft Azure スマート解説」がTechTarget Japanにて好評連載中です (全7回)