DNS サーバ PrimDNS オープンソース公開のお知らせ

こんにちは。インフラチームの ebisawa です。

独自に実装した DNS コンテンツサーバ PrimDNS をオープンソースとして公開させて頂きましたのでお知らせいたします。ご興味がありましたらぜひお試しいただければと思います。

グリー内では特に何もしなくてもなぜか各サーバの名前を DNS 解決できたり、その他いろいろなサービスが提供されています。今回公開させていただいた PrimDNS は、もともとグリーのインフラ内で利用されているものをベースに、一般の利用に向けてアレンジしたものです。

公開先はこちら → http://labs.gree.jp/Top/OpenSource/PrimDNS.html

なぜ DNS

DNS には、かつてより超定番の実装が存在しますが、何らかの理由でもっと他の選択肢もあるといいのに、と思われたことはないでしょうか。

特に DNS のようなインターネットを利用する上で必要不可欠なサービスについては、(ちょっと特殊な利用環境の)自分たちの要望がもれなく実現され得るソリューションがあると、インフラチームの仕事が減って大変楽をすることができます。

また、視点を変えると、DNS はインターネットにおいて普及率 100% の分散 KVS とみることもできます。いろいろと楽しい使い方があるんじゃないでしょうか。

特徴

もともと他のシステムと密接に連携して動作する前提で作られたため、様々なバックエンドに接続しやすいよう意図されています。

また、マルチコア化が進むいまどきのサーバ環境にふさわしく、マルチスレッド化は当然として、さらにロックフリーアルゴリズムの全面的な採用にチャレンジしています(ソースを grep しても mutex 等がほとんど見つからないと思います)。ベンチマークによると、結果的にもなかなかのパフォーマンスが出ているようです。

ベンチマーク

以下は厳密に行われたベンチマークではないので結果は参考程度とお考えください。

  • 測定環境

    • Linux 2.6.26 (Debian 5.0.8)
    • Dual Xeon L5520 2.27GHz/4Core (HyperThreading で仮想16コア)
  • 測定対象

    • BIND 9.6-RSV-R4
    • NSD 3.0.7
    • PrimDNS 0.6
    • 読み込ませるゾーンファイルは localhost ゾーンのみとする
  • 測定方法

    • Nominum 社提供の ResPerf ツールを利用してスループット (qps) を計測
    • 測定対象と同一ホストで RefPerf を実行 (あくまで簡易測定です)
    • Nominum 社提供の Sample query data を利用
    • 3million ではクエリが不足したため単純に2つ分連結した 6million のデータを利用
  • 測定結果
PrimDNS 126874 qps
NSD 64924 qps
BIND 56650 qps

まとめ

  • DNS サーバを作ったので公開しました。オープンソースなので自由にご利用いただけると幸いです。
  • せっかくなので今後も開発を続けたいと思います。がんばります。
  • IPv6 と DNSSEC 対応はすぐやります。すみません。
  • ロックフリーは難しいです。デバッグしていると頭が痛くなります。

参考