CDNのしくみとか諸々

 CDN、というものを、JavaScriptやCSS、フォントなんかをいじっていると目にすることがあります。
 なんか表示が速くなったり、わざわざDLしないでもjQueryが使えたりするのですが、ではどういうものか、というのを調べたり解釈したのをつらつらと書いてみます。

広告

CDNとは

 そもそも、CDNは略称です。正確には、コンテンツ・デリバリ・ネットワーク(Contents Delivery Network)というものです。そのまま訳すれば、内容物配達網という感じでしょうか。要するに、コンテンツを配達してくれるネットワークサービスのことを指します。
 いちおう、コンテンツを配達する、ということ自体は、通常のサイトでもかわりません。サイトのあるサーバからブラウザで閲覧する側にデータが送られる、つまり配送されるのですから、これを配達といってしまえばそうなります。
 ですが、特にCDNと呼ばれるサービスは、それに更に特化しています。より高速に、より負荷を少なくコンテンツのデータを配達するための仕組みなのです。

CDNが登場した背景

データの送信にかかる時間について

 データの送信にかかる時間は、回線にもよりますが、とりあえず、基本としてどうしてもかかってしまうのが、距離による時間です。データとは私の知る限り、現在の最高速度の場合でも光を使った信号の形で伝送されます。つまり、スピードは光速を超えることはありません。要するに、経由機械などによるロスを抜いて考えれば、転送時間=距離/光速とまで単純化できるのです。
 ということは、サーバからの距離で、転送時間はどうしても違ってきてしまう、ということです。
 さらに、距離があるということは、間に機器が挟まる可能性もあるということ。
 その分処理に時間がかかるでしょうから、さらに転送時間はかさみます。
 要するに、色々と例外はありますし、条件によっては違いもありますが、通信時間はサーバとクライアント(閲覧者)の距離が離れていれば離れているほど、大きくなりやすいと思えばよいでしょう。

サーバにかかる負荷

 サーバダウン、とか、サーバが落ちた、という話を良く聞くと思います。これは、つまりデータのあるサーバにアクセスが集中したことで、サーバの処理能力がオーバーしてしまって、「無理!」ってなったときに起こるものだと思います。
 そこまでいかなくても、アクセス集中があることで、アクセスが困難にもなります。
 これの対応策としては、単純なものでは、サーバの処理能力を高めるというものがあります。読み込みやすいフォーマットにするのもありですね。
 しかしフォーマットを変更するのだと表現の幅が狭まることもありますでしょうし、サーバの処理能力を上げるというのには、結構なコストが要ります。ダイレクトなところでは懐に響くのです。

CDNのしくみ

 CDNは、前述の転送時間に関する問題点を、サーバを複数に増やすことで対応します。つまり、いくつか離れた土地にそれぞれサーバを置き、それぞれに同じデータを保存しておくわけです。このサーバをキャッシュサーバと呼ぶみたいです。
 そして、閲覧者からのアクセスがあった場合は、そのクライアントからの距離が物理的に近いであろう、たとえば複数の国にキャッシュサーバがあるなら、閲覧者のいる国、あるいはその国の近くにあるサーバが、クライアントにデータを送るという仕組みです。

CDNの利点・欠点

利点

CDNの利点は、以下の3つです。

  • データ取得時間の高速化
  • サーバの不可分散
  • サーバ障害の緩和

 1つ目と2つ目は、背景で説明した問題点が緩和されることによるものです。
 近くのキャッシュサーバからデータをダウンロードできれば、距離による条件は緩和されます。
 複数サーバがあるので、まあ物理的に負荷は分散されますよね、というやつです。この発想は古くはミラーサーバとかになるのでしょうかしら。

 3つ目は、複数サーバがあるからこそのものです。負荷分散というより、元になるデータをアップロードしておくサーバをオリジンサーバというようなのですが、それがサーバ障害(サーバは機械ですので、サーバ負荷以外にもデータへのアクセスが困難になる障害が生じることがあります。機器の故障とか)を発生したり、もしくは複数サーバのうち1つにそのような障害が起きたとしても、他のサーバ群で対応できる、という感じのようです。

欠点

 CDNの欠点は、私の思いつく限りでは、以下3つぐらいです。

  • それでもやっぱりある程度お金はかかること前提
  • 設定がややこしい・知識が要る(特にキャッシュ関係)
  • サービスを提供している大本に障害が起こるとそのまま障害が起こる

 1番目は、まあ、当然というか、そういうことです。複数サーバを借りることになるので、色々便利な点はあっても、費用はそれなりにかかるという感じ。ただ、料金がどれくらいかは、大手サービスなどは料金を明らかにしていないため、よく分からない感じです。
 最近は無料のCDNサービスも出てきましたが、後述する障害もあったりするみたいなので、まだ様子見という感じでしょうか。

 2つ目は、私が調べて率直に思ったことです。頑張ってこのページで説明してみましたが、概念は分かりやすいのですが、技術的な知識が結構要ります。たとえば、先述した無料CDNサービスも、IPアドレスの設定を弄ったりする必要もあるみたいです。
 また、キャッシュサーバにオリジンサーバからどのタイミングでデータを複製するかなどの知識も必要かと思います。名前の通り、キャッシュ関係の知識が特にいるのではないかと。

 3つ目は、CDNサービス自体がダウンしたら、それを利用していた場合もろに影響を食らう、ということです。無料CDNを調べていた際、そういう話も見かけました。サーバ毎の障害は軽減できても、それを統括するサービスなり、サーバ群全体なりに障害があれば…ということですね。

全体的に

 調べてみると結構楽しそうなCDNでしたが、まだちょっと気軽に利用するにはハードルが高いみたいです。コストか、知識がいる印象。Netlifyとかは最初からCDNが設定されているらしいので、そのあたりで間接的に使う形になるのかしら。

参考にしたサイト

 利点欠点など、参考にしたコーナーの始めの第一回や、ページをぺたりしておきます。最後のCDNサービスの障害の話はどこでみたか失念しましたが、思い出したり辿り着いたりしたらここに貼っておこうと思います。なお2つ目のWebページではCloudFlareについての説明もあります。


CDNサービスをまとめているWebページや、料金比較が出来るWebサイト等へのリンク



CDNを使うことになって便利になっているもの(ぱっと執筆時点で私が思い出せるものの中で代表的なもの)

  • jQuery
  • jQuery UI
  • Font Awesome
  • Google Fonts

 これらは、CDNで配信速度が高くなっていたり、いろんな理由でアクセスしやすいようになっており、外部の利用者はDLして自分のサーバに配置、という形を取らなくても、HTMLタグでこれらをCSSなり外部JSなりといったかたちで読み込むだけ、という、便利なツールになっています。
 特にjQueryなどは、様々なページで読み込まれますので、サイトが違っても、jQueryが同一アドレスからの読み込みになっていれば、ブラウザのキャッシュがきいて読み込みを省略できることがある、という利点もあります。

広告

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA