今日はアルバイトでへとへとなので、複雑なことはできてません!
それぞれについて、少し詳しく書きます。
まず、CDNのやりたいことである負荷分散について調べました。
基本的に全てのリクエストに対して、一つのサーバが応答するということは、可用性的によくない。
なので、オリジンサーバを複数たてて、リバースプロキシで冗長化することになる。
しかし、結局リバースプロキシに対する負荷が高くなりよくない。
なので、ミニDNSサーバ機能付きのロードバランサを導入し、
ミニDNSがヘルスチェックを行い、回線がダウンしていたらそれらをDNSのリプライに含めないように動的に変更するらしい。
これを作ってみたくなった!
参照先のウェブサイトはISPの回線がダウンした場合だったが、これをWebサーバ側に導入するといい感じになりそうな気がする。
なぜDNSについて調べたのかというと、 そもそも作成するミニミニCDNのノード間をどうやってつなぐのか知りたかったからです。
CDNではDNSが使われているらしく、知識の確認のためにも少し深掘りました。
Webサイトを作るにはWebサーバとブラウザを紐づける必要があり、そこにDNSを用います。
とはいえ、ただリバースプロキシがあればいいわけではありません。それでは、結局リバースプロキシに負荷が集中してしまいます。
CDNでは、DNSサーバへの問い合わせの際、地理的に近い部分にあるキャッシュサーバのIPアドレスを返却するようになっています。 そうすることにより、物理的に近い場所からコンテンツを持ってくることが可能になり、 レスポンスにかかる時間が減るというわけです。
ですが、今回の短期間で地理的な状況から、 適切なIPアドレスを変えるところまでは難しそうなので、今回は別の方法を取ることにします。
AレコードをDNSサーバに複数を登録することにより、DNSラウンドロビンが実現できるらしい。 DNSラウンドロビンとは、DNSのゾーンファイルにホスト名に対して複数のIPアドレスを登録することにより、 DNSサーバが設定されたIPアドレスすることにより、負荷分散できる技術です。
これも今回のCDNの実験で使えそうな技術で良い。 AnyCastなど実際のCDNで使われている技術ではないですが、仮想的にCDNっぽい動きはできそうな感じ。
とりあえず、バイトの移動中と帰ってきてからの時間で調べたことをまとめました。 明日もバイトなので、明日は具体的にネットワーク機器の設定をしていこうかなと思います。
(5/3 終わり)