ルーター側のコンテンツキャッシュの実装について

自分は実際に中間に立つルーターなどのサーバーのキャッシュがどのように行われているか知らない。なので下記の内容は完全に間違っている可能性が残っていることを前提に読んで欲しい。不備な点を指摘してもらえると助かります。

ただし、現象として実際に起こっていることがサーバーサイドのキャッシュが十分に機能していないと言っている。例えば下記の現象はキャッシュが理想的な形で行われていないことを示している。

  1. 特定のサイトにアクセスが集中してサイトがダウンする
  2. 特定の動画の表示速度が遅い、またはタイムアウトによってダウンロードできない
  3. 数十MB以上のコンテンツをダウンロードするために長い時間がかかる
  4. 接続先のサーバーへの回線速度が遅いためにダウンロードに時間がかかる

これらは中間にあるサーバーのキャッシュの実装が適切に行われていれば発生しないはずの問題。

もしも適切な実装を行うことができれば、膨大な量のトラフィックを削減できるはず。キャッシュのための施設投資は必要だが、ストレージはトラフィックのように常時大きなインフラやエネルギーを利用する必要がないため総体でみると非常に大きなエネルギーの節約になる。トラフィックが半分になるとしたら日本だけでも年間数十億円程度の金額は節約できるだろう。(桁がもう一つか二つ上かもしれないが)世界全体で行った場合、膨大な量のトラフィックの削減が可能。

行うべきことは下記。
1、既に存在する基幹ルーターに可能な限り大きなサイズのストレージを接続する
2、ルーターのためのApache用(もしくはルータOS用)キャッシュプラグインを開発する

やりたいことは「更新されていないコンテンツをキャッシュする」こと。別の表現で言うと「2回同じコンテンツを読みに行かない」ことだ。

ファイルに関してはファイル更新日時を参照することで対応可能だが、それをいちいち参照することもトラフィックになってしまうので、少しでもトラフィックを削減するためにリカーシブにする。つまり、ある特定のドメイン下の更新日時を取り出してまとめて更新日時を認証できるようにしてしまう。こうすれば特定のサイトへのアクセスがあり、かつそのサイトがまったく更新されていなかった場合には、サイト化のすべてのコンテンツをキャッシュできることになる。まあ実際にはカウンターなどの毎回変更されるコンテンツがあるので、ディレクトリ単位での更新日時は現実的ではないところもあるのだがこの実装を行っておけば、カウンターなどの変化するコンテンツだけを別ディレクトリに保存するなどによってサイトへのトラフィックを大幅に減少させることができる。

ちょっと調査が必要だと思うのだが、著作権的な問題が発生する可能性もあるので、管理者がキャッシュに直接アクセスできないなど措置が必要かもしれない。ファイルを保存するときに暗号化するなど。
名称としては「アクティブミラー」もしくは「ダイナミックコンテンツキャッシュ」あたりか。

応答の流れとしては、下記のようになる。

1、ルーターにあるファイルが古いケース

    1. クライアント;問い合わせを行う
    2. ルーター:最終更新日時を回答
    3. クライアント:ローカルに保存してあるファイルの日時と照合して、もしもローカルが古ければコンテンツのあるサーバーに新しいファイルを要求
    4. ルーター;クライアントに新しいファイルを与える。

2、ルーターにあるファイルが新しいケース

    1. クライアント;問い合わせを行う
    2. ルーター:最終更新日時を回答
    3. クライアント:ローカルに保存してあるファイルの日時と照合して、ローカルと同じ時間だったのでローカルのファイルを利用する
    4. ルーター;(問い合わせがこないのでなにもしない)

もちろんルーターサイドは、まれに要求されるコンテンツをキャッシュする必要はないので、一定時間要求されないコンテンツは、削除していく必要があるだろう。ローカルストレージ容量を超えそうな場合には「一定時間」の時間数を漸減させていく必要がある。もしも、ストレージ容量が少ない場合には本当に短い時間で要求された分のファイルしかキャッシュできないかもしれない。


これを行うことによってほぼ全員が恩恵を受けることになる。

利点1、ユーザー:通信速度が早くなったように感じる。一つのサーバーに通信が集中しても待たされることがほとんどなくなる。
利点2、サーバー提供者:(頻繁にコンテンツを更新しない限り)トラフィックの瞬時の増大によりサイトがダウンすることがなくなる。
利点3、回線業者:トラフィックの総量が大幅に低下する。回線やサーバー増強費用を抑えることができる。

問題点1、開発が面倒
問題点2、導入のためにストレージを新たに購入して接続する必要がある。
問題点3、導入手順が必要なため拡大に時間がかかる。
問題点4、方式が拡大しないと意味がない

一気に導入しないとあまり効果がないので全国規模で膨大なルーターをもっている企業に向いている。NTTがやったら大きな効果があるんじゃないか。これらの効果は未来永劫発揮される。早くやればやるほどよい。つまりこれを行わないのは「開発作業がやや面倒くさい」以外にはたいした理由はない。今すぐに行うべきだ。