Aikの技術日記

技術的な進捗とか成果とかを細々と投稿するブログです。時々雑記も。

CDNについてまとめてみた

CDNについてまとめよう

よくWeb関連の…ライブラリ、でいいのでしょうか?
それの導入手段として用意されているCDNというものについてですが…。

筆者自身、CDNで何ができるかが分かってても、それ自体がどういうものかあまり分からない状態だったので…。
改めて詳しく調べてみました。

参考にさせていただいた記事は下記の通りです。
第1回 CDN の 仕組み (CDNはどんな技術で何が出来るのか) | REDBOX Labo
CDN とは?| Akamai JP
CDN:コンテンツデリバリーネットワークの仕組みとは?主要サービスの比較や無料CDN「cloud flare」の設定手順

※今回は特に間違った記述をしている可能性が高いです…自分もこの辺りの分野に関する理解の自信がないので…。
もし間違い等ありましたらコメント等で指摘していただけると幸いです…!

CDNとは?

CDNとはContent delivery networkの略で、ファイルのダウンロード配信に関わる技術です。
ざっくりと言えば、ファイルをただ配信するだけのサーバー達で構成されたネットワークのことを指します。

ここでいうファイルは、主にWebサイトのコンテンツファイル(HTMLや画像、CSSJavaScriptファイル)ですが…。
他にも4K/HD動画や音楽ファイル、アプリ/ゲームやOSアップデートなどのソフトウェアダウンロード、更には医療情報や財務情報を含むデータレコード等も扱われているらしいです。

この様な、Webサイトにまつわる物だけでなく様々なデータをCDNで配信可能だと、CNDプロバイダーの大手Akamaiさんは提唱されています。
CDNプロバイダー = CDN技術を提供されている所

ちなみにCDN自体は、CNDプロバイダの大手Akamaiさんが1990年代に提唱した技術とのこと。
意外と古くからあったのですね…。
しかし、近代におけるCDNは当初提唱されていたCDNよりも高度なものへ進化しているそうです。

CDNの具体的な中身

ここで一度、ファイルのダウンロード配信について考えてみます。

単にサーバーからファイルをDLするだけなら、そこのサーバーから情報を取ってくれば良いのですが…。
そのサーバーが膨大なアクセス量でパンクしていたり、日本国内から国外へ…つまりネットワーク的に遠いサーバーへアクセスしたりすると、どうしてもDL速度が遅くなってしまいます。

※余談- 「ネットワーク的に遠いサーバーへアクセス」とは?

クライアントから任意のサーバーにアクセスするには「サーバー先のドメイン(DNS)名(www.hogehoge.jpみたいな)」が必要です。
このドメイン名は現実世界で例えると「住所」の様なもので、これを知らないとどこのサーバーにアクセスしていいか分からなくなっちゃうという訳ですね。

ドメイン名に関する情報はDNSサーバが所持しています…がしかし、このDNSサーバが全てのサーバーのドメイン名を知っているわけではありません。

じゃあ自分が知らないドメイン名が聞かれた場合はどうするかと言うと、自分より上位のDNSサーバに問い合わせをするのです。

ただ、この上位サーバーも全てのドメイン情報を持ってるわけではありません。
もし問い合わせられたドメイン名が上位サーバも知らないものである場合は、更に上位のDNSサーバに問い合わせ…と、どんどん上位の所に問い合わせが発生します。

さてここで、日本国内から国外サーバー…例えばヨーロッパ圏のサーバーへアクセスすることを考えてみましょう。
クライアントの近く…下位のDNSサーバは基本的に自分の近く(国内…下手したら地域レベル)のドメイン名しか知りません。
そんなDNSサーバに海外のDNS名の問い合わせがあれば、たちまち上位DNSサーバーへの問い合わせの嵐が行われます。
(下位サーバーより1つ上のサーバーが全知全能というわけではなく、例えば東京のDNSサーバの上位DNSサーバは日本のDNSサーバで、更に上位はアジアのDNSサーバーで…といった様に階層構造になってます)

このたくさんの問い合わせ(一般にはこれを名前解決と言います)のせいで、ネットワークの遅延が起こっちゃうのです。

※ネットワークに関する結構大事な部分をかなり端折ってここに書いてます…。
ネットワークに関わる事柄はかなり複雑なので、間違った記述がここにある可能性も結構高いです…もしそうだったら申し訳ないです!

そこで登場するのがCDN、というわけです。

CDNは「データのアクセス元から見て距離的に一番近い場所にあるサーバーを自動で選択し、コンテンツをDLさせる」事ができます。
例えば国内からヨーロッパのWebサイトにファイルをDLすることを考えましょう。

CDNがなければ、国内からはるばるヨーロッパのWebサイトに行って、ファイルをDLしなければなりません…当然時間はかかります。
しかし、CDNがあれば国内にあるキャッシュサーバーから、ファイルをDLすることが可能になります。
つまり近いところからDLできるので、時間も短縮できるというわけですね!

CDNを利用するメリット

CDNを利用すれば、1つのサーバーからDLするのではなく、世界各地に点在しているDL専用のサーバー(大手CDNベンダーAkamaiさんは世界72カ国に設置)からデータのDLができるので…。
様々なメリットが生じます。

主役のサーバーがデータ配信に割くリソースを軽減できるので、サイト負荷が軽くなったり、トラフィック分散に役立ったり、耐障害性に強くなったり…。
セキュリティに関しても、Akamaiさんの様なCDNベンダーが様々な攻撃を緩和するソリューションを提供してくれていたりもします。

※すみません、この辺を詳しく記事にまとめるのは相当な労力かかりそうだったので…簡単にまとめるだけにしておきます

HTMLとかの外部ライブラリ読み込みに使うCDN

ここで、HTMLとかの外部ライブラリ読み込み用途に用いるCDNについて考えてみましょう。
HTMLでCDNを用いて読み込むには、下記の様なコードを用います。
※コードは「Google Hosted Libraries」という、GoogleサーバーでWebの様々なライブラリを提供されているサービスのものから持ってきました

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

この1文をHTMLコードに貼り付けると言う事は…つまり、Googleのサーバー上にあるライブラリをDLするって事になると思います。
これがCDNと呼ばれているのは…うん?うーん…内部でCDN技術を使っていると言う事なのでしょうか…?
それとも、単にネットワークからファイルをDLする、と言うことをそう呼んでいるだけなのでしょうか…??

最後に

CDNについて調べてて思ったのが「思った以上に大きな分野の話だった」と言うことです。
CDNが内包する範囲が想像以上に大きかったと言う感じですかね…でも、非常に良い勉強になりました!

どこかでインターネットに関してがっつり調べ、記事とかにまとめたいなとも思いつつ…。
(まぁインターネットについて詳しく述べた記事なんてたっくさんあるので、自分でまとめずとも…という気もしますが)