荒木 靖
宏
![]() |
い つ で も 必 要 な ソ フ ト ウ ェア や コ ン テ ン ツ を 安 価 に 入 手 す る 手 段 と し て CDN が 広 く つ かわれている。 Debianはdebの安定 入手手段の有無がシステム の信頼性を左右するシステムであり、 その特殊性を考慮したCDNシステムが必要となる。 今回は cdn.debian.or.jp, cdn.debian.netにおける取り組みを紹介する。
Content Delivery Network (CDN) はウェブコンテンツ配置および配送方法としてAkamai社によりサービスされ広く知ら れることになった。 当初から一部の人気の高いサーバへのトラフィック集中によるサーバ停止の回避、 海外のリッチコンテンツ 取得の高速化、 トラフィック分散によるネットワークおよびサーバの利用平準化などの理由で広く受け入れら れた。
CDNという用語自体はWWWに限ることなく、 一般にコンテンツを取得するための配送手段や方法全体を指す場合がある。 た とえば、 WinnyやBittorrentなどのコンテンツを取得するために特別に設計されたプロトコルを用いて、 P2Pネットワーク を構成するような手法も含まれる。
cdn.debian.or.jpではDebianでインストール時から広くdebファイルの入手に使われるaptで使えるCDNとして設計し、 運用している。 そのため、 DebianにおけるCDNの利用法は至極簡単である。 /etc/apt/source.listに記述するAPTリポジ トリとして、
deb http://cdn.debian.or.jp/debian/ stable main contrib non-free
deb-src http://cdn.debian.or.jp/debian/ stable main contrib non-free |
以上のように指定するだけでユーザは今までとなんら変わることなくaptコマンドを使用できる。
現在、 cdn.debian.or.jp, ftp.jp.debian.org, cdn.debian.netの名で運用している。
サービス時の手順と構成は以下のようになる。 (図4.1)
実際にはクライアントDNSは次のように動作している。
2を実現するためのAraki.netのBIND設定は次のようになる。
cdn IN NS ns.cdn
IN NS plat.debian.or.jp. IN NS debian.topstudio.co.jp. IN NS osdn2.debian.or.jp. |
DNS Balance はユーザのIPアドレスと、 何らかの方法でサーバをランクづけした表を元にユーザが接続すべきサイトを指 示します。 この表は一定時間毎に読み込み直され、 これにより動的な負荷分散が可能です。
(DNS Balanceの配布ページ http://www.dnsbalance.ring.gr.jpより)
3 を実現するための dns_balance の設定は次のようなサーバをランク付けした ruby 形式のファイルで ある。
$addr_db = {
"default" => { "ns.cdn.araki.net" => [ [[210,157,158,38], 0], ], "localhost" => [ [[127,0,0,1], 0], ], "deb.cdn.araki.net" => [ [[61,115,118,67], 1000], [[133,50,218,117], 10], [[202,229,186,27], 20], [[133,5,166,3], 10], [[130,54,59,159], 10], [[210,157,158,38], 9900], ], },} |
この設定ファイルに基づき、 ホストIPアドレスの後ろの数字は優先度であり、 1 (優先度高) から9999 (優先度最低) まで の整数で指定する。
CDNシステムが完全に動作しユーザから使用されるためには、 システムが完全なファイルを提供すること、 システムが安定して 動作すること、 そしてCDNを使った場合に高速に動作していることが求められる。
提供ファイルの完全性
このために以下二点を満たさねばならない。
前者については、 debはそのファイルのmd5値、 sha1値とともに配布され、 ユーザが使用するaptで確認後に利用されるた めCDNを使用した場合でも問題にならない。
後者についてはユーザがapt-get updateを行ったときに接続するSurrogateとapt-get dist-upgradeを行ったとき に接続するSurrogateは同一であるとは限らないため、 DNSがSurrogateとして返すサーバが保持するファイルは同一であ る必要がある。 cdn.debian.or.jpではDebianプロジェクトで一般に行われている方法と同様に、 rsyncプロトコルを用い、 pushミラーを行っている(図4.2) 。 そのため、 cdn.debian.or.jpのサロゲート内で最上流にあるサーバとミラーが同一で あることを2分毎にrsyncミラー終了時に作成されるスタンプファイルを確認して、 同一でないサーバはサロゲート候補から 一時的に除外している。
ただし、 これはミラーの配送ツリーの管理を行う必要があるため、 日本国内のミラーに限定している。
システムの安定動作
先に述べたように、 ユーザは CDN を使用する際には DNS を最初に使用するため、 DNS の安定運用がカギ となる。 そのため、 cdn.debian.or.jp を管理する DNS サーバはまったく独立に動作するサーバで行って いる。
また、 サーバの動作を確認は、 5秒以内にHTTPのレスポンスを返さないサーバはサロゲート候補から一時的に除外して いる。
後述するように、 サロゲートの生死確認は2分ごとにdns_balanceの動作に反映される。 ローカルDNSにキャッシュされる 情報とあわせて最悪でも3分以内に動作していないサーバは排除される。
高 速 動 作
cdn.debian.or.jpではDNSで問い合わせされるとサロゲートリストとして複数のIPアドレスを返す。 このIPアドレスは ラウンドロビンで選択しているわけではなく、 提供可能なサーバキャパシティやネットワーク速度を考慮し、 設定して いる。
当初は cdn.debian.or.jp として運用していたものの、 その後に global に分散する Debian ミラーに対応さ せた。
globalにCDNを展開する場合には地理的に近いサーバ群からある程度絞込むのが有効である。 現在、 GeoIPなど無料でIP と地理情報のマッピング提供者が現れており、 debianパッケージになっていることもあり、 本システムではMaxmindの GeoIPを使用している。
Dns_balanceにはASあるいはネットワークアドレスごとに振り分けるIPアドレスの指定が可能であるが、
以上の理由から、 dns_balanceに接続するIPアドレスの国名、 大陸名を逆引きし、 その結果をつかって返すAレコードを 変更するようにdns_balanceを拡張している。
大陸別の設定ファイルは次のように、 6大陸別である。
yaar@loon3:~/playground/cdn$ ls continent/
AF_deb_cdn_araki_net.rb EU_deb_cdn_araki_net.rb OC_deb_cdn_araki_net.rb AS_deb_cdn_araki_net.rb NA_deb_cdn_araki_net.rb SA_deb_cdn_araki_net.rb |
さらに国別の設定ファイルを置く。
yaar@loon3:~/playground/cdn$ ls country/
FRA_deb_cdn_araki_net.rb JPN_jp_cdn_araki_net.rb JPN_deb_cdn_araki_net.rb KOR_deb_cdn_araki_net.rb |
これらの設定ファイルをつかって、 dns_balanceが実際に読み込む次のような設定ファイルを2分ごとに作成している。 サーバの生死確認などはこのタイミングで反映される。
$addr_db = {"default"=>{"localhost"=>[[[127, 0, 0, 1], 0]], "deb.cdn.araki.net"=
>[[[61, 115, 118, 67], 1000], [[61, 206, 119, 174], 20], [[202, 229, 186, 27], 2 0], [[203, 178, 137, 175], 9000], [[210, 157, 158, 38], 9900]], "ns.cdn.araki.ne t"=>[[[210, 157, 158, 38], 0]], "jp.cdn.araki.net"=>[[[61, 115, 118, 67], 1000], [[61, 206, 119, 174], 20], [[202, 229, 186, 27], 20], [[203, 178, 137, 175], 90 00], [[210, 157, 158, 38], 9900]]}, "KOR"=>{"deb.cdn.araki.net"=>[[[143, 248, 23 4, 110], 20]]}, "SA"=>{"deb.cdn.araki.net"=>[]}, "EU"=>{"deb.cdn.araki.net"=>[[[ 141, 76, 2, 4], 9000]]}, "AF"=>{"deb.cdn.araki.net"=>[]}, "AS"=>{"deb.cdn.araki. net"=>[[[61, 115, 118, 67], 1000], [[61, 206, 119, 174], 20], [[202, 229, 186, 2 7], 20], [[203, 178, 137, 175], 9000], [[210, 157, 158, 38], 9900]]}, "JPN"=>{"d eb.cdn.araki.net"=>[[[61, 115, 118, 67], 1000], [[61, 206, 119, 174], 20], [[202 , 229, 186, 27], 50], [[203, 178, 137, 175], 9000], [[210, 157, 158, 38], 9900]] , "jp.cdn.araki.net"=>[[[61, 115, 118, 67], 1000], [[61, 206, 119, 174], 20], [[ 202, 229, 186, 27], 50], [[203, 178, 137, 175], 9000], [[210, 157, 158, 38], 990 0]]}, "NA"=>{"deb.cdn.araki.net"=>[[[204, 152, 191, 39], 9000], [[128, 30, 2, 36 ], 9000], [[35, 9, 37, 225], 9000]]}, "OC"=>{"deb.cdn.araki.net"=>[[[150, 203, 1 64, 37], 9000]]}, "FRA"=>{"deb.cdn.araki.net"=>[[[193, 54, 19, 19], 9000], [[194 , 2, 0, 36], 9000]]}} |
以下3ヶ月分のplat.debian.or.jpで動作しているDNSへのアクセス実績を示す。
ユニークホスト数は20554であるが、 その分布は極端に偏っている。
なお、 国が判定できないのは1552件、 率にして0.135%であった。
|
|
アジア地域向けのサーバおよび韓国地域向けのサーバは日本向けのサーバ群設定と全く同一のものを設定して いる。
日本での振り分け実績は、 設定した頻度情報をほぼ正確に反映しており、 プログラムの動作および、 期間中の各サロゲートに 大きな障害がなかったことを示している。
加えて、 本システムの日本での運用においては、 マスターサーバからサロゲートへのファイル同期時に配送ツリーの確認とファ イルの一致を確認しており、 障害時の排除機能を有するため、 単なるファイルのミラーリング以上の安全性は確保されて いる。
OpenSuse における配送(mirrobrain, http://en.opensuse.org/Build_Service/Redirector ) はsourceforge をはじめ多くのCDNで採用している方法である。 クライアントへのサロゲート決定の方法はGeoIPの使用しており、 本システ ムと同等のものである。
ただし、 Debianのaptシステムの制限により、 本システムではHTTPリダイレクトではなく、 DNSを使用して いる。
また、 mirrorbrainではサロゲートへの配送の確認は行っていないものと思われる。
apt の P2P 対応も有力な配布手段である。 apt-p2p ( http://www.camrdale.org/apt-p2p/) によ り、 apt の P2P 対応が進められている。 有力な候補である。 ただし、 Kashimir プロトコルをクライアン トで直接使うものであり、 ネットワーク利用ポリシーとの競合や install 時に利用できない点、 取得希望 ファイルが入手できない場合に HTTP にフォールバックするため速度に問題があり、 今後検証すべき問題も 多い。
サロゲートが正しく動作しているのか、 その能力に応じたサロゲート使用ができているかどうかは、 分散したファイルサーバ からのファイル入手において重要な要素である。 この組み合わせを考えると、 表4.1のように分類される。 本システムで は、 サーバやサーバとクライアント間のネットワークの実測を行わないこと、 ここのサロゲートの運用は独 立して行うことでサロゲートへ特別なプログラムを必要としないことで、 コストの劇的な削減を可能として いる。
|
ここまで説明してきた、 cdn.debian.or.jpの動作には改善すべき点が多数存在する。 改善の展望としていくつか挙 げる。
アクセス実績によると、 日本、 米国、 カナダ、 韓国、 中国、 フィンランド、 台湾、 インド、 インドネシア、 ホンコン、 ロシアと 続く。 現状では、 大陸毎に設定されたサロゲートは存在するものの、 日本、 韓国、 アメリカを除けば各国毎に設定されたサロ ゲートは存在しない。
このアクセス実績にもとづき、 これらの国内のミラーを生かした設定を近い将来行いたい。
apt-get コマンドの HTTP REDIRECT
apt-getコマンドはHTTP REDIRECTに対応していない。
そのため、 前述したようにmirrorbrainなどのCDNは使用することができない。
HTTP REDIRECTは、 いったんHTTP GETなどで接続してきたクライアントに対して、 新たにそのリソースが存在するURLを 通知するものである。 この仕組みをうまくつかったCDNとして、 Coral Content Distribution Network (Coral CDN)が ある。 Coral CDNはサロゲート間でP2Pによるファイル配置し、 そのインターフェースとして、 HTTPを使用し、 しかも使用 にはインターネットから取得可能なファイルであれば制限をかけていない。 さらに、 Apacheを使った一時配布サーバでは HTTP REDIRECTをつかってCoral CDNに誘導することも推奨されている。 ただし、 現状で、 Coral CDNを使うた めに、
deb http://cdn.debian.or.jp.nyud.net:8090/debian/ stable main contrib non-free
|
を指定することも可能だが、 少なくとも日本においてはCoral CDNを担うサロゲートが存在しないこともあって非常に低速 である。 ただし韓国や中国では広くつかわれており、 将来の拡張に使用したい。
マスターサーバからサロゲートへのミラーリング方法
本システムでは既存のrsyncによるミラーリング手法には手をつけていない。 行ったのはrsyncをつかってタイムスタンプ を確認し、 サロゲートのヘルスチェックのひとつに使用したのみである。 debianにおけるrsyncの使い方現状のミラーリング に由来する問題は
等 さ ま ざ ま で あ る 。
Debianが潤沢なネットワーク環境と強力なCPUを要するホストでない場合でもミラーリングないしサロゲートからのファイ ル入手を可能とするFLUTEなどの配送手法が必要になろう。
いつでも必要なソフトウェアやコンテンツを安価に入手する手段としてCDNはこれからも様々な発展を続けると考える。 Debianはdebの安定入手手段の有無がシステムの信頼性を左右するシステムであり、 CDNの広範な活用が今後ますます求めら れるようになると考える。
本システムの導入により、 サロゲート個々の安定性がクライアントに直接影響することはかなり抑えることができるが、 より 確実なパッケージ入手のために、 信頼性が高く安定動作しているサロゲートの増加をDebianプロジェクトでは引き続き求めて いる。
第
18回 関西Debian勉強会 2008年10月
____________________________________________________________________________________________