2009年8月22日

ErlangとDNS

(初出:2009年8月22日 はてなダイヤリーより)

DNSはインターネットの各種基本プロトコルの中で最も扱いにくいもののひとつ.本当に高速な処理(=100kqueries/sec or faster)が要求される局面では,たぶんErlangのように一度VMが間に入る言語システムでは間に合わない.しかし,Erlangは並行処理が 書き易いという利点は,DNSの各種サブシステムでは役立つと思う.ちょっとしたキャッシュサーバ,コンテンツサーバなどには向いているだろうし.もしErlangで何かDNS関連のアプリケーションを作るなら,yawsやMochiwebみたいなものを目指すべきだろうと思う.

DNSの研究開発というのは実は非常に難しくて,

  • ステークホルダーが多く,彼等の大多数は変化を望まない(特にISP)
  • ドメイン名自身が商標ビジネスの一部になっているため,技術論だけでは動かない
  • 明文化されていない約束事が多く,それらを知らないと簡単に開発できない
  • 何かやろうとすると影響範囲が大きく,通信量やセキュリティ脆弱性(フィッシングなどを含む)などの問題にすぐにぶつかってしまう
  • 過去のアプリケーション実装を無視した実験は実運用では事実上できない
などの問題がある.

そして,日本でDNSの研究開発を本気でやるなら,

  • JPRSでそういう仕事をする
  • WIDEのm.root-servers.netの仕事をする
  • ISPやレジストラで運用にかかわる
という,実はコーディングよりも,運用のスタミナが要求される非常に厳しい道以外にないんだろうと思う.残念ながら,私は上記のどれにも関われない状態のまま,挫折したけど.

個人であれば,神明達哉さんのように渡米してISCでBINDの開発にかかわる,という直球勝負をする方法もある.しかしこれはこれで生活を賭けなければいけないことで,そう簡単に誰でもできるわけではない.

ただ,DNSは研究開発だけじゃなくて運用や解釈も難しいので,DNS自身に関する知識や技はインターネットで何かやろうとする限 りはついてまわるし,覚えておいて損はないと思う.Erlang R13B01なら,まず lib/kernel/src/inet_dns.erl を読むことから始 めるべきだろう.

そして,DNS自身は,実装は今とは大きく変わる可能性があるけど,世界からドメイン名が消えてなくなる時が来るまでは残るシステムだろうと思う.

以上,つらつらとTwitterに書いたことをこちらにも.